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 フルランタイムが使える可能性がありそう。

時間を空けて再挑戦してみたい。