◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/開発ツール
⟐ 開発ツール/2026-04-27上級

Gemini API + Cloudflare Durable Objects でつくるステートフルAIエージェント本番ガイド

Cloudflare Durable Objects と Gemini API で会話履歴を永続化するステートフル AI エージェントを構築します。wrangler.toml のバインディングからルーティング Worker、WebSocket Hibernation、クライアント実装まで本番前提で解説します。

gemini-api287cloudflare4durable-objectswebsocket4agent9

✦ プレミアム記事

「AIに昨日話した内容を覚えていてほしい」という要望は、個人開発のチャットアプリでも繰り返し出てきます。Gemini API には会話状態を覚えてくれる機能はないので、サーバー側で履歴を保持する必要があります。私はこの 1 年でいくつかの構成を試しましたが、Cloudflare Durable Objects と Gemini API を組み合わせた構成が、個人開発者にとって最もコストパフォーマンスが良いという結論に至りました。

ここではその本番運用で得た知見を体系的にまとめます。とりわけ「Workers だけで作ろうとして詰まった」「KV や D1 で会話履歴を持たせようとして同時編集が壊れた」といった、私が実際に踏んだ落とし穴を中心に書いていきます。

なぜ Durable Objects が必要なのか — Workers の状態問題

Cloudflare Workers は素晴らしいエッジ実行環境ですが、ステートレスです。リクエストごとに別のワーカーインスタンスで実行されるため、メモリ上に持った変数は次のリクエストでは消えてしまいます。

会話履歴を持たせるには KV や D1 (SQLite) を使う方法もありますが、ここで問題が起きます。同じ会話セッションに対して 2 つのリクエストがほぼ同時に来た場合、片方が読んで書き戻している間にもう片方も読み書きしてしまい、会話履歴の一部が消える「lost update」が発生するのです。私が以前 KV ベースで実装したチャットでは、ユーザーが連続でメッセージを送ったときに「あれ、さっきの返信が消えた?」というクレームが入って気付きました。

Durable Objects は、特定のキー(私の場合は userId:sessionId)に対して世界に 1 つだけのシングルトンインスタンスを保証してくれます。同じキーへのリクエストはすべてその同じインスタンスにルーティングされ、内部のメモリと SQLite ストレージは順序保証された状態で扱えます。これは、会話エージェントのように「同じセッションには同じ状態」が要求される用途に理想的です。

価格面でも、Workers Paid プラン(月 $5)に Durable Objects が含まれており、リクエスト数とコンピュート時間に応じた従量課金で、個人開発で本番投入する規模なら月数ドルの追加で十分です。

構築するもの — WebSocket 接続のステートフル会話エージェント

この記事で実装するのは次のような系です。

  • ブラウザから WebSocket で接続するチャット UI
  • セッションごとに 1 つの Durable Object が紐付き、会話履歴を SQLite に永続化
  • ユーザー発話を Gemini 2.5 Pro に投げ、応答をストリーミングで WebSocket に流す
  • 履歴が長くなったら古い部分を自動要約して圧縮(コンテキスト爆発の防止)
  • ハイバネーション対応で、無接続時はメモリゼロで待機できる

ファイル構成は最小で次の 3 つだけです。

  • wrangler.toml — バインディング定義
  • src/worker.ts — エントリポイント、Durable Object へルーティング
  • src/agent.ts — Durable Object 本体(会話エージェントの実装)

完成形をひと目で見てから読み進めると、各セクションの位置付けが分かりやすいかと思います。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦Cloudflare Workers だけでは実装できない『会話を覚えているAI』を、Durable Objects と Gemini API の組み合わせで動く形にできる
✦WebSocket Hibernation や Storage トランザクションの落とし穴を避けながら、本番投入できるステートフルエージェントの設計パターンを習得できる
✦個人開発者でも月額数ドル規模のインフラ費用で、24時間動き続ける会話AIサービスを運用できる構成へ移行できる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ 開発ツール2026-08-21
通知文の長さ指示が英語版だけ効かなかった理由と、生成後に幅で詰める実装
日英2言語のプッシュ通知を Gemini に生成させたところ、英語版だけが実機で途切れていました。原因は文字数での長さ指示です。表示幅の実測値と、生成後に詰めるフィッティング実装をまとめました。
⟐ 開発ツール2026-08-10
ヘルプが答えていない質問を、Gemini に問題を作らせて先に見つける
ヘルプやFAQに書いてあるのに問い合わせが止まらないとき、その資料から問いを生成し、資料本文だけで答えられるかを判定する二段構えの点検パイプラインを作ります。呼び出し設計と費用の見積もりまで含めた実装手順です。
⟐ 開発ツール2026-04-18
Gemini API × Tauri 2.0 でクロスプラットフォームAIデスクトップアプリを構築する
Tauri 2.0とGemini APIを組み合わせてmacOS・Windows・Linux対応のデスクトップAIアプリを構築する実践ガイド。Rustバックエンドによる安全なAPIキー管理、ストリーミング配信、ネイティブOS機能との連携を動くコードで解説します。