← retrospectives の一覧

個人開発の振り返り | 2026.10.01 – 10.11

チャットだけで、
家族のアプリはどこまで作れるか

パパの通勤を家族が地図で見守るアプリ(PWA)「どこどこパパ」を、Claude Code のクラウドセッションへの日本語の依頼だけで作った。自宅最寄りの私鉄 → JR → 第三セクターの鉄道と乗り継ぐ通勤を、時刻表と GPS で追いかけ、家族のスマホに知らせる。バックエンドは AWS Amplify、最後はアレクサへの話しかけまで。
このページは、確かめたかった 4 つのことへの答えと、次に活かすことをまとめる。

AI(Claude Code)が担ったこと 人がやったこと コンソールでの手作業

01数字で見る

11日開発期間最初のコミットから最後の修正まで。コミットがあったのは 7 日
20回本番への反映「mainに反映して」→ PR → マージ。毎回テスト環境で確かめてから
56コミットマージを除く。うち 34 は 3 日目の 1 日に集中
45機能のブランチ要望ごとにテスト環境のブランチから切った
7.5千行TypeScript画面・時刻表の計算・バックエンドの関数
約100回チャットでの依頼スクリーンショット付きの要望と「mainに反映」を含む

02確かめたかった 4 つのこと

問い → 結果 → 教訓 → 次に活かす。上の光る線は、アプリの地図に流れている路線の色。

Q1

チャットの要望だけで、どこまでアプリを作れるか

結果:最後まで作れた

実際の線路に沿って走る 3D の電車の地図、時刻表から乗り継ぎを見込む計算、GPS で「乗れたか」を判定、家族への通知(決まった時刻の予約・押し間違えの 2 分待ち・種類ごとのオン/オフ・履歴)、お出かけ中の位置の共有、アレクサまで。人がやったのは、要望・実機での確認・判断・コンソール操作だけ。

教訓
  • スクリーンショット+一言の要望が、いちばん速く正確に伝わった
  • 「修正はせずに方針を相談したい」を挟むと、作り直しが減った
  • 使う人の目線の穴は人が見つけた。例:パパ側で通知を止めると、家族は「なぜ来ないか」が分からない → 受け取る側だけで選べる形に
次に活かす
  • 見た目、特に 3D の形は、言葉だけでは伝わりにくい(下の「課題」)
Q2

AWS Amplify(Gen 2)での開発体験

結果:テスト環境と本番の安全網になった

ブランチごとにバックエンドごと別の環境ができる。テスト用のブランチに入れれば自動で確かめられ、本番を壊さずに毎日出せた。Lambda・DynamoDB のストリーム・予約実行・Web Push まで、すべてコードで書けた。

つまずき
  • スタックどうしの参照が輪になり、本番のデプロイが失敗。最初の推測は外れ、手元でテンプレートを作って再現してから直した
  • 環境変数はビルドのときに読まれる。後から入れて、アレクサの呼び出し許可が付かなかった
  • テスト用と本番で、ユーザーもデータも別。設定のやり直しが要る
教訓 / 次に活かす
  • 推測で直さず、手元で再現してから直す
  • 「どの資源がどれを参照してよいか」を決めて、設計メモに残す
  • シークレット・環境変数・ブランチごとの値の置き場所を、最初に表にしておく
Q3

Claude のクラウドセッションだけで開発する

結果:手元の開発機なしで完結した

スマホのチャットから依頼し、コンテナの中で型チェック・lint・ビルド、ヘッドレスのブラウザ(偽の時計で時刻を進める)での画面確認、バックエンドのテンプレート生成まで済んだ。

できなかったこと
  • 実機での確認、AWS とアレクサのコンソール操作
  • コンテナは使い捨て。会話が長くなると、前半は要約されて細部が抜ける
教訓 / 次に活かす
  • CLAUDE.md を設計メモとして機能ごとに更新し続けたのが、要約をまたぐ記憶の代わりになった
  • 毎回、「確かめたこと」と「確かめていない(実機で見てほしい)こと」を分けて伝える
Q4

アレクサ連携をやってみる

結果:話しかけて答えるところまで

画面と同じ計算(時刻表・到着予定)を Lambda でそのまま使い回し、「パパはどこ」「何時に帰ってくる」「早く帰ってきてって伝えて」の 3 つを作った。ストアには出さず、開発中のまま家族の機器で使う。

