D
DevHub セットアップ
GitHub と Cloudflare のトークンを登録して
リポジトリ・Pages・Workers を一括管理
⬡ GitHub Personal Access Token
スコープ
repo が必要です。2
「Generate new token (classic)」→
repo スコープにチェック3
ghp_... で始まるトークンをコピー⚠ localStorage に保存。共有PCでは使用しないでください
▲ Cloudflare API Token + Workers Proxy
Cloudflare API はブラウザから直接叩けないため、Workers でプロキシが必要です。
1
2
Dashboard URL
dash.cloudflare.com/{account_id}/... から Account ID を取得3
Workers → Create Worker →
devhub-proxy と名前をつけて Deploy4
「Edit code」でコードを全削除し、下の worker.js の内容をペースト → Deploy
export default { async fetch(req) {
if (req.method==='OPTIONS') return new Response(null,{headers:ch()});
const u=new URL(req.url), p=u.pathname.replace(/^\/cf/,'');
const t=req.headers.get('X-CF-Token');
if (!t) return R({success:false},401);
const ct=req.headers.get('Content-Type')||'';
const h={'Authorization':'Bearer '+t};
if (!ct.includes('multipart')) h['Content-Type']='application/json';
const res=await fetch('https://api.cloudflare.com/client/v4'+p+u.search,{method:req.method,headers:h,body:['GET','HEAD'].includes(req.method)?undefined:req.body,duplex:'half'});
const b=await res.arrayBuffer();
return new Response(b,{status:res.status,headers:{'Content-Type':res.headers.get('Content-Type')||'application/json',...ch()}});
} };
function ch(){return {'Access-Control-Allow-Origin':'*','Access-Control-Allow-Methods':'GET,POST,PUT,PATCH,DELETE,OPTIONS','Access-Control-Allow-Headers':'Content-Type,X-CF-Token'}}
function R(o,s=200){return new Response(JSON.stringify(o),{status:s,headers:{'Content-Type':'application/json',...ch()}})}
if (req.method==='OPTIONS') return new Response(null,{headers:ch()});
const u=new URL(req.url), p=u.pathname.replace(/^\/cf/,'');
const t=req.headers.get('X-CF-Token');
if (!t) return R({success:false},401);
const ct=req.headers.get('Content-Type')||'';
const h={'Authorization':'Bearer '+t};
if (!ct.includes('multipart')) h['Content-Type']='application/json';
const res=await fetch('https://api.cloudflare.com/client/v4'+p+u.search,{method:req.method,headers:h,body:['GET','HEAD'].includes(req.method)?undefined:req.body,duplex:'half'});
const b=await res.arrayBuffer();
return new Response(b,{status:res.status,headers:{'Content-Type':res.headers.get('Content-Type')||'application/json',...ch()}});
} };
function ch(){return {'Access-Control-Allow-Origin':'*','Access-Control-Allow-Methods':'GET,POST,PUT,PATCH,DELETE,OPTIONS','Access-Control-Allow-Headers':'Content-Type,X-CF-Token'}}
function R(o,s=200){return new Response(JSON.stringify(o),{status:s,headers:{'Content-Type':'application/json',...ch()}})}
—
Repositories
—
Pages
—
Workers
—
Open Issues
⬡ Recent Repos
▲ Pages
○ Commit History
リポジトリを選択してください
◎ Issues / PRs
リポジトリを選択してください
↻ Deployment History
プロジェクトを選択してください
⚡ Quick Deploy —
Explorer
リポジトリを選択
—
▲ Pages — Deploy
⚡ Workers — Deploy Script
⬡ GitHub — Commit & Push
Editor でファイルを編集後、コミットしてプッシュします。Pages と連携済みの場合は自動デプロイが走ります。
⬡ GitHub
▲ Cloudflare
Workers にデプロイ後のURL。Cloudflare の CORS 制限を回避するために必要。
Danger Zone
localStorage から全トークンを消去してリロードします