八代のお雛祭りAIコンシェルジュ
八代市で 2/14 〜 3/8 の期間で開催されるお雛祭りの AI コンシェルジュを作った。
なぜ作ったか?
もともと、 http://8246ohina.com の作成を遠い昔に請け負っていた(このサイトもかなり古いので色々とアップデートしたい)。
今年はありがたいことに久しぶりにこのサイトのコンテンツ更新(固定ページの文言更新など、非開発の作業)を依頼していただけたので、年末年始はそちらに取り組んでいた。
その中で、雛祭りの期間中のイベントが盛り沢山過ぎて、来場したいと思っている方々にとって情報の取捨選択が大変なのではないかと感じた。
ちょうど Gemini 3 Pro が Google AI Studio や Antigravity で盛り上がっていたので、AI チャットボット的な感じで整理して回答できたら便利なのでは? と思い作ってみることにした。
どうやって作ったか
Google AI Studio でプロトタイピング
まずは Google AI Studio で適当に指示してプロトタイプを作らせた。 AI Studio は積極的に Gemini の API を使ったアプリを作ろうとしてくる。いつもは「そこ AI 要らないけどな。。。」と思うが今回は都合がいい。雛祭りパンフレットの PDF を Gemini に食わせてテキスト化させ、それをプロンプトにしてコードに埋め込んだ。
GitHub にエクスポートして開発
AI Studio ではフロントエンドから Gemini の API を直叩きするコードしか出せないようだったので、 GitHub にコードをエクスポートして Antigravity で開発を続けた。
Antigravity は勝手にブラウザを起動して動作確認をしてくれるところが、ちょっと気持ち悪くも便利である。
途中で RAG 的な仕組みを使おうと思って Google Cloud の embedding 系のサービスやエージェント構築系のサービスを試してみたが、めちゃくちゃ使いづらかった上に Gemini の API ではなく Google Cloud の API を使うことになりストリーミングレスポンスが使えないようだった。つまり NotebookLM みたいに一度に文字列がバンと表示されてしまう。待ち時間が長くなるし、体験として良くない。そのため RAG は諦めた。
結局案内すべき情報を全てプロンプトとしてハードコードして返答させている。文字数は調べていないが、 Gemini API のログを見た感じ一回の応答のために入力が9000トークン、出力で1000トークンほど使っている。数十回の利用があっても月30円程度である。Gemini 3 Flash を使っている。
ハルシネーションはほとんどなく、ハルシネーションのように見えてもそれらは全てプロンプトの間違いだった。
プロンプト類をフロントエンドに置くのは嫌すぎるので、 Gemini に Express サーバーを用意させて API はそこ経由で叩かせることにした。
本当は React Router で薄いバックエンドを作りたかったが、 AI に設計させると Express を入れたがる。そこまで強いこだわりがあるわけでもないので今回は Express でいくことにした。vite で開発サーバーを立てるときはフロントエンドが立ち上がり、別途 Express サーバーも立ち上げる必要がある。本番用ビルドでは一つの node プロセスで Express サーバーが起動し、SPA フォールバックでフロントエンドをホストする。
Google Cloud Run にデプロイ
デプロイをどうしようか考えていたが、 AI Studio で作った時点で試しにデプロイした Cloud Run 環境が存在していた。それをそのまま使うことにした。ほとんど初めて使ってみたが、思いもよらない便利さに気付いた。まず無料枠がデカい。ちょっとしたアプリなら無料でデプロイできる。コールドスタートも AWS Lambda とかよりも速い気がする。
そして Docker コンテナでデプロイできるのでどんな言語でも使える。これが思ったより良いのでは? という印象だった。世間的には Cloud Run は世に出て結構長いので完全に2、3周は周回遅れなのだが、AWS の ECS のさらにマネージド版という感じで凄くいい。インフラのことをほとんど気にする必要がない。ネットワーク構成に気を使わなくていいなら Cloud Run でサクッと公開したい感じだ。
ちょっと前までは Cloudflare Workers が最強だと思っていたが、Cloud Run も良い。Cloudflare Workers はドメインを軸にした囲い込みと並んで、Workers では Workerd という独自の処理系を使う必要があるのがかなり嫌だったが、 Cloud Run なら Docker コンテナなので Bun とかでもデプロイできる。Docker は時代遅れ的な感じがしつつある世の中だが、Docker のような枯れた技術と Cloud Run のような便利セットアップは、まるで PHP とさくらレンタルサーバーの組み合わせのように便利だ。
今後は WASM 対応も期待したい。
まとめ
AI チャットボット開発やります。ぜひ nakashima@umigame.tech までご相談ください。