AIアプリに専用DBを即時提供!CloudflareのDurable Objects Facetsを解説

AIアプリに専用DBを即時提供!CloudflareのDurable Objects Facetsを解説

AIアプリに専用DBを即時提供!CloudflareのDurable Objects Facetsを解説

Cloudflareは、AIが生成したアプリケーションごとに専用のデータベースを割り当てることができる新機能「Durable Objects Facets(デュラブル・オブジェクト・ファセット)」をベータ公開した。この機能は、同社が提供する「Dynamic Workers」の仕組みを拡張したもので、動的に生成されたコードに対して、永続的なストレージを安全かつ高速に提供することを目的としている。

従来のサーバーレス環境では、実行時にコードをロードして実行する「動的なサンドボックス」において、データの永続化を管理することが技術的な障壁となっていた。しかし、Durable Objects Facetsの登場により、AIエージェントが作成した小さなツールや個人用アプリが、それぞれ独自のSQLiteデータベースを持ち、状態を保持し続けることが可能になる。

なぜこのアップデートがAI開発の現場において重要なのか、その背景にある「アイソレート」の技術や、新しいストレージの概念について詳しく紐解いていこう。AIが単にコードを書くだけでなく、自律的にデータを管理する「記憶を持つエージェント」へと進化する大きな一歩だと言える。

Dynamic Workersとアイソレートが支える高速な実行環境

Dynamic Workersとアイソレートが支える高速な実行環境

Durable Objects Facetsを理解するためには、まずその基盤となる「Dynamic Workers(ダイナミック・ワーカーズ)」について知る必要がある。Dynamic Workersとは、実行時にWorkerのコードをオンデマンドでロードし、安全なサンドボックス内で実行できる機能だ。

コンテナではなくアイソレートが実現する100倍の起動速度

Cloudflare Workersの最大の特徴は、一般的なクラウドサービスが採用している「コンテナ」技術ではなく、「アイソレート(Isolate)」という仕組みを利用している点にある。アイソレートとは、Google Chromeなどのブラウザを支えるV8エンジンが提供する、非常に軽量な実行環境の単位だ。

アイソレートはコンテナと比較して、起動速度が最大100倍速く、メモリ使用量は10分の1程度で済むという。この圧倒的な軽さにより、コードを実行するたびに環境を立ち上げ、終わったら即座に破棄するという「使い捨てのコンピューティング」が可能になった。Dynamic Workersは、このアイソレートの特性を最大限に活かし、AIが生成した数行のコードを即座に実行するセキュアな「eval()」のような役割を果たす。

従来のコンテナ方式
OS全体を仮想化するため重い。起動に数秒かかることがあり、リソース消費も大きい。
Cloudflare アイソレート方式
JavaScriptエンジン内で環境を分離。ミリ秒単位で起動し、数千の環境を同時に動かせる。

このデモは、コンテナとアイソレートの構造的な違いを視覚化したものだ。アイソレートの軽量さが、AIによる動的なコード実行を支えている。

AIエージェントによるコード実行の課題

AIエージェントがユーザーの依頼に応じてコードを書き、それを実行する場合、これまでは「一度きりのタスク」として処理されることが多かった。例えば、データの集計や特定のAPI呼び出しなどは、実行後に結果を返せばコード自体を保持し続ける必要はない。

しかし、ユーザーが「自分専用の家計簿アプリを作って」と依頼した場合、AIはUI(ユーザーインターフェース)だけでなく、入力されたデータを保存し続ける「ストレージ」も提供しなければならない。動的に生成されたコードが、どのようにして安全に、かつ自分専用のデータベースにアクセスするかが大きな課題となっていた。

Durable Objectsがもたらす超低遅延ストレージの仕組み

Durable Objectsがもたらす超低遅延ストレージの仕組み

この課題を解決するための強力な武器が「Durable Objects(デュラブル・オブジェクト)」だ。これはCloudflare Workersの中でも特殊な種類で、世界中で一意の名前を持つインスタンスを作成し、その状態を永続化できる仕組みを指す。

SQLiteをローカルディスクに持つ特殊なWorker

