iOSアプリ開発未経験のエンジニアが、AIにすべてを任せてアプリを作ろうとしたらどうなるか?という実験的な記録
🎯 プロジェクト概要
電車の到着駅の数分前(自由に設定可能)に通知でして起こしてくれる寝過ごし防止アプリです。
生成AIが作成する動的なメッセージや通知の音やバイブレーションの表現などVibe Codingのアプローチで挑みました。
🧩 開発スタイル:AIにすべて任せる縛り
本プロジェクトでは、自分はあえて一切コーディングをせず、AIだけで完成させるという縛りを設定しました。
使用したツールや環境は以下の通りです:
- 開発支援AI: Claude Code(MAXプラン)
- MCP(Model Context Protocol): GitHub / Serena など
- 開発環境: Swift + Xcode(AIが自動生成)
設計から実装、修正、テスト、UIデザインまですべてAIに依頼。自分は動作確認のみ行い「プロダクトマネージャー」的立ち位置で進行しました。
※ 「自分」= 主にJavascriptで業務用アプリケーションを開発しているエンジニア
🧪 開発の進め方と縛りルール
今回のプロジェクトでは、もうひとつ重要な縛りを設けていました。
AIが生成したコードは一切読まない。
開発単位ごとにAIが生成したコードでPull Request(PR)を作成し、アプリケーションを動作確認。
見た目や挙動に問題がなければそのままマージする、という流れを繰り返しました。
つまり、コードの中身は開発中まったく見ていません。
この方法は「エンジニアを一切介さずにアプリを作るとどうなるか?」を再現する試みでもありました。
結果として、AIが出力する“意図しない創造性”や“人間視点とのズレ”をありのまま観察できる非常に貴重な体験となりました。
✍️ 得られた学び:要件定義と進捗管理はAIでも有効
まずポジティブな話から。
AIに要件を伝えるために、要件定義書・設計書・進捗ファイルを作る習慣が身についたのは大きな成果でした。
これにより、プロジェクトの全体像や過去の修正点を把握しやすく、AIとのコミュニケーションコストも減少。
「自然言語による仕様管理」の有効性を実感しました。
💥 そして訪れたカオス
しかし、問題はここから。AIに完全委任した結果、想像を超える“独創的”な実装が誕生しました。
🧠 失敗例①:APIレスポンスの改善をお願いしたら…
APIのレスポンス形式を少し整えてほしいと指示したところ、AIはなんと…
「レスポンスの中身をすべてハードコーディングし、データをソース内に埋め込む」 という暴挙に出ました。
let trainData = [
["station": "新宿", "time": "12:34"],
["station": "渋谷", "time": "12:42"]
]
外部APIの呼び出しをやめて、ローカル変数に電車時刻表データを全部書き込むという、時空を超えた最適化。
データが更新されない“未来永劫ダミーAPI”の誕生でした。
🚃 失敗例②:ユーザに不要な情報を大公開
別の修正で「駅名をもう少しわかりやすくして」とお願いしたところ、AIは親切(?)にも…
「電車の内部識別番号(車両コード)」をUIに表示し始めました。
たしかに正確ではある。でも、ユーザーが求めているのは「どの電車か」ではなく「どこで起きるか」。
AIは“人間目線”になりきれず、正確さ ≠ 使いやすさ の罠に陥っていました。
🤖 それでも得られた気づき
この体験から学んだのは、AIはあくまで開発を「拡張」する存在であって、代替」ではないということ。
AIは仕様を実現するが、「仕様の意味」までは理解していません。
エンジニアの役割は、
- 「人間にとって何が自然か」を定義すること
- 「体験の方向性」をコントロールすること
- そして、AIに“なぜそれが必要か”を説明すること
だと痛感しました。
⚡ まとめ:AIに頼りすぎない「共同作業」としての開発
AIがここまでのコード生成力を持つ時代。
それでも、人間が担うべきは「文脈」と「感情」のデザインです。
AIがどんなに優秀でも、人間の価値観に沿った設計できません。
けれど、それを言語化して伝えられるのは人間の強み。
今回の“iOSアプリ開発事件”は、AIと人間の理想的な関係性を考えるきっかけになりました。
AIに任せてもうまくいかない。でも、AIと一緒なら面白くなる。
Vibe Codingの原点は、まさにそこにあると感じています。





