一番雑な投げ方
Cloudflare Workersで、外部APIからデータ取得・KV永続化・Web公開・差分通知を全部やってくれるサーバーレスAPIを作りたいとき、こんな感じでポンと投げてみて。
GitHub Security AdvisoryとPython依存のCVE情報を毎日自動収集してKVに保存、Basic認証付きWebページで公開、新規があったらDiscord通知するCloudflare WorkersのAPIをTypeScriptで作って。
これだけでWorkersのプロジェクト一式、KVとの連携、cronトリガーのセットアップまで、いい感じに動くコードを出してくれるよ。
もうちょい具体的に投げるパターン
「毎日」とか「Webページ」とか、もうちょっと具体的にしたい場合は、以下みたいに伝えるんだ。
CronトリガーとKVの名前空間を最初から指定する
wrangler.tomlの設定も任せたいなら、こんな感じでリクエストしてみて。
毎日UTC 22:00に実行されるようにcronトリガーを設定して。KVの名前空間は`CVE_STATE`と`REPORT_DATA`でよろしく。
GitHub Security AdvisoryとPython依存のCVE情報を毎日自動収集してKVに保存、Basic認証付きWebページで公開、新規があったらDiscord通知するCloudflare WorkersのAPIをTypeScriptで作って。
必要なシークレットを教えてもらう
外部APIキーや認証情報が必要なことを伝えて、シークレットの設定まで含めて依頼するのもアリ。
GH_TOKEN、DISCORD_WEBHOOK_URL、BASIC_AUTH_USER、BASIC_AUTH_PASSをシークレットとして使う前提でCloudflare WorkersのAPIをTypeScriptで作って。
GitHub Security AdvisoryとPython依存のCVE情報を毎日自動収集してKVに保存、Basic認証付きWebページで公開、新規があったらDiscord通知する機能だよ。
サブリクエスト制限を意識してAPI設計を依頼する
Workersにはサブリクエスト制限 (50回) があるから、複数APIを叩く場合は最初から考慮するように伝えると、効率的な設計を提案してくれるよ。
Cloudflare Workersのサブリクエスト制限 (50回) を考慮して設計して。特にOSV.devへのAPIコールはquerybatchエンドポイントを使うと良いかもしれない。
GitHub Security AdvisoryとPython依存のCVE情報を毎日自動収集してKVに保存、Basic認証付きWebページで公開、新規があったらDiscord通知するCloudflare WorkersのAPIをTypeScriptで作って。
実践例 / 実録
実際にIVYXON編集部では、依存関係のCVE情報を毎日自動で追跡するパイプラインをCloudflare Workersで作って動かしてるんだ。
ざっくり構成はこんな感じだよ。
- cronトリガーで毎日朝7時 (JST) に起動。
- GitHub Security Advisory APIと、Pythonの依存ライブラリから抽出したOSV.dev APIを叩いて、最新のCVE情報を取ってくる。
- 取ってきた情報をKV (
seen_cves) に保存してある過去のデータと比較。 - 新しく見つかったCVEがあったらDiscordに通知。
- 最新のCVE情報を整形して、HTML (
report_html) にレンダリングし、Basic認証付きのWebページとしてKVに保存。 - 誰かがURL (
https://cve.yourdomain.com/とか) にアクセスしたら、KVからHTMLを読み出して表示。Basic認証もかかるようにしてる。 - デバッグや手動スキャン用に
/__runエンドポイントも作ってあって、Basic認証を通ればcronトリガーと同じ処理をすぐに実行できるんだ。
「投げたらこうなった」の実況形式:
「Pythonの依存ライブラリ、全部バラバラにOSV.devに問い合わせたら、Workersのサブリクエスト制限(50回)にすぐ引っかかっちゃって困ったんだよ。」ってClaude Codeに相談したら、OSV.devのquerybatchエンドポイントを使って、複数の問い合わせを1つのリクエストにまとめてくれたんだ。これで50個以上の依存ライブラリがあっても、サブリクエストはたった1回で済むようになった。超助かるよね。
デプロイはnpx --yes wrangler@latest deployで一発。運用中のログ監視はnpx --yes wrangler@latest tailでリアルタイムで見れるし、シークレットの更新もwrangler secret put NAMEでコマンドラインからサクッとできるから、かなり楽に本番運用ができてるよ。
つまずきポイント
Cloudflare Workersで外部APIをたくさん叩くときの一番のハマりどころは、やっぱりサブリクエストの制限 (50回) だね。これを忘れて設計すると、すぐにエラーになっちゃう。
対処法:
- 今回のように、複数の問い合わせをまとめて一回で済ませるバッチAPIエンドポイントがないか、外部APIのドキュメントをよく確認するのが大事。
- もしバッチエンドポイントがない場合は、必要なデータを最小限に絞り込んだり、情報を取得する頻度を調整したりして、工夫する必要があるよ。
- Workersのサービスバインディングで別のWorkersを呼び出す場合もサブリクエストとしてカウントされるから、設計時には注意が必要だね。
この制限をうまく回避できれば、WorkersはめちゃくちゃパワフルなサーバーレスAPIの実行環境になるから、ぜひ使いこなしてみてほしいな。