Next.jsのコードを変更した際、GitHub等にPushすることで自動的にビルド・デプロイが実行されます。それに加え、PowerCMS Xで例えば記事を更新した時(コードの変更を伴わない時)にも自動的にビルド・デプロイを実行しようという話題です。各サービスが用意しているDeploy Hookのトリガーをcurl
で引くことで実現できます。(「トリガーを引く」でいいのかな…。トリガーする?英語だと「Triggering a Deploy Hook」です。)
開発にあたって「いつトリガーを引くか?」を検討しました。以下の3つが考えられますが、ひとまず1と3を採用することにしました。2は複数の記事を更新した時にどうだろうとの懸念があります。プラグインの処理は3とほぼ同じで後からどうにでもできるので、ひとまず置いておきます。
- 任意のタイミング…つまり再構築ボタンをクリックするようなイメージ
- オブジェクトの追加・更新・削除時
- オブジェクトが予約公開・予約差し替えされた時、公開終了になった時
機能はJamstackSupportプラグインに実装しました。まず、プラグインの設定画面にDeploy HookのURLを記述します。また、予約公開・予約差し替え・公開終了に対応するか否か、どのモデルの予約公開・予約差し替え時にトリガーを引くかを選択します。モデルを選択するとpost_init
フックで動的にコールバックを登録します。
プラグインの設定画面にDeploy HookのURLを記述した後に管理画面のDeploy Hookメニューを開くと、以下のようにトリガーを引くボタンが現れます。はからずも@redamoonさんの「Movable TypeをHeadless CMS利用できる Netlify Build Hooks 1.0.1 リリース | </ Redamoon.Log >」と似たような画面になりました。なおスタイルの整備が今ひとつなこと、翻訳が未登録であること、が課題として残っています。
試しに本番環境のビルド・デプロイを実行するためにボタンをクリックすると、以下のようにレスポンスJSONを表示します。ビルド・デプロイが完了したことを知る術はありませんので、私はメール通知が来るようAWS Amplifyに設定しています。一度トリガーを引くとしばらくボタンを押せない方が良いのだろうか?と考えるのですが、今のところ何もしていません。
トリガーを引いた時はログに記録を残します。オブジェクトを公開予約・差し替え予約した時のログは以下のようになります。例えば記事が2件予約公開された場合もトリガーは1回だけ引くように工夫しています。
※2021年10月31日追記:全ての公開予約などが完了した後、つまりpost_run
でトリガーを引くように変更しました。
せっかくなので、この記事も予約公開で公開してみます。