はじめに
ワーカープラグインは、組織ごとに1つのサーバー側プログラムをmetatellのプラットフォーム上で動かす仕組みです。 プログラムはCloudflare Workersとして実行されます。 組織管理者が管理画面からZIPファイルを登録すると動作します。
ブラウザで動くプラグインだけでは、データの保存、秘匿情報の保持、外部システムとの連携ができません。 ワーカープラグインを使うと、これらをサーバー側で実装できます。
📦 GitHubリポジトリ(テンプレート・サンプル): https://github.com/urth-inc/metatell-plugins/tree/develop/worker-plugins
できること
- APIを提供し、プラグインや外部のシステムから呼び出す
- Durable Objectsにデータを、R2にファイルを保存する
- WebSocketで参加者へ更新をリアルタイムに配信する
- 外部APIのキーをシークレットとして保持し、外部サービスと連携する
- HTMLやJavaScriptなどの静的ファイルを配信し、独自の画面を提供する
プラグインとの違い
| 項目 | プラグイン | ワーカープラグイン |
|---|---|---|
| 実行場所 | 参加者のブラウザ | Cloudflare Workers(サーバー側) |
| 成果物 | Module Federationのリモート | バンドル済みのWorker(worker.js)とwrangler.jsonc |
| 登録先 | 管理画面の「プラグイン一覧」 | 管理画面の「ワーカープラグイン」 |
| 登録の単位 | プラグインごとに登録し、ルームに適用する | 1組織につき1つ |
両者はビルドの方法と登録の手順が異なります。 UIが必要な機能は、プラグインからワーカープラグインのAPIを呼び出す形で実装します。
仕組み
- ワーカープラグインは独自のURLを持たず、ディスパッチャ経由でのみ呼び出されます。
- 公開URLは
https://{組織ID}.metatell.app/ext/{組織ID}/です。組織のカスタムドメインでも配信されます。 - ディスパッチャはパスの先頭の
/ext/{組織ID}を除いてから転送します。コードは自身がルートを持つ前提で書けます。 - 1組織につき登録できるワーカープラグインは1つです。複数の機能が必要な場合は、1つのWorkerの中にまとめて実装します。
- 開発者がCloudflareのアカウントを用意する必要はありません。
wrangler deployは使わず、ビルドしたZIPを管理画面から登録します。
前提条件
- Node.js 24
- 組織管理者の権限(ワーカープラグインの登録に必要)
テンプレート
| テンプレート名 | 主な内容 | 使う場面 |
|---|---|---|
minimal | ヘルスチェック用のルート、TypeScriptの設定、ZIPを作るビルド | 最小の構成から始めたい |
simple-api-with-durable-objects | Durable Objectsを使うCRUD APIとカウンター、スキーマの移行 | データを保存したい |
simple-api-with-token-verification | JWKSによるアクセストークンの検証 | 呼び出し元の利用者を確認したい |
simple-api-with-react-frontend | ReactとViteで作った画面の配信と、画面から呼ぶAPI | 独自の画面をReactで提供したい |
simple-api-with-vue-frontend | Vueで作った画面の配信と、画面から呼ぶAPI | 独自の画面をVueで提供したい |
このガイドの構成
- クイックスタート — テンプレートの複製から登録、動作確認まで
- ZIPと設定 — ZIPの構成、
wrangler.jsonc、プラットフォームが注入する値、シークレット、静的ファイル - 認証と呼び出し — アクセストークンの検証、プラグインからの呼び出し、WebSocket
- Durable Objects — データの保存、スキーマの移行、更新時のデータの扱い
- R2 — ファイルの保存、バケットの作成
- シークレット — 外部APIのキーなどの秘匿情報の扱い
- ログ — ログの出力と確認
- 制限事項 — 実行時間の上限、レート制限、応答の扱い、ディスパッチャのエラー
管理画面での操作は、ワーカープラグイン管理を参照してください。