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




【動かぬ証拠】Goで組む、信頼できるAIエージェント:adk-goの導入と実践

google/adk-goは、Googleが提供するオープンソースのGo言語(Golang)用ツールキットで、複雑なAIエージェントを構築、評価、デプロイするために、「コードファースト」のアプローチを取っているのが特徴です。これは、あなたがより柔軟性とコントロールを持ってAIのロジックを設計し、インフラストラクチャとしてではなく、純粋なソフトウェアコンポーネントとして扱えるようにするためのものです。


最強のAI実行基盤を構築せよ。OpenSandboxで実現する、安全でスケーラブルなコード実行環境

今日は、AI(エージェント)という「見習いシェフ」たちが、キッチン(実行環境)を汚したり火事にしたりせずに、自由自在に腕を振るえる魔法の調理場、「OpenSandbox」という極上の素材を仕入れてきました。エンジニアの視点から、このツールがなぜ「三ツ星級」なのか、そのレシピを丁寧に解説しますね!


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

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


キャンプでコント:LLMオーケストレーションの苦労を解消する strans-agents/sdk-python 入門

皆さん、キャンプに来ています!テントを立てるのも、火を起こすのも、楽しいけれど結構手間がかかりますよね。AIエージェントを作るのも同じなんです。モデルを選んで、プロンプトを書いて、ツールを組み合わせて. ..「あー、またエラーだ. ..」となりがち。


Rustで爆速OCR・AI基盤を構築!次世代ベクトル検索エンジン「RuVector」徹底解説

「RuVector」をエンジニア向けに一言で言うなら、「Rustの爆速性能を活かした、学習機能付きのベクトル検索・グラフ解析エンジン」です。OCR(文字認識)やAIと組み合わせて使うことを想定されており、例えるなら「見たものを即座に理解し、関連性を整理して、超高速で引き出せる記憶装置」のような存在です。


ソフトウェアエンジニア必見!mishushakov/llm-scraper徹底解説

一言で言うとね、この llm-scraper は、「どんなウェブページも、AIの力で自動的に、しかも賢く、整理されたデータに変えてくれる魔法のツール」 なんだ!例えるなら、醤油ラーメン (既存のスクレイピングツール)具材(データ)の場所が明確に決まっていて、レシピ(コード)通りに正確に盛り付ける(抽出する)のが得意。でも、新しい具材(ウェブサイトの構造変更)が出てくると、レシピをイチから見直さないといけない手間があるんだ。


【入門】onyx-dot-app/onyxで始めるAIチャットボット開発

ソフトウェアエンジニアの視点から、onyx-dot-app/onyxがどのように役立つか、導入方法、サンプルコードについて、真面目に、分かりやすく説明するね。onyx-dot-app/onyxは、AIを活用したチャットアプリケーションを構築するためのオープンソースプラットフォームなんだ。これを導入するメリットは、主に次の3つだよ。


PythonでAIを分業させる技術:microsoft/agent-frameworkで効率化

このフレームワークは、まるでドラマの名探偵チームを結成して、複雑な事件(タスク)を連携して解決していくようなイメージで捉えると分かりやすいですよ!‍♂このフレームワークは、AIエージェントを構築、連携、デプロイするための強力なツールキットです。Pythonと


【徹底解剖】秘密のクローゼットをエンジニアの手で。OpenClawの導入からサンプルコードまで

例えが「ランジェリーショップで悩む彼女」…? OK、ちょっと独特だけど、その「どれも素敵で選べない!」「私にぴったりなのはどれ?」っていうワクワクと不安が入り混じった感じ、エンジニアが新しいツールを触る時の高揚感に近いかもしれないね。「これ、私の生活(開発環境)に馴染むかな…?」って鏡の前で合わせるような気持ちで読んでみて!