Gadget 46:自作 Gatekeeper

外部サービスを自分で Gatekeeper としてドライバ化して拡張する

自作 Gatekeeper

Cloudflare OS が対応していない外部サービスを、自分の Gatekeeper として生やします。

目的

  • 自作 Gatekeeper の骨格(構造・バインディング・Vendor API)を理解する
  • 既存 packages/gatekeeper-* を参考に、自分用ドライバを作る

前提条件

  • run-local の仕組み(45
  • Node.js / 認証フロー(OAuth / API token)の理解
  • 読むべき公式構造: packages/gatekeeper-github などがテンプレ代わり

手順

1. 既存 Gatekeeper を真似る

ls packages/            # gatekeeper-* を確認
# 一番似ているものをコピーして改名
cp -r packages/gatekeeper-slack packages/gatekeeper-<mysvc>

2. 実装のポイント

  • 認証: OAuth なら「コールバック URL の完全一致」が肝(03
  • API 呼び出し: token の保存は Workers の secret / KV が基本
  • サービスの宣言: wrangler.dev.jsonc の自動生成に乗るため、gatekeeper-* の命名で配置
// 骨格イメージ(fetch で外部 API をプロキシ)
export default {
  async fetch(request, env, ctx) {
    const token = await env.KV_NAMESPACE.get("token");
    const url = new URL(request.url);
    // 外部 API へ中継し、結果を返す
    return fetch(`https://api.example.com${url.pathname}`, {
      headers: { Authorization: `Bearer ${token}` },
    });
  },
};

3. 起動して bind を確認

pnpm run-local        # 自動で service binding に含まれる
# backend 側から GATEKEEPER_MYSVC が利用できることを確認

4. テストと配布

  • リポジトリ内で動くことを確認 → 独自リポジトリ化も可
  • README に「設定値・コールバック URL・スコープ」を書く(33

よくある失敗

症状 原因 対処
bind されない gatekeeper-* 以外の名前 / 配置 命名と配置を合わせる
認証が回らない コールバック URL 不一致 完全一致(https・ポート)
token が漏れる KV ではなくコードに直書き secret / KV 経由に
他者が使えない README 不足 設定手順を同梱

確認

次に読む