⚙️

旅行アプリ開発記録① LLM API × Flutter × FastAPI

に公開

システム構成

https://zenn.dev/nnnwa/articles/6f91136a0dfcf4
本アプリは、ユーザーが希望条件を入力すると、OpenAIやGoogle Maps APIを活用して旅行プランを自動生成し、課金制限付きで提供するiOS向けFlutterアプリです。

構成は以下のようになっています。


構成要素の一覧

区分 コンポーネント 主な役割
フロントエンド Flutter App (iOS) UI/ユーザー操作全般
認証 Firebase認証 匿名ログイン、UID発行
課金 RevenueCat SDK+App Store サブスクリプション管理
バックエンド FastAPI (Render) API処理、外部API呼び出し
データベース PostgreSQL (Render) 使用制限カウント保存
外部API OpenAI API 旅行プラン生成(GPT)
外部API Google Maps Platform 位置情報・ルート・場所検索

各ノードの役割

Flutterアプリ(iOS)

今の主流かなと思い採用、最初はAndroid拡張も容易かなとの思惑もあり。

  • main.dartに主要機能を集約
  • shared_preferences でお気に入り保存
  • video_player でload画面とかpaywalに動画載せてます
  • Firebaseで匿名ログイン後、UIDを保持しつつRevenueCatでサブスク状況を取得

💰 料金:無料、Flutter自体はコストなし!


🔐 Firebase認証

  • 匿名認証を使用し、ユーザーID(UID)を発行
  • 認証処理はすべてクライアント側で完結

💰 料金:無料(月1万ユーザー以上で有料化になるようだが、、、無縁かなと笑)


💳 RevenueCat

これもios課金だと超主流と聞いて。たしかに超簡単でした。

  • サブスクリプションの購入・確認を担当
  • クライアントSDKで完結+バックエンドからREST APIでも状態参照
  • 管理画面で商品・オファリング・エンタイトルメントを設定
  • デバイス交換時のapple id経由の課金復元までサポート

💰 料金:無料。売上に対する手数料なし(Apple税 15%は別途)


🧠 OpenAI API

中核です。選定はclaude等と少し悩みましたが、日本語と総合力、料金でベタにGPTで。
利用方法的に、精度は最低限、速度と料金が最優先でした。組み込みだとこうなる気がしますね。

  • GPT-4.1 nanoで「地域+条件」から候補エリアを生成
    (最初はmini使ってましたが、nanoの方が早くて半額だったので変更。)
  • ユーザーの入力プロンプトを元に、日帰りor宿泊・観光地・ルート案を生成
  • その他、電車のルート検索を代替で実施させてます
    (この辺りかなりひと悶着あったので、別途記事書きたい)

💰 料金(2025年7月時点)

  • gpt-4.1 nano:$0.0005 / 1K tokens(入力+出力)
    今回のケースでいうと、正直殆ど料金発生しません。

🗺 Google Maps Platform

  • Geocoding API:住所↔座標変換
  • Places API:カテゴリやキーワードから観光地を検索
  • Directions API:移動時間やルートを取得

💰 料金

  • Geocoding / Directions:月10,000回まで無料(Essentialsプラン)
  • Places API:種類により課金(Place Detailsは有料)
    今回の一番のネック、かつ爆弾。★☆正直少額アプリでの運用は実質不可能だと思います。☆★

FastAPI(Render)

バックエンドの中核、すごく楽でした。pythonなら慣れてるのもありますけど、そうでなくても。応答性も十二分です。

  • APIルーティング、認証ヘッダー処理、サブスク検証、制限確認、外部API呼び出しなどを担当
  • フロントエンドからは下記ヘッダーが常に送られる
    • X-Firebase-UID
    • X-Device-ID
    • X-Payment-Status

💰 Render料金

  • Starterプラン:$7/月〜(常時稼働)
    探した中ではほぼ最安値、仕方ないかなと、、、

PostgreSQL(Render)

無料ユーザーには何回か体験してもらいつつ、回数到達後は半永続的に利用制限する必要があるため、全ユーザーの利用回数を不揮発管理。

💰 Render DB料金

  • Freeプラン:~256MB(読み書き制限あり)
    今回のユースケースなら無料、助かる。

今回作ってみての気づき、ポイント

  • Vibe Codingは個人開発の革命
    iphoneアプリやバックエンド系はほぼ知識無でした。それで正味10日かからずリリースまでいけるのは数年前では考えられない状況ですよね。
  • とにかくGoogleMap系のAPIは高い
  • 逆にLLM APIは軽度の利用ならほぼ問題にならない
  • 知見がなくても、バックエンドサーバーを立てるハードルは低い

さいごに

色々作るにあたって素人ながらの気づきがあったので、今後も残していこうと思います。

すぐいこ:suguikoapp.jp.info@gmail.com
個人:nnnwa4create@gmail.com

Discussion