出張自動車整備予約プラットフォームの刷新
整備マネージャーがユーザーの選んだ時間に自宅前や会社へ出向き、エンジンオイル・バッテリーを交換する出張車両整備サービスで、アプリ2.0刷新の土台となる構造を設計し、基盤を作りました。構想の段階にとどまっていた設計を実際のプロジェクト構造に移す仕事で、既存の出張整備の予約フローはそのまま守る必要がありました。構造があいまいだと、機能が一つ増えるたびに直す箇所が複数の画面に広がります。作業は画面・通信・端末内ストレージの境界を分けるところから、共に働いた開発者との構造の議論と引き継ぎまでです。
構想だけだった設計を実際のプロジェクトに移したアプリ構造
出張整備アプリ2.0の刷新は、全体の設計が構想にとどまった状態から始まりました。画面モジュール・データモデル・通信層・端末内ストレージの境界を分け、実際のプロジェクト構造として具体化しました。画面ごとにサーバーへのリクエスト・業務ルール・画面状態・ユーザー入力を分離し、各画面が担う役割をはっきりさせました。新しい機能が入っても既存の境界に触れずに付け足せる形を基準にしました。

予約・車両情報・サービス商品のリクエストを一つの枠に収めた通信層
出張整備アプリは、出張整備の予約・車両情報・サービス商品のように性格の異なるサーバーリクエストを複数の画面から送ります。ユーザーは車両を登録し、エンジンオイル・バッテリーのような整備商品を選んでから、整備マネージャーが来る時間と場所を決めて予約します。リクエストをドメインごとに整理して同じ枠に収め、非同期で返る応答は一つの流れで受けて画面の状態につなげました。リクエストが増えても、どこに追加しどこで応答を受けるかが一通りに決まります。

車両情報と作成中の予約をアプリ内に置く端末内ストレージ
出張整備アプリは、車両情報・ユーザーの状態・一時保存したデータをアプリ内に保持します。このデータのための端末内の保存構造を設計し、ネットワークの状態と画面の流れに応じて必要なデータを取り出し更新するアクセス層を別に整理しました。どのデータを端末に置き、どのデータをサーバーから改めて受け取るかを、この段階で分けました。

ジュニアと共にすり合わせ、シニアに引き継いだ設計意図
出張整備アプリの構造は、ジュニア開発者と共に議論しながら実装の方向を検証しました。コードを書くだけでなく、画面状態・通信・端末内ストレージがなぜ分かれるべきかを説明し、それぞれの役割を一緒にすり合わせました。構造の作業を終えた後は、続けて開発するシニア開発者に、設計判断の理由と拡張ポイントまで整理して渡しました。

この仕事のポイント
画面・通信・端末内ストレージの境界を分けたアプリ構造
予約・車両情報・サービス商品のリクエストを一つの枠で扱う通信層
設計判断の理由と拡張ポイントまで渡した引き継ぎ
インサイト
GA4 client_storage: 'none'은 정말 쿠키를 막을까?
두 달 전 이 블로그에 「GA4 쿠키 없이 쓰기」라는 글을 썼습니다. clientstorage: 'none' 으로 쿠키 저장을 끄고, 자체 분석이 쓰던 익명 ID 를 clientid 로 넘기면 쿠키 0개로 GA4 를 쓸 수 있다는 내…
GA4 Measurement Protocol: gtag.js 없이 서버에서 이벤트 보내기
랜딩 페이지의 전송량을 파일 단위로 쪼개 보다가, 가장 큰 파일이 우리 코드가 아니라는 것을 알았습니다. Google Analytics 의 gtag.js 였고, 방문 한 번에 176KB 를 받고 있었습니다. 페이지 전체가 1,094K…
중소 제조업 AI 도입 순서: DX를 먼저 끝내야 할까?
공장을 가진 중소·중견 제조기업 16만여 곳 가운데 스마트공장을 도입한 곳은 19.5%입니다. 회사가 작을수록 이 비율은 더 떨어집니다. 중소벤처기업부가 2025년 4월에 낸 제1차 스마트제조혁신 실태조사 결과입니다. 그림: 기업 규…
Next.js loading.tsx와 404: 버튼이 화면보다 먼저 살아나게 하기
관리 화면 왼쪽 위에 사이드바를 접고 펴는 ☰ 버튼이 있습니다. 폭 하나 바꾸는 버튼인데, 대시보드에서 누르면 2초 넘게 아무 반응이 없었습니다. 레이아웃만 바꾸는 일이 왜 이렇게 오래 걸리는지부터 들여다봤습니다. Next.js 16…



