notion workerでブログを更新しようとした話
現在、ブログ(astro-notion-blog)のデプロイは Cloudflare Worker で Webhook を中継する構成になっている。これを Notion Workers に移行して、Notion のエコシステム内で完結させたかったってのが今回の動機。結論から言うと、automation 機能がプライベートアルファで使えず、デプロイまで至らなかった。
やろうとしたこと
イメージとしてはこんな感じ。Notion DB を更新したら Worker が走って、Cloudflare の Builds API を叩いてブログをビルド・デプロイする。
flowchart LR
A["Notion DB 更新"] --> B["DB Automation トリガー"]
B --> C["Notion Worker (TypeScript)"]
C --> D["astro-notion-blog デプロイ"] Notion の中だけで完結するのが理想だった。
やってみた流れ
ntn workers new でテンプレートプロジェクトを作って、設計書に従って worker.automation() で Cloudflare の API を叩くコードを書いた。
多分中身のテンプレート自体はこれと同様だと思う。
worker.automation("trigger-astro-deploy", {
title: "Trigger Astro Deploy",
description: "Triggers astro-notion-blog build via Cloudflare Workers Builds API",
execute: async () => {
const url = `https://api.cloudflare.com/client/v4/accounts/${process.env.CF_ACCOUNT_ID}/builds/triggers/${process.env.CF_TRIGGER_UUID}/builds`;
const response = await fetch(url, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CF_API_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ branch: "main" }),
});
if (!response.ok) {
const errorBody = await response.text();
throw new Error(`Cloudflare API error: ${response.status} - ${errorBody}`);
}
},
}); Worker ID を紐付けて再チャレンジしたところ、以下のエラーが出た。
Automation capabilities are not enabled for user:
Automation capabilities are in a private alpha and are not enabled for user ワークスペース設定で「Notion ワーカーを有効にする(初期アルファ版)」は ON にしたが、Workers の中でも automation はさらに別のプライベートアルファ制限がかかっていたらしい。
分かったこと
Notion Workers 自体は使える。tool としてのデプロイは可能。ただ automation(DB 更新 → Worker 自動実行)はまだ一般開放されていない。.examples/automation-example.ts にサンプルはあるのに、公式ドキュメントには記載なしという状態。
あと、Vercel プラットフォーム上で動いているので、Node.js フルランタイムが使える可能性がありそう。
時間を空けて再挑戦してみたい。