この記事は microCMSでこんなことができた!あなたのユースケースを大募集 by microCMS Advent Calendar 2024 3日目の記事です。
はじめに
こんにちは、ニフティ株式会社の宮本です。
今回はmicroCMSのアドベントカレンダー参加記事なので、初めてNIFTY engineeringを閲覧する方も多いと思います。
ニフティでもmicroCMSを利用して複数のサイトを運用をしており、せっかくなので今回のアドベントカレンダーに参加させていただきました。
コンテンツの内容によって通知先を変えたい
microCMSには、コンテンツの変更があった際に叩くことのできるWebhook機能があります。デフォルト機能として、Slackへの通知や主要なホスティングサービスのビルド用Webhookが用意されています。ビルドも通知もコンテンツの更新時に実施したいので、欠かせない機能ですね。
さて、本題ですが自分が触っているAPIの中には、コンテンツの内容によって叩きたいWebhookが変わるAPIがあります。たとえばお知らせAPIでも、お知らせの種類によって別のSlackに通知をしたいなどです。あまり考えたくはないですが、障害関連のお知らせは障害用のチャンネルにも流すなど……。
このとき、microCMSのデフォルトのWebhookだと、Webhookを叩くコンテンツの更新タイミング自体を細かくカスタマイズすることはできても、コンテンツ内容によって叩くWebhookを決めることはできません。
これを解決しようとした場合、カスタムWebhookを使った上で処理内容によって分岐するAPIを作成する必要があります。実現する方法の一例としてAPI Gateway + Lambdaが挙げられますが、わざわざこれを立てるのは結構面倒です。というか面倒でした。別件でやや複雑な処理をすためにAPIをわざわざ作成したんですが、cdkでAPI Gatewayを建てるのが地味に面倒くさい……。できれば、もっと簡単な方法で実現したいです。
そこで、Zapierを用いてWebhookの叩き先を柔軟にカスタマイズする方法を紹介します。
Zapier
Zapierはノーコードでワークフローを作成できるiPaaSです。他の様々なSaaSと組み合わせることでいろいろなことができ、社内でもさまざまな場面で利用されています。
なお、今回扱うWebhook機能は有料プランでなければ利用できないためご注意ください。
microCMSの更新をZapierで受け取って通知する
microCMS側でお知らせの種類をセレクトボックスで選べるようにした次のようなスキーマのAPIで考えます。
これをお知らせの種類に合わせてSlack通知するには、以下のような手順が必要です。
- ZapierのWebhookを起点にmicroCMSからのデータを取得
- コンテンツの種類に応じた叩きたいWebhookを取得
- 通知用のWebhookを叩く
ZapierのWebhookを起点にmicroCMSからのデータを取得
Zapierで提供されているWebhook Appをトリガーにすることで、取得自体はできるようになります。この時点でWebhookを叩くテストが実行ができるので、microCMSのカスタムWebbhookにZapier側で発行されたWebhookを指定すると、実際に動作した際の返却値を確認できます。
返却値は以下のよう確認できます(だいぶ長いので一部抜粋)。
含まれるデータはmicroCMSの公式ドキュメントから確認できます。
このとき、新規作成・公開・下書き追加・公開した状態での下書き追加・削除等々、発火時の操作によって含まれるコンテンツのデータの量がやや異なるため注意が必要です。また、この後のステップで参照したい値はテスト時のリクエストに含まれている必要があります。
下書きが存在する公開済みのコンテンツの下書きを更新する操作でWebhookを発火させておくと、ひとまず全部載せのデータが取れるはずです。
通知先を取得
Zapierには処理を分岐させるPath Appがあり、これを使うと簡単に分岐処理を分岐できます。しかし、分岐上限がデフォルト5件と決まっています。上限を増やすこともできるそうですが、それよりも便利な方法があります。
あらかじめGoogle スプレッドシートやZapier Tableにコンテンツの内容と叩きたいWebhookのURLを記入しておけば、コンテンツの内容から検索して対応する行の情報を取得することができます。
こんな感じのスプレッドシートを用意して
コンテンツのステータスをもとに検索するようにすれば
Zapier側で該当の行を取得できます。
取得したWebhookを叩く
最後は簡単です。これもWebhook Appを使って、前のステップで取得したURLに向けてリクエストを投げるだけですね。
また、通知内容も編集できるためコンテンツの内容を含めた通知にすることも可能です。
Headerなども自由に指定できるため、単なるSlack通知以外にも、認証が必要なWebhookを叩くことができます。その際はデータを取得するWebhookをまとめたスプレッドシートなどに、認証情報の行などを追加して参照できるようにしておくと便利です。
最後に
microCMSとZapierを組み合わせることで、コンテンツの更新の種類だけでなくコンテンツの内容に応じて、通知先を柔軟に変更することができます。Slackへの通知文言に更新内容を含ませるだけでも便利かもしれません。通知の作成自体がとても簡単なのも嬉しいです。今回紹介したZapも、たった3ステップでできています。
また、使いようによってはSlack通知以外にも、かなり柔軟に別のSaaSへの連携などを仕込むことができます。
一方でZapierにも限界はあり、より複雑なことや、クラウドリソースに対して何かしようとする場合はAPI Gateway + Lambdaのような構成を作る必要もあると思います。この辺りについては、事前に何がしたいかしっかり考える必要がありますが、とりあえずZapierで動くか試してみることが簡単にできることも魅力の一つだと思います。microCMS自体とても使いやすいので、日々の運用をより快適なものにするためにも、いろいろと工夫のしがいがありますね。