Durable Objectsの最大の特徴は、各インスタンスが自分専用のSQLiteデータベースを持っていることだ。しかも、このデータベースはDurable Objectsが動作している物理マシンの「ローカルディスク」上に配置される。通常のデータベースのようにネットワークを介してリクエストを送る必要がないため、データアクセスにおける遅延は実質的にゼロとなる。

CWV(Core Web Vitals / コアウェブバイタル)などの指標を気にするWeb制作の現場においても、この「ネットワーク遅延がないストレージ」は非常に魅力的だ。ユーザーに近い場所(エッジ)で計算と保存が完結するため、極めてレスポンスの速いアプリケーションを構築できる。

動的なコードとストレージの「相性の悪さ」

しかし、Durable ObjectsをDynamic Workersと組み合わせるには問題があった。通常、Durable Objectsを使用するには、開発者が事前にクラスを定義し、設定ファイル(wrangler.jsonc)で名前空間を宣言し、CloudflareのAPIを通じてプロビジョニング(利用準備)を行う必要がある。AIがその場で生成した未知のコードに対して、この一連の手順を動的に行うことは困難だった。

また、セキュリティ上の懸念もある。AIが生成したコードに、無制限にデータベースを作成する権限を与えてしまうと、リソースの乱用や管理不能なデータの増殖を招く恐れがある。開発者は「AIが書いたコードを実行しつつ、その裏側でストレージやログを適切に管理する」という、監督者のような役割を必要としていた。

新機能「Durable Objects Facets」による解決策

新機能「Durable Objects Facets」による解決策

そこで登場したのが、Durable Objects Facets(ファセット)だ。「Facet」とは「切り口」や「側面」を意味する言葉で、一つのDurable Objectの中に、複数の独立した実行環境とデータベースを持たせる概念を指す。

監視役(Supervisor)と実行役(Facet)の分離

この機能の核となるのは、開発者が書いた「監視役(Supervisor)」のコードの中で、AIが書いた「実行役(Facet)」のコードを動的にロードする仕組みだ。監視役は通常のDurable Objectとして動作し、リクエストを受け取ると、必要に応じてAIのコードをFacetとして呼び出す。

FacetとしてロードされたAIのコードは、自分専用のSQLiteデータベースを与えられる。このデータベースは監視役のデータベースとは論理的に分離されており、AIのコードが監視役の重要なデータ(課金情報や管理ログなど)を読み書きすることはできない。一方で、物理的には同じDurable Objectの一部として管理されるため、パフォーマンスの高さは維持される。

親: 監視役 (AppRunner)
・AIコードのロード管理
・ログ記録、レート制限
・管理用データベースを保持
内包 (Facet)
子: AIアプリ (Facet)
・AIが生成したロジック
・アプリ専用のSQLite DB
・親のDBにはアクセス不可

この図のように、一つのDurable Objectの中に「管理領域」と「AIの自由領域」を共存させるのがFacetの狙いだ。これにより、安全性を確保しながら動的なデータ永続化が可能になる。

親子関係で実現するセキュリティと制御

開発者は、AIが作成できるFacetの数を制限したり、各Facetが使用するストレージ容量を監視したりすることができる。これにより、AIが勝手に大量のデータを保存してコストを増大させるリスクを防げる。また、監視役のコードを通じてネットワークアクセスを制限(globalOutbound: null)することで、AIが生成したコードが外部にデータを送信するのを遮断することも可能だ。

これは、大規模なAIプラットフォームを構築するエンジニアにとって非常に重要な制御機能となる。ユーザーごとに異なるAIアプリを動かしても、インフラ側での統制が容易になるからだ。

実装例から見るAIアプリのプラットフォーム構築

実装例から見るAIアプリのプラットフォーム構築

実際に、どのようにしてこの仕組みを構築するのか、Cloudflareが公開したコード例を基に解説しよう。ここでは、AIが生成した「アクセス回数をカウントするアプリ」を動的にロードする例を考える。

コードの動的ロードとクラスのインスタンス化

まず、監視役となる AppRunner クラスを作成する。このクラスは this.ctx.facets.get() という新しいメソッドを使い、AIのコードをFacetとして取得する。もしFacetがまだ存在しない場合は、コールバック関数内でDynamic Workerをロードし、その中からAIが定義したクラスを取り出す。

