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 不足 | 設定手順を同梱 |
確認
次に読む
- 標準の連携 → 03-gatekeeper-integration
- アクセス制御 → 08-access-control-recipes
- 深掘りシリーズ → 35-workers-basics