Daydream Camera

Daydream Camera - 空想旅行カメラ

こんにちは、ZOZOTOWNでiOSアプリエンジニアをしているtsuzuki817(@tsuzuki817)です。

今回は、地図上にピンを刺すだけで、その場所の緯度経度・天候・時間帯をAIが解釈し、風景写真を「現像」してくれるカメラアプリ Daydream Camera を、AIエージェントと共に開発した話をします。

「行きたい場所の風景を、AIが夢見てくれる」

そんなコンセプトで、フィルムカメラのような体験設計を採用した空想旅行アプリです。

プロダクト概要:空想旅行カメラとは?

Daydream Cameraは、地図上の任意の場所にピンを刺すだけで、AIがその場所の風景写真を「現像」してくれるアプリです。

まさに「空想で旅行できる」カメラアプリ。実際に行けない場所でも、AIの想像力で風景を楽しめます。

開発体制:AIネイティブアプローチ

今回の開発では、私は「ディレクター」として仕様決定に専念し、実装は2つのAIエージェントに委譲する体制を取りました。

開発チーム構成
  • 私(ディレクター):仕様決定、最終レビュー、リリース判断
  • Gemini(PM/デザイナー役):アイデア具体化、原価計算、ロゴ作成、ASO対策
  • Claude Code(実装エンジニア役):Swift/SwiftUIコード自動生成、Firebase構築

AIエージェントと「3人」で開発する体制は、個人開発の限界を突破する新しいアプローチでした。

技術アーキテクチャ

採用パターン:MVVM + Protocol指向設計

SwiftUIのモダンな設計思想に沿って、MVVM + Protocol指向設計を採用しました。

主要技術スタック

iOS: 17+
UI: SwiftUI + @Observable マクロ
永続化: SwiftData
地図: MapKit (Look Around機能)
AI: Firebase AI (Gemini 3 Pro Image)
広告: AdMob

外部依存の最小化

外部ライブラリは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エージェントへの指示が明確になり、生成されるコードの品質が向上します。

Daydream Camera - 空想旅行カメラ

行きたい場所の風景を、AIが夢見てくれる。
フィルムカメラのような体験で、空想の旅を楽しもう。

App Storeでダウンロード

最後まで読んでいただき、ありがとうございました。
AIエージェントとの開発は、個人開発の新しい可能性を開いてくれます。ぜひ皆さんも挑戦してみてください。