つまずき
  • Lambda の呼び出し許可が付かず、エンドポイントを登録できなかった
  • 呼び出し名が別の言葉に聞き取られる(「ドコドコパ」「ドコドコパンパ」)→ 短い呼び出し名に変えて解決
教訓 / 次に活かす
  • 音声は「どう聞き取られるか」から名前を決める。音声履歴で確かめる
  • テスト画面に文字で入れて、設定の問題か聞き取りの問題かを切り分ける

03課題 ―― 次はここを変える

すべての依頼を、いちばん上のモデル 1 本で処理していた

設計も、単純な修正も、画面確認も、テストの実行と結果の読み取りも、同じ Opus が担った。手軽な反面、費用がかさむ。

3D モデルのデザインは、言葉で伝えにくい

乗っている電車を作り込んだ 3D にしたが、新幹線の先頭車は何度作り直しても、今も納得しきれていない。今回はここに費用をかけないと決めて、妥協した。

04やり取りから見えたこと

実機でしか分からない

メニューを開いたタップが中のボタンを押す、光の輪が位置の更新のたびにやり直す、横画面で重なる、古い iPad で真っ黒。どれもスクリーンショット 1 枚で原因に近づけた。

家族が使う前提の安全装置

押し間違えに 2 分の取り消し時間、同じ知らせの連続は 1 回に、送る前に「伝えますか?」、ログアウトは確認つき。作る側より使う側の手元で効く。

線引きは言葉にして残す

「位置は判定にだけ使い、送らない」で始め、のちに「お出かけ中は家族と共有する」と線を引き直した。決めた線は、その場で設計メモに書いた。

小さく出して、毎日直す

「mainに反映して」が 20 回。毎回テスト環境で確かめてから本番へ。直してほしいことが、次の依頼の種になった。

051 つの要望が本番に届くまで

  1. 01要望
    日本語で、スクリーンショットを添えて
    人
  2. 02相談
    迷うところだけ、選択肢とおすすめを出して決める
    人AI
  3. 03機能のブランチ
    テスト環境のブランチから切る
    AI
  4. 04実装
    画面・時刻表の計算・バックエンド。設計メモも更新
    AI
  5. 05自分で確かめる
    型・lint・ビルド、ヘッドレスのブラウザで画面、場面ごとの計算、テンプレートの輪の検査
    AI
  6. 06テスト環境
    ブランチに入れると、バックエンドごと自動でデプロイ
    AI
  7. 07実機で確認
    家族のスマホで使う。必要ならコンソールで設定
    人手作業
  8. 08本番へ
    「mainに反映して」→ PR → マージ
    人AI

06つまずいた実例

デプロイ予約の仕組みを足したら、本番のデプロイが失敗したスタックの参照が輪になっていた。手元でテンプレートを作り、輪を探す小さな検査で再現。予約専用の関数をやめ、通知の関数が自分自身を予約する形に変えて解消。
実機メニューを開いたタップが、そのまま中のボタンを押した開いてすぐの 0.4 秒は押せないようにした。テストでは「閉じたか」しか見ておらず、押せたかを確かめていなかった。
実機光の輪のアニメーションが、毎回最初からやり直す位置の更新のたびに要素を付け直していた。付け直さず、位置だけを動かすように。
端末古い iPad で、画面が真っ黒ビルドの既定の対象が新しいブラウザだった。端末の更新で解決。対応端末は最初に決めておくべきだった。
音声アレクサが呼び出し名を聞き取れない音声履歴で聞き取られ方を確かめ、短く聞き取りやすい呼び出し名に変えた。コードは変えずに済んだ。
通信設定したパパの画像が、初期の顔に戻って見えたアプリを裏に回すと受け取りが切れていた。戻ったときに張り直し、保存は変わった項目だけにして、消える危険も塞いだ。

07次に活かすこと

うまくいったこと

  • スクリーンショット+一言の要望
  • テスト環境 → 本番のブランチ運用。本番を壊さずに毎日出せた
  • 設計メモ(CLAUDE.md)を機能ごとに育てる
  • 「確かめたこと」と「確かめていないこと」を分けて伝える
  • 迷う機能は、作る前に方針だけ相談する