// 監視役のコード例
export class AppRunner extends DurableObject {
  async fetch(request) {
    // "app" という名前のFacetを取得。なければ作成する。
    let facet = this.ctx.facets.get("app", async () => {
      // AIのコードをロード
      let worker = this.#loadDynamicWorker();
      // コード内から "App" という名前のクラスを取得
      let appClass = worker.getDurableObjectClass("App");
      return { class: appClass };
    });

    // リクエストをFacet(AIアプリ)に転送
    return await facet.fetch(request);
  }
}

注目すべきは、AIが書いたコード側でも extends DurableObject を使っている点だ。AIは通常のDurable Objectを書くのと同じ感覚でコードを生成でき、特別なFacet用の記法を覚える必要はない。

データベースの分離と永続化の管理

AIアプリ(Facet)が this.ctx.storage.kv.put() などのメソッドを使ってデータを保存すると、それはそのFacet専用のSQLiteデータベースに書き込まれる。監視役の AppRunner も自身のストレージを持っているが、これらは完全に別のファイルとして管理される。

この構造により、例えばあるユーザーのAIアプリがバグでデータを壊したとしても、監視役が持っている管理データや、他のユーザーのアプリには一切影響が及ばない。マルチテナント(複数のユーザーが一つのシステムを共有すること)な環境を構築する上で、この分離は極めて強力な防御壁となる。

今後のAIエージェント開発への影響と展望

今後のAIエージェント開発への影響と展望

Durable Objects Facetsの登場は、AIエージェントのあり方を大きく変える可能性を秘めている。これまでは「指示を聞いて答えるだけ」だったエージェントが、ユーザー固有のデータを蓄積し、それを基にパーソナライズされた体験を提供する「自律的なアプリケーション」へと進化するからだ。

「使い捨て」から「自律的な成長」へ

これまでのAI生成コードは、実行が終われば消えてしまう「刹那的」なものだった。しかし、専用のデータベースを持つことで、AIアプリは前回の実行時の状態を覚えていることができる。例えば、ユーザーの好みを学習し続けるレコメンドエンジンや、過去の対話履歴を構造化して保存する秘書アプリなどが、AI自身の手によって構築・運用されるようになるだろう。

Cloudflareの著者であるCarlo Daniele氏によれば、これは「Vibe-coded(雰囲気で書かれた)」個人用アプリを、セキュアな環境で永続化するための最適な解決策だという。プログラミングの知識がなくても、AIとの対話を通じて自分専用のツールを作り、それをクラウド上で安全に動かし続けることができる時代の到来だ。

開発者が考慮すべきコストとガバナンス

一方で、この技術を活用する開発者には、新たな責任も生じる。動的にデータベースが増えていくため、リソースのライフサイクル管理が不可欠だ。使われなくなったFacetをいつ削除するのか、バックアップはどうするのかといった、データガバナンスの設計が重要になる。

幸い、Durable ObjectsはCloudflareのインフラによって高度に抽象化されており、運用負荷は低い。しかし、AIが生成するコードの品質やデータの正当性をどう保証するかという点は、依然として人間(プラットフォーム開発者)が設計すべき領域として残っている。Durable Objects Facetsは、そのための「管理ツール」を開発者に提供したと言えるだろう。

この記事のポイント

  • Durable Objects Facetsは、AI生成コードごとに専用のSQLiteデータベースを割り当てる新機能である。
  • アイソレート技術により、コンテナよりも圧倒的に高速かつ軽量に動的なサンドボックスを起動できる。
  • 監視役(Supervisor)がAIのコードを制御することで、セキュリティと管理性を両立させている。
  • AIエージェントが「記憶」を持つことが可能になり、パーソナライズされたアプリ開発が加速する。
  • 現在はWorkers Paidプランのユーザー向けにオープンベータとして提供されている。
海田 洋祐

・ 複数業界における17年間のデジタルビジネス開発経験 ・ ウェブサイト開発のためのHTML、PHP、CSS、Java等の実用的知識 ・ 15ヶ国語対応の多言語SaaSの開発経験 ・ 17年間にも及ぶ、Eコマース長期運営経験 ・ 幅広い業界でのSEO最適化の豊富な経験

メッセージを残す