【Notion × Astro】Makeを使ってCloudflare Pagesへのデプロイを完全自動化する(無料枠対応)
はじめに
NotionをCMSとして利用するテックブログ(AstroやNext.jsなど)を構築しました。しかし、記事を書くたびに手動でCloudflareのデプロイボタンを押したり、PCでビルドコマンドを叩くのはナンセンスです。
そこで、iPaaSツールの Make(旧Integromat) を導入し、「Notionで記事ステータスを『Published』にするだけで、勝手にビルドが走る」仕組みを構築しました。
今回は、Makeの無料枠(月間1000オペレーション)を使い切らないための設定や、意外とハマりやすいフィルター設定のコツを含めて、具体的な手順を解説します。
全体の流れ
構築するフローは以下の通りです。Makeという連携ツールを使い、Notionの更新を監視し、条件に合致した場合のみCloudflareに通知を送ります。
- Notion: 記事の更新を検知(Updated time)
- Filter: ステータスが
Publishedの記事だけを通す - HTTP Request: CloudflareのDeploy Hookを叩く
手順1:CloudflareでDeploy Hookを発行する
まず、Cloudflare Pages側で「外部からビルドを開始するためのURL」を取得します。
- Cloudflare Pagesのダッシュボードへ移動
- Settings > Build & deployments > Deploy hooks
- Add Deploy Hook をクリック
- 適当な名前(例:
Make-Auto-Deploy)をつけて保存 - 発行された Hook URL をコピーしておく
📚 参考: Cloudflare Pages Deploy Hooks公式ガイド
手順2:Makeでシナリオを作成(Notion側)
Makeで Create a new scenario を選択し、最初のモジュール(トリガー)に Notion を追加します。
- Module: Watch Data Source Items
- Connection: 自分のNotionアカウントを連携し、許可を与えます。
- Trigger By: Updated time (※ここが重要)
⚠️ 注意: デフォルトの Created time にしてしまうと、記事を修正(リライト)した時に反応しません。「更新」を検知するために必ず Updated time を選びます。
- Database ID: 自分のブログ記事を管理しているデータベースを選択します。
💡 Database IDの確認方法 Notionをブラウザで開き、対象データベースのURLを確認してください。 https://www.notion.so/myworkspace/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?v=... この ?v= の前にある32桁の英数字部分がDatabase IDです。
- Limit: 一度に取得するデータ数です。通常はデフォルト(例: 2)のままで問題ありません。
手順3:フィルターを設定する(※一番のハマりポイント)
Notionモジュールと、次に繋ぐHTTPモジュールの間の「点線」をクリックしてフィルターを設定します。 ここで 「Statusプロパティの選び方」 を間違えると、公開ステータスになってもデプロイが走りません。
正しい設定
Condition(条件設定):
- Notionモジュールから取得したデータ項目の中から、ステータス管理に使っているプロパティを探します(例:
Status)。 - そのプロパティを展開し、中身のテキストデータである
Nameを選択します。
- ✅ 正:
Properties Value > Status > Name(具体的なテキストの値を選ぶ!) - ❌ 誤:
Status(オブジェクトそのものを選んではダメ)
Text operators(比較演算子):
Equal to(完全一致)を選択します。
Value(比較する値):
Published(Notion側で設定している「公開」ステータスの名前と一字一句間違わずに入力します)
💡 ポイント: Status という項目の「箱」ではなく、その中にある具体的な「値(Name)」を指定しないと、いつまで経ってもフィルターの条件を満たしません。
よくある間違いと症状
もし誤って Status オブジェクトそのものや Status.id などを選択した場合、Makeの実行ログを確認すると、フィルター部分で処理が止まっていることがわかります。
ログにはエラーは出ませんが、フィルターの判定が常に false となり、後続のHTTPリクエストが送信されません。
手順4:Cloudflareへ通知(HTTP側)
次に、フィルターを通過した場合のアクションとして HTTP モジュール(Make a request) を接続します。
- URL: 手順1で発行したCloudflareのHook URLを貼り付け
- Method: POST
- Authentication type: No authentication
Hook URLの中に既に認証情報(トークン)が含まれているため、ここでは「認証なし」を選びます。
手順5:無料枠を生き抜くスケジューリング設定
Makeの無料プラン(Free)には 「月間1,000オペレーション」 という制限があります。デフォルトの「15分間隔」で動かすと、すぐに制限を超えてしまいます。
| 実行間隔 | 1日の実行回数 | 月間オペレーション数(概算) | 無料枠(1000回)で収まるか |
|---|---|---|---|
| 15分 | 96回 | 2,880回以上 | ❌ 超過 |
| 60分 | 24回 | 720回以上 | ✅ 問題なし |
※オペレーション数は、Notionの更新チェック(1回)+フィルター通過時のHTTP通知(1回)で消費されます。更新がない場合は1回消費です。
左下の時計マークをクリックし、Run scenario を Every 1 hour(60分) に設定します。これで、記事を公開してから最大1時間のタイムラグはありますが、無料で完全自動化が運用できます。最後にシナリオを「ON」にするのを忘れずに。
よくあるトラブルと解決策
設定したのに動かない場合のチェックポイントです。
1. Notionステータスを変えてもMakeが反応しない
- 原因: 手順3のフィルター設定が間違っている可能性が高いです。
- 対策: Makeの「History」タブから実行ログを確認してください。Notionモジュールまでは動いているが、フィルターで止まっている(Bundleが空になっている)場合、Conditionで選んでいるプロパティが
Status > Nameになっているか再確認してください。
2. Makeは動いているがCloudflareでビルドが始まらない
- 原因: CloudflareのDeploy Hook URLが間違っているか、HTTPメソッドがPOSTになっていない可能性があります。
- 対策: 手順1で取得したURLが正しいか、手順4のHTTPモジュールの設定が
POSTになっているか確認してください。
3. Cloudflareでビルドは走るが失敗する
- 原因: Notion側のデータ構造と、ブログのビルドプログラム(AstroやNext.js)側で期待するデータ構造に不整合が起きている可能性があります(例:必須プロパティが空など)。
- 対策: Cloudflare Pagesのダッシュボードでビルドログを確認し、エラーメッセージを特定してください。
まとめ
これで、「Notionで記事を書いてステータスを変えるだけ」で、勝手にブログが更新されるようになりました。
GEO(AI検索)対策としても、SEO対策としても、コンテンツの鮮度は重要です。更新のハードルを極限まで下げるこの自動化は、テックブログ運営において非常に効果的だと感じました。ぜひお試しください。