こんにちは、ZOZOTOWNでiOSアプリエンジニアをしているtsuzuki817(@tsuzuki817)です。
今回は、地図上にピンを刺すだけで、その場所の緯度経度・天候・時間帯をAIが解釈し、風景写真を「現像」してくれるカメラアプリ Daydream Camera を、AIエージェントと共に開発した話をします。
「行きたい場所の風景を、AIが夢見てくれる」
そんなコンセプトで、フィルムカメラのような体験設計を採用した空想旅行アプリです。
プロダクト概要:空想旅行カメラとは?
Daydream Cameraは、地図上の任意の場所にピンを刺すだけで、AIがその場所の風景写真を「現像」してくれるアプリです。
- 地図で行きたい場所を選ぶ
- AIが緯度・経度、現地の天候、時間帯を解釈
- フィルムカメラのように「現像」を待つ
- 白昼夢のような風景写真が届く
まさに「空想で旅行できる」カメラアプリ。実際に行けない場所でも、AIの想像力で風景を楽しめます。
開発体制:AIネイティブアプローチ
今回の開発では、私は「ディレクター」として仕様決定に専念し、実装は2つのAIエージェントに委譲する体制を取りました。
- 私(ディレクター):仕様決定、最終レビュー、リリース判断
- Gemini(PM/デザイナー役):アイデア具体化、原価計算、ロゴ作成、ASO対策
- Claude Code(実装エンジニア役):Swift/SwiftUIコード自動生成、Firebase構築
AIエージェントと「3人」で開発する体制は、個人開発の限界を突破する新しいアプローチでした。
技術アーキテクチャ
採用パターン:MVVM + Protocol指向設計
SwiftUIのモダンな設計思想に沿って、MVVM + Protocol指向設計を採用しました。
主要技術スタック
外部依存の最小化
外部ライブラリはFirebaseとAdMobのみに絞り、Keychainはセキュリティフレームワークで直接操作しています。
個人開発では長期メンテナンスが重要です。外部ライブラリに依存すると、ライブラリの更新に追従し続ける必要があります。必要最低限の依存に抑えることで、メンテナンスコストを削減しています。
MapKitの選定理由:Look Around機能の活用
地図表示にはMapKitを選定しました。Google Mapsのストリートビューではなく、AppleのLook Around機能を採用した理由があります。
- コスト面:Google Mapsのストリートビューは従量課金制で「個人開発がバズった際に赤字になるリスク」がある
- UX面:Look Aroundのアニメーションの浮遊感がアプリの「白昼夢」コンセプトと見事に合致
- 統合性:SwiftUIとの親和性が高く、実装がシンプル
結果として、コスト削減とUX向上の両方を実現できました。
セキュリティ実装:サーバーレスでも堅牢に
サーバーレス構成でも堅牢なセキュリティを実現するため、複数の対策を実装しました。
- Keychain暗号化保存:アプリ削除後もUUIDが復元され、BAN回避を防止
- Firebase App Check:App Attestトークン検証で不正アクセスを防止
- Remote Configベースの動的BAN機能:サーバーデプロイなしで特定ユーザーを即座に機能停止
- クライアント側サニティチェック:フィルム残数が上限超過時に自動リセット
Keychain暗号化保存の実装
UUIDをKeychainに保存することで、アプリを削除・再インストールしても同じユーザーとして識別できます。これにより、BANされたユーザーがアプリを再インストールして回避することを防いでいます。
Remote Configによる動的BAN
Firebase Remote Configを活用し、サーバーをデプロイすることなく、管理コンソールから即座に特定ユーザーの機能を停止できる仕組みを実装しました。不正利用を検知した際に迅速に対応できます。
マネタイズ設計:「待ち時間」の価値化
Daydream Cameraでは、「現像の待ち時間」を価値化するマネタイズ設計を採用しました。
フィルムカメラのように「現像を待つ」体験設計により、その待ち時間にAdMobバナー広告を自然に表示。生成AIのAPIコスト償却を実現しています。ユーザー体験を損なわず、持続可能なビジネスモデルを構築しました。
「待つ」という行為自体をポジティブな体験に変換し、その間に広告を表示することで、ユーザーにとってもストレスの少ないマネタイズを実現しています。
開発から得た学び
AIエージェントとの開発を通じて、いくつかの重要な学びがありました。
1. 仕様の明文化が最重要
AIコード生成の効果を最大限に引き出すには、「仕様の明文化」(CLAUDE.md)とプロトコル設計の先行が不可欠です。曖昧な指示ではAIは期待通りのコードを生成できません。
2. セキュリティレビューは人間が担当
AIが生成したコードは効率的ですが、セキュリティ観点のレビューは人間が担当する必要があります。特に認証・認可、データの永続化、外部APIとの通信部分は念入りに確認しました。
3. プロトコル設計を先行する
実装に入る前にプロトコル(インターフェース)を定義しておくと、AIエージェントへの指示が明確になり、生成されるコードの品質が向上します。
最後まで読んでいただき、ありがとうございました。
AIエージェントとの開発は、個人開発の新しい可能性を開いてくれます。ぜひ皆さんも挑戦してみてください。