台湾チキン
高雄をドライブ。僕の運転免許は、チキンと引き換えにもらったものじゃない。
ダウンロードApp Store近日公開今すぐ入手Google Play近日公開
ゲームの特徴
本物の街並みを走り、交通ルールを守って安全に目的地へ。
技術紹介
Flutter のアプリ本体、Godot のゲーム、Django のバックエンド。スマホとWeb版は同じゲームコードで動きます。
図 1システム構成図ドラッグで回転 · チップをタップで説明 · ← → でデータの流れを切替アカウント、名所ガイド · アプリ ⇄ Django
- ブラウザ
- 静的ファイル配信(CDN)
- Django バックエンド
- アカウントと削除
- 名所の多言語ガイド
- ステージ設定の公開
- プレイ記録の分析
- AdMob設定
- Flutter アプリ(iOS/Android)
- Flutter
- 設定
- ログイン
- ステージ一覧
- 記録
- 3言語UI
- ローカルサーバー
- 設定チャネル
- Godot 4 ゲーム(WebView 内)
設定、ログイン、ステージ一覧、記録は Flutter で作られています。ゲーム開始時に言語・画質・操作設定などを設定チャネルでゲームに渡し、終了時に結果を受け取ります。街はステージデータから自動生成され、車の流れや歩行者、違反車は交通 AI が動かします。反則のルールはデータファイルで定義し、スマホとWeb版で同じゲームコードを使っています。アカウントと削除、名所の多言語ガイドを担当し、ステージ設定ファイルに署名して公開します。アプリは署名を確認してから使い、失敗した場合は前回成功した版に戻します。Web 版は蓮池潭・龍虎塔の 1 ステージのみで、インストールなしで試遊できます。ステージパックのファイル名には内容のハッシュが入り、ダウンロード後に SHA-256 で検証、2 回目以降はブラウザのキャッシュを使います。全ステージはアプリで遊べます。システム構成要素「%s」の一部。
大きなチップがそれぞれのシステム、上の小さなブロックがその構成要素です。配線がシステム同士をつなぎ、光っている配線が現在のデータの流れです。下のボタンか矢印キーで切り替え、ダブルクリックで視点を戻します。
Flutter アプリ本体
設定、ログイン、ステージ一覧、記録は Flutter で作られています。ゲーム開始時に言語・画質・操作設定などを設定チャネルでゲームに渡し、終了時に結果を受け取ります。
Godot 4 ゲーム
街はステージデータから自動生成され、車の流れや歩行者、違反車は交通 AI が動かします。反則のルールはデータファイルで定義し、スマホとWeb版で同じゲームコードを使っています。
Django バックエンド
アカウントと削除、名所の多言語ガイドを担当し、ステージ設定ファイルに署名して公開します。アプリは署名を確認してから使い、失敗した場合は前回成功した版に戻します。
Web 版:1 ステージの体験版
Web 版は蓮池潭・龍虎塔の 1 ステージのみで、インストールなしで試遊できます。ステージパックのファイル名には内容のハッシュが入り、ダウンロード後に SHA-256 で検証、2 回目以降はブラウザのキャッシュを使います。全ステージはアプリで遊べます。
品質
Godot と Flutter の両方に自動テストがあり、ステージには回帰チェックとスクリーンショット比較もあります。修正はテストに合格してからマージします。
Flutter によるクロスプラットフォーム開発の利点
- 1 つの Dart コードから iOS と Android のアプリを作れるため、設定、ログイン、ステージ一覧、記録、3 言語の画面を一度書くだけで済みます。
- 両プラットフォームで見た目と動作がそろい、1 つの修正が両方に反映され、テストも 1 セットで済みます。
- AdMob、Firebase、共有、ログインなどのネイティブ機能には公式または実績あるパッケージがあり、Swift と Kotlin を別々に書く必要がありません。
- ホットリロードで画面の変更を数秒で確認できます。Flutter は過去の複数のプロジェクトで実績があり、性能にも開発効率にも満足しています。
ゲームに three.js や Flutter ではなく Godot を使う理由
- three.js は 3D 描画だけを担当し、物理、衝突、サウンド管理、シーンエディタがありません。車の操作、交通、衝突をすべて一から作る必要があります。
- Flutter は UI フレームワークで、3D シーン、物理、衝突を内蔵していません。アプリの外枠には向いていますが、3D の運転ゲームには向きません。
- Godot は完全なオープンソースのゲームエンジン(MIT ライセンス、ライセンス料やロイヤリティなし)で、3D 描画、物理、サウンド、アニメーション、入力を内蔵しています。
- シーンとスクリプトはテキストファイルなので、Claude Code が直接読み書きでき、git で差分も確認できます。画面なしモードで自動テストも実行できます。
- 同じゲームを WebAssembly に書き出し、アプリは WebView 内で、Web 版はブラウザで直接動かします。代わりに WebView では性能に余裕がなく、ローエンドのスマホでは画質を下げる必要があります。
デプロイの判断:サイトとゲーム素材を Cloudflare Workers に置く
初版の公式サイトと龍虎塔の Web 版はすべて静的ファイルで、Cloudflare Workers の静的アセットとして配信し、Worker のコードは実行しません。静的アセットへのリクエストは無料・無制限で、転送量の追加料金もありません。アプリと API は引き続き findmo のバックエンドを使うため、Web のアクセスがバックエンドに負荷をかけることはありません。
初版の素材サイズ(2026-10-15 実測、転送量は圧縮後)| 素材 | 元のサイズ | 実際の転送量 | 読み込むタイミング |
|---|
| サイトの HTML・CSS・JS・アイコン | 111 KB | 43 KB | ページを開いたとき |
|---|
| トップ動画+ポスター(PC 16:9/スマホ 4:5) | 2.0 MB/1.6 MB | 2.0 MB/1.6 MB | ページを開いたとき |
|---|
| 特集画像 6 枚+ゲーム画面 7 枚 | 0.9 MB | 0.9 MB | スクロールしたとき |
|---|
| 3D 構成図(three.js+チップ図) | 619 KB | 159 KB | スクロールしたとき |
|---|
| 動く背景(shaders.com) | 2.5 MB | 696 KB | WebGPU 対応の PC のみ |
|---|
| Web 版エンジン index.wasm | 17.1 MB | 4.9 MB | 遊び始めたとき |
|---|
| Web 版共通リソース index.pck | 10.1 MB | 6.7 MB | 遊び始めたとき |
|---|
| 龍虎塔ステージパック | 3.5 MB | 2.2 MB | 遊び始めたとき |
|---|
| Web 版のその他(JS・起動画像・ステージデータ) | 1.0 MB | 0.7 MB | 遊び始めたとき |
|---|
| 公式サイト 1 回の閲覧 | 最後までスクロール:PC 約 3.8 MB、スマホ約 2.7 MB、約 25 リクエスト |
|---|
| Web 版の初回プレイ | 約 14.4 MB、約 13 リクエスト。2 回目以降はブラウザのキャッシュを使い、更新確認だけ |
|---|
Workers 無料プランの仕様と本サイトの使用量| 項目 | 無料プランの上限 | 本サイト(Workers 上) |
|---|
| 静的アセットへのリクエスト | 無料・無制限 | すべて静的アセット |
|---|
| 転送量 | 追加料金なし | — |
|---|
| Worker コードを実行するリクエスト | 1 日 10 万回(UTC 0 時にリセット、超えると 1027 エラー) | 0(Worker コードなし) |
|---|
| 1 ファイルのサイズ | 25 MiB | 最大 17.1 MB(index.wasm) |
|---|
| 1 バージョンのファイル数 | 20,000 | 57 |
|---|
| Worker の CPU 時間 | 1 リクエスト 10 ms | 該当なし |
|---|
シナリオ分析(1 回の閲覧約 3.3 MB、PC とスマホが半々)| 閲覧数 | リクエスト数 | 転送量(20% が Web 版で遊ぶ) | 転送量(全員が遊ぶ) | 費用 | 結論 |
|---|
| 1 万 | 約 28 万 | 約 59 GB | 約 172 GB | 0 | 無料プランで十分 |
|---|
| 10 万 | 約 276 万 | 約 593 GB | 約 1.7 TB | 0 | 無料プランで対応可能。アクセスが増える前に有料プラン(月 5 ドル)へ |
|---|
| 100 万 | 約 2,760 万 | 約 5.9 TB | 約 17.2 TB | 0~月 5 ドル | リクエストも転送量も無料。有料プランへの移行を推奨 |
|---|
費用比較:20% が Web 版で遊ぶ場合(月額、米ドル)| 方式 | 月 1 万閲覧 | 月 10 万 | 月 100 万 |
|---|
| GCP VM(Premium ネットワーク、テストサイトで使用中) | 約 7 ドル | 約 71 ドル | 約 663 ドル |
|---|
| GCP VM(Standard ネットワーク) | 0 | 約 43 ドル | 約 631 ドル |
|---|
| GCS 公開バケット(直接ダウンロード) | 1 ドル未満 | 約 60 ドル | 約 662 ドル |
|---|
| GCS+Cloud CDN | 約 24 ドル | 約 72 ドル | 約 552 ドル |
|---|
| Cloudflare Workers(本サイト) 最適 | 0 | 0 | 0~月 5 ドル |
|---|
費用比較:全員が Web 版で遊ぶ場合(月額、米ドル)| 方式 | 月 1 万閲覧 | 月 10 万 | 月 100 万 |
|---|
| GCP VM(Premium ネットワーク、テストサイトで使用中) | 約 21 ドル | 約 199 ドル | 約 1,727 ドル |
|---|
| GCP VM(Standard ネットワーク) | 0 | 約 167 ドル | 約 1,625 ドル |
|---|
| GCS 公開バケット(直接ダウンロード) | 約 9 ドル | 約 189 ドル | 約 1,696 ドル |
|---|
| GCS+Cloud CDN | 約 34 ドル | 約 173 ドル | 約 1,357 ドル |
|---|
| Cloudflare Workers(本サイト) 最適 | 0 | 0 | 0~月 5 ドル |
|---|
| GCP VM | Premium の台湾からアジア太平洋への転送:1 TiB まで 1 GiB あたり 0.12 ドル、1~10 TiB は 0.11、10 TiB 超は 0.085。Standard:毎月最初の 200 GiB は無料、その後 10 TiB まで 0.11、150 TiB まで 0.075、それ以上は 0.07。VM 本体の費用は含みません。 |
|---|
| GCS | 台湾(asia-east1)の Standard ストレージは 1 GiB あたり月 0.02 ドル(本サイトは 58 MB で約 0.001 ドル)。読み取りは毎月 5 万回まで無料、その後 1 回 0.0000004 ドル。アジア太平洋へのダウンロードは毎月 100 GiB まで無料、その後 1 TiB まで 0.12、10 TiB まで 0.11、それ以上は 0.08。 |
|---|
| GCS+CDN | Cloud CDN のアジア向け転送:10 TiB まで 1 GiB あたり 0.09 ドル、150 TiB まで 0.06、それ以上は 0.05。外部ロードバランサが必要で、転送ルールは 1 時間 0.025 ドル(月約 18 ドル)。キャッシュ参照料とキャッシュフィル料は含みません。 |
|---|
| 出典と範囲 | 単価は 2026-10-15 に GCP Cloud Billing カタログで確認。テストサイト https://app.findmoapp.com/driver/ はバックエンド API と同じ e2-medium の VM を共用しているため、アクセスの集中は API の速度にも影響します。 |
|---|
前提:1 回の閲覧はトップページを開いて最後までスクロールすること。遊ぶ人は別途ゲームをダウンロードします。リスク:Cloudflare のサービス規約では、CDN で動画や大きなファイルを大量に配信する場合は有料サービス(開発者プラットフォームを含む)を使う必要があり、Workers 無料プランが該当するかは明記されていません。そのため、アクセスが増える前に Workers 有料プランへ移行します。有料プランでも静的アセットへのリクエストは無料・無制限です。index.pck とステージパックは Cloudflare で圧縮配信するようにし、Web 版の初回ダウンロードは約 19.7 MB から約 14.4 MB に減りました。
全ステージをアプリに同梱する理由
- Web 版はインストール不要の体験版として龍虎塔の 1 ステージのみ。高雄のほかの名所ステージの素材はすべてアプリに同梱しています。
- 転送料金がかからない:アプリは App Store/Google Play からダウンロードされ、転送はストアが負担します。プレイ中にサーバーからステージ素材をダウンロードすることもありません。
- 待たずにステージを開始:素材はすでにスマホにあるため、オフラインでも遊べ、読み込み画面で止まりません。
- バックエンドは小さなファイルだけ:アプリが取得するのは署名付き設定ファイルと名所ガイドのみ。ステージの内容はアプリの更新とともに、ストア審査を経て配信されます。
運営費:AdMob 広告
- サーバー、Cloudflare 有料プラン、ストアの年会費などの運営費は、アプリの Google AdMob 広告でまかないます。
- 広告枠は 3 つ:アプリ起動時の広告、名所一覧の下部のバナー、数ステージ遊んで一覧に戻ったときのインタースティシャル広告。
- 運転中の画面には広告を出しません。インタースティシャル広告には 1 日の上限と最短間隔があり、管理画面からいつでも調整・停止できます。
- Web 版には広告がなく、まず試遊してもらい、アプリのダウンロードへ案内します。
開発ストーリー
プロジェクト作成から 0.1.0 まで、コードとテストの大部分は Claude Code が書き、人は要件の提示、判断、実機での確認を担当しました。以下の数字はビルド時に git の履歴から自動で集計しています。
開発日数
コミット数
課題(完了/全体)
自動テストファイル
使用したツールとモデル
マイルストーン
- プロジェクト作成:企画、Godot 試作版、Flutter アプリ本体Godot は本プロジェクトが初めての採用です。Flutter は過去の複数のプロジェクトで実績があり、実行性能にも開発効率にも満足しています。
- 3言語対応(繁体字中国語、英語、日本語)
- 最初の高雄の街ステージ
- Web 版を独立ビルド:龍虎塔 1 ステージの体験版
- 0.1.0 審査提出
作業の流れ
- 人欲しい機能や気づいた問題を一文で伝える
- AI現在の動作、期待する動作、受け入れ条件を書いた課題に分ける
- AI課題ごとにブランチを作って実装し、テストを追加
- AI静的チェックと自動テストを実行し、合格したらマージ
- AIテスト環境にデプロイして実際に動作を確認
- 人判断する:AI が決めるべき事項を3つの選択肢とおすすめにまとめ、人が選ぶ
- 人人が実機で試遊し、スクリーンショットに問題を書き込んで AI に修正を依頼する
- AIストア申請と本番デプロイは AI が Ego Lite ブラウザで行い、アカウントとパスワードは人が入力する
全自動ではありません。製品の方向性、選択肢の判断、本番公開は人が決めます。
人と Claude Code の役割分担
- ゲームのシナリオとルール:大まかな方向は人が決め、細かいルールは Claude Code が決め、人が試遊して課題としてフィードバックします。
- 音が心地よいか、操作がなめらかか:人がスマホで実際に遊んでテストします。
- 英語と日本語:まだネイティブのチェックは受けておらず、当面は Claude Code の翻訳を採用しています。
- 実機での性能、発熱、タッチ操作の感触:シミュレーターでは測れないため、人が実機でテストします。
- ストアのアカウント、管理画面、本番サーバー:Claude Code が Ego Lite ブラウザのスキルで操作し、アカウントとパスワードは人が入力します。
- 開発中の納品は Claude Code が行います:ブランチ作成、テスト、マージ、デプロイ。納品ルールは CLAUDE.md に定めています。
ブラウザで遊ぶ
Web版は蓮池潭・龍虎塔の 1 ステージのみ。インストール不要で、パソコンやスマホのブラウザで開けます。
ブラウザで龍虎塔を遊ぶ
初回の読み込みは約 15 MB(圧縮後)。高雄の全ステージはアプリでどうぞ。
アプリを入手
App Store 版と Google Play 版を準備中です。公開後はここからダウンロードできます。
ダウンロードApp Store近日公開今すぐ入手Google Play近日公開