PowerCMS X から Amplify や Vercel の Deploy Hook トリガーを引く

Next.jsのコードを変更した際、GitHub等にPushすることで自動的にビルド・デプロイが実行されます。それに加え、PowerCMS Xで例えば記事を更新した時(コードの変更を伴わない時)にも自動的にビルド・デプロイを実行しようという話題です。各サービスが用意しているDeploy Hookのトリガーをcurlで引くことで実現できます。(「トリガーを引く」でいいのかな…。トリガーする?英語だと「Triggering a Deploy Hook」です。)

開発にあたって「いつトリガーを引くか?」を検討しました。以下の3つが考えられますが、ひとまず1と3を採用することにしました。2は複数の記事を更新した時にどうだろうとの懸念があります。プラグインの処理は3とほぼ同じで後からどうにでもできるので、ひとまず置いておきます。

  1. 任意のタイミング…つまり再構築ボタンをクリックするようなイメージ
  2. オブジェクトの追加・更新・削除時
  3. オブジェクトが予約公開・予約差し替えされた時、公開終了になった時

機能はJamstackSupportプラグインに実装しました。まず、プラグインの設定画面にDeploy HookのURLを記述します。また、予約公開・予約差し替え・公開終了に対応するか否か、どのモデルの予約公開・予約差し替え時にトリガーを引くかを選択します。モデルを選択するとpost_initフックで動的にコールバックを登録します。
JamstackSupportプラグインの設定画面

プラグインの設定画面にDeploy HookのURLを記述した後に管理画面のDeploy Hookメニューを開くと、以下のようにトリガーを引くボタンが現れます。はからずも@redamoonさんの「Movable TypeをHeadless CMS利用できる Netlify Build Hooks 1.0.1 リリース | </ Redamoon.Log >」と似たような画面になりました。なおスタイルの整備が今ひとつなこと、翻訳が未登録であること、が課題として残っています。
PowerCMS X管理画面のDeploy Hookメニューを表示した画面

試しに本番環境のビルド・デプロイを実行するためにボタンをクリックすると、以下のようにレスポンスJSONを表示します。ビルド・デプロイが完了したことを知る術はありませんので、私はメール通知が来るようAWS Amplifyに設定しています。一度トリガーを引くとしばらくボタンを押せない方が良いのだろうか?と考えるのですが、今のところ何もしていません。
PowerCMS X管理画面のDeploy Hookメニューで本番環境のトリガーボタンをクリックした後の画面

トリガーを引いた時はログに記録を残します。オブジェクトを公開予約・差し替え予約した時のログは以下のようになります。例えば記事が2件予約公開された場合もトリガーは1回だけ引くように工夫しています。
※2021年10月31日追記:全ての公開予約などが完了した後、つまりpost_runでトリガーを引くように変更しました。
PowerCMS X管理画面のログ画面

せっかくなので、この記事も予約公開で公開してみます。
PowerCMS Xでこの記事をDeploy Hookで公開した時のログ画面