目次
自動ビルドの方法を検討する
NotionにWebhook機能が追加されたことにより、特定のデータベースを任意の条件で変更した時に、HTTP POSTリクエストを任意のURLへ送信することができるようだ。
ただ、この機能を自由に使えるかというとそうでもなく、有料でのサービスであった。できるだけコストを掛けずに済ませたいため、他の手段を考えることにする。
ClaudflareでWebhookが使えるということが分かったので、タイマーによる定期実行を使ってGoogle Apps Script(GAS)からHTTP POSTリクエストすることで定期ビルドが実現できるのでは?とかんがえ、以下の構成で自動ビルドを実現することとした。
graph LR TRIGER(タイマートリガー) --> GAS(Google Apps Script) --①Webhook-->Cloudflare(CLOUDFLARE) Cloudflare -.-> |②DB Read リクエスト|notion notion(Notion DB) -.-> |③DB Read レスポンス|Cloudflare Cloudflare --デプロイ--> WEB(Webページ)
Cloudflareのデプロイフックを作成
CloudflareでWebhookを作成し、イベントによって自動化することができる。Webhookの作成は次の通り。
- Workers & Paged > “ビルドプロジェクト”へ進む
- 上部メニューから設定を選択
- デブロイフックで、+ボタンを押す
- フック名を入力して保存
- 表示されるURLを使って使用するため、保存しておく。
Google Apps ScriptからWebhookを利用する
スクリプト作成
GASでプロジェクトを新規作成し、以下のコードを作成した。webhookUrlには、Cloudflareで作成したデプロイフックのURLを設定する。手動で実行したところ、Cloudflare側でビルドが開始されるのを確認できたので、この実装で問題はなさそうである。
function triggerCloudflareBuild() {
const webhookUrl = 'https://api.cloudflare.com/client/v4/pages/webhooks/deploy_hooks/xxx'; //Webhook
const options = {
method: 'post',
muteHttpExceptions: true
};
UrlFetchApp.fetch(webhookUrl, options);
} タイマートリガー設定
時間ベースで、毎日午前0時から1時のあいだでトリガーが発火するように設定した。
まとめ
astro-notion-blogの定義ビルドを、CloudflareのWebhookとGAS+トリガーによって実現した。GASからは、notionのデータベースの情報をリクエストすることも可能であるため、記事が更新されているときだけビルドするようにもできるが、毎日ビルドでも十分要求は満足できているので、今回はここまでとした。
記事を更新するたびに、手動でビルドする手間がなくなったことから、ブログ更新が楽になって良かった。
