Durable Objectsを使いこなす!vibesdkに学ぶグローバルな状態管理とリアルタイムブロードキャスト


Durable Objectsを使いこなす!vibesdkに学ぶグローバルな状態管理とリアルタイムブロードキャスト

cloudflare/vibesdk

2025-12-09

ルーク
「父上、あれは何ですか?vibesdk?何か、フォースと関係があるんですか?」

ベイダー「フフフ... ルークよ、それはフォースよりも強力な、コーディングの力を増幅させるツールだ。フォースと違い、我々ソフトウェアエンジニアに具体的な利益(メリット)をもたらす。」

集中力の向上(Vibe-Coding)

開発者は、集中を深めるために環境音やBGMを流しながら作業することがある。このSDKを使えば、その「Vibe(雰囲気)」をコードと共にライブで共有できるプラットフォームを簡単に構築できる。

自分の集中状態や作業環境を公開することで、モチベーション維持にも繋がる。

フルスタック開発の簡素化

Cloudflare Workers(サーバーレスなバックエンド)とDurable Objects(グローバルな状態管理)という、Cloudflareの強力なスタックに完全に依存して作られている。

これにより、複雑なインフラのセットアップやリアルタイム同期の処理を気にすることなく、「Vibe-Coding」というユニークな機能に集中して開発を進めることができる。スケーラビリティもCloudflareに任せられる。

特にリアルタイムでのVibe(BGMやステータス)の同期が、Durable Objectsによって非常にシンプルに実現できるのが魅力だ。

ルーク
「なるほど... 集中するための音を、リアルタイムでみんなと共有するライブ配信プラットフォームの骨格を、Cloudflareの力で簡単に作れるということですね!フォースの代わりに、サーバーレスの力を使うわけだ。」

ベイダー「その通り、ルーク。次に、その強力な武器を手に入れる(導入する)方法を教えよう。」

ベイダー
「このSDKの導入は、反乱軍を討つよりも簡単だ。必要なのはCloudflareアカウントと、ターミナルの操作スキルだけだ。」

まず、Cloudflare WorkersのCLIツールであるwranglerがインストールされていることを確認する。

# プロジェクトをクローン
$ git clone https://github.com/cloudflare/vibesdk
$ cd vibesdk

# 依存関係をインストール
$ npm install

wrangler.toml ファイルで、Durable Objectのバインディング(接続設定)を行う必要がある。

wrangler.toml内で、例えば以下のような設定を行う。

# Durable Objectsの設定
[[durable_objects]]
binding = "VIBE_HUB" # スクリプトからアクセスするための名前
class_name = "VibeHub" # Durable Objectクラスの名前
script_name = "vibesdk-worker" # ワーカースクリプトの名前

ルーク
「Durable Objects... それが、ユーザーのVibe(状態)を一箇所で管理し、全員にリアルタイムで同期させるコアなんですね。まるで、銀河の支配権を握る中央のデス・スターだ!」

ベイダー「まさに。次に、そのデス・スターを起動(デプロイ)させるのだ。」

設定が完了したら、wrangler コマンドを使ってCloudflareにデプロイする。

# Cloudflareへデプロイ
$ wrangler deploy

ベイダー
「これで、君のVibe-Codingプラットフォームが、世界中のユーザーにエッジでサービス提供されるようになる。この速さ... 反乱軍に勝ち目はない。」

ルーク「父上、デプロイは分かりましたが、具体的にコードでどうやってVibe(雰囲気)を操作するのですか?」

ベイダー
「見よ、これがVibeを制御するコアの力だ。」

このSDKの核となるのが、Durable Object であるVibeHubだ。

// vibesdk/src/vibe-hub.ts (簡略化)
import { Vibe, VibeWorker } from 'vibesdk/server';
import { VibeSDKEnv } from './worker';

// VibeHub は Durable Object としてユーザーの状態を保持
export class VibeHub extends VibeWorker<VibeSDKEnv> {
  // ユーザーの現在のVibe(BGMのURL、ステータスなど)
  currentVibe: Vibe = {
    // 例: BGMのURL、状態、テキストなど
    audioUrl: '',
    statusText: 'Coding...',
    lastUpdated: Date.now(),
  };

  constructor(state: DurableObjectState, env: VibeSDKEnv) {
    super(state, env);
  }

  // クライアントからの新しいVibeリクエストを受け取る
  // 'update' メソッドはクライアントからWebSocketで呼び出される
  async update(newVibe: Partial<Vibe>): Promise<void> {
    // 状態を更新
    this.currentVibe = { ...this.currentVibe, ...newVibe, lastUpdated: Date.now() };

    // この Durable Object に接続している全てのクライアント (WebSocket) に新しいVibeをブロードキャストする
    // これがリアルタイム同期を実現する肝!
    this.broadcast(this.currentVibe);
  }
}

状態管理
VibeHubクラスが一意なユーザー(またはセッション)の状態(currentVibe)を永続的に保持します。

リアルタイム同期
this.broadcast(this.currentVibe)によって、そのDurable Objectに接続している全てのWebSocketクライアントに対し、最新の状態が瞬時に送られます。これにより、「AさんがBGMを変えたら、Cさんの画面にも即座に反映される」というリアルタイム性の高い共有機能が、ごく少ないコードで実現します。

ルーク「素晴らしい!Durable Objectが、状態を保持し、WebSocketを使ってブロードキャストすることで、銀河の隅々まで情報を届けられる。これがvibesdkの正体... Vibe-Codingプラットフォームの設計図なんですね!」

ベイダー
「そう、ルーク。君もこの力を使い、我々のコーディング帝国を築くのだ。フォースとサーバーレスと共に...」

このSDKは、Cloudflareの強力なエッジコンピューティング能力とDurable Objectsのグローバルな状態管理機能を、リアルタイムな「共有環境プラットフォーム」の構築に応用した、非常にモダンで実践的な例となっています。

このコント形式の解説で、cloudflare/vibesdk の概要と、それがソフトウェアエンジニアにもたらすメリット、そして基本的な仕組みがお分かりいただけたでしょうか?


cloudflare/vibesdk




ソフトウェアエンジニアが知っておくべき「HumanLayer」の安全設計

「HumanLayer」と聞くと、なんだかSF映画に出てくる怪しげなテクノロジーのように聞こえるかもしれませんね。まるで、AIが未来を占ってくれるけど、本当に信じていいの?と不安になるような…(笑)。でも、心配ご無用!これは決して怪しい占いではありません。むしろ、AIがより安全に、そして信頼できる形で「現実世界」と関わるための、とても重要な「安全装置」なんです。


Canvaの代わりになる?ローカルで動く多機能AIアシスタント「jaaz」

ねぇ、みんな、CanvaとかAdobe Fireflyとか、画像や動画をAIで作るツールって使ったことある?とっても便利なんだけど、作ったデータが全部インターネットの向こう側に行っちゃって、ちょっとプライバシーが心配…って思ったことはないかな?


脱・ブラウザChatGPT!fabricを使い倒してAIをコマンドラインから操るエンジニア向け究極インフラ

「『人間をアップグレードする』? そんな厨二病心をくすぐるパワーワード、エンジニアなら黙っていられないはず!さあ、このコードの海にダイブしていきましょう!」「解説しましょう!これは単なるツール集じゃない。『自分専用の AI 脳』を構築するための設計図(インフラ)なんです!」


脱OpenAI依存!GGUF/Transformersを動かすLocalAIによる「ドロップイン互換」AI環境構築術

LocalAIは、その名の通り、ローカル環境でAIモデルを実行するためのオープンソースプラットフォームです。これを、銀河帝国と反乱同盟軍の戦いに例えるなら. ..LocalAIの最大のミッションは、「OpenAIやClaudeなどのAPIと互換性のあるインターフェース」を提供しつつ、その裏側で、GGUF、Transformers、Diffusersといった多様なAIモデルを、あなたのローカル環境で実行することです。


もう迷わない!FastAPIエンドポイントをMCPツール化する手順

このライブラリは、皆さんが普段開発しているFastAPIのエンドポイントを、大規模言語モデル(LLM)が利用できる「ツール」として簡単に公開するためのものです。世の中にはさまざまなライブラリがありますが、このライブラリは、特に以下の点で皆さんの開発に役立ちます。


【エンジニア向け】デスクトップAIアシスタント「DearVa/Everywhere」の価値とサンプルコード

さて、今回ご紹介する「DearVa/Everywhere」ですが、これはソフトウェアエンジニアの皆様にとって、まさに「デスクの上に置ける、気が利くAIアシスタント」になり得る、非常に興味深いツールです。まず、このツールの本質をご説明します。


LLM開発を劇的に効率化!Unsloth AI がもたらす GPU メモリ70%削減の衝撃

unslothai/unslothは、大規模言語モデル(LLM)のファインチューニングと強化学習を超高速で行うためのライブラリです。「ファインチューニングって、GPUメモリを大量に消費して、時間もかかるし、もううんざりだ. ..」そう思っていませんか?私も同じです。しかし、unslothを使えば、その悩みが解消されます。


ソフトウェアエンジニア必見!CrewAIでAIを協調させる方法

今回は、ソフトウェアエンジニアのみんなに超ホットなライブラリを紹介するぜ。その名も. .. CrewAI!CrewAIは、AIエージェントたちをDJのように華麗にミックスして、ひとつのクルーとして協調させるためのフレームワークなんだ。ただのAIじゃなくて、それぞれの得意分野を持ったプロフェッショナルたちを束ねて、まるでチーム開発みたいに複雑なタスクをこなさせることができるんだぜ。


ソフトウェアエンジニア必見!12-factor-agentsでLLMアプリの悪夢を打ち砕く方法

プロダクション環境で顧客に安心して使ってもらえるLLM(大規模言語モデル)搭載ソフトウェアを開発する…それは、まるで霧に包まれた夜の森を進むようなもの。一歩間違えれば、魑魅魍魎(ちみもうりょう)が跋扈するデバッグの沼に引きずり込まれ、悪夢のようなパフォーマンス問題に苛まれるだろう。しかし、恐れることはない。我々ソフトウェアエンジニアには、この暗闇を照らす灯台がある。それが「12-factor-agents」の原則だ!


AIの幻覚を防げ!git-mcpで実現する信頼性の高いコード生成

しかしながら、idosal/git-mcp について、ソフトウェアエンジニアの視点から、その有用性、導入方法、サンプルコードを分かりやすく、丁寧にご説明することは可能です。idosal/git-mcp は、GitHub プロジェクト向けのオープンソースなリモートサーバーです。その目的は、AIによるコード生成における「幻覚(Hallucination)」、つまり事実に基づかない誤ったコードの生成を防ぐことです。