【Webhook】API経由でのレコード更新を検知してFirestoreを更新する!
Posted date at 2024-10-19
API経由でkintoneのアプリにレコードが追加、更新、削除されるとFireStoreにその内容が反映される仕組みを構築しました。今回共有するものは、その中のkintone-FireStoreの部分です。
🚀kintoneのWebhookでどのようなことができるか
⇒kitntoneのレコードを更新(追加・編集・削除・コメントの編集、ステータスの変更)したときに別アプリのURLに通知(レコード情報が含まれるJSON)を送ることができる
JavaScriptを書かなくても更新結果をある程度のリアルタイム性(0~1分程度(実測))を持って別アプリにレコード情報を共有することができます。Slackやメールにレコード情報を付与した通知を送るのに使用されるケースがあるようです。
私は、自分の開発したアプリでkintoneの更新すると同時に、別アプリにもレコード情報を送りたかったため使用しました。
kintoneのJavaScriptイベントハンドラーはバックエンド側の更新には対応していないようです。
🚀なぜWebhookを使用したか(具体例)
AP課日報アプリで担当者が日報を追加、変更、削除したときに、kintoneとFirestore両方に結果を反映させてほしいというユーザの要望をかなえるためです。以下のような構成を考えました。
kintoneの更新後、Webhookによる通知でFirestoreの更新をかける仕組みです。
なお、本件とは別の話ですが、データベースの整合性を確保するために、夜間にkintoneの更新日が前日分のすべてのレコードを対象とし、Firestoreのデータに対して追加、更新、削除を行うプログラムを作成する予定です。※何らかの原因でwebhook通知が失敗たときのため
🐡Webhookがうまくいかなったときに考えていたアーキテクチャ
こちらはバックエンドでFirestoreとkintoneの両方の更新を行う方法です。webhookを受け取る実装しない分コンパクトですが、アプリ側のアーキテクチャにFirestoreの更新ロジックが入るため、上記よりは「蜜結合」になります。今回はWebhookを勉強したかったので採用しませんでした。
🚀デモ動画
紹介しているものは、開発中のAP課日報アプリからのAPIによる更新ではなく、kintoneアプリの操作を手動で行っています。
レコード番号10の追加、更新、削除を行っています。追加はほぼ即時ですが、更新、削除は反映までに1分ほどかかっています。反映時間は毎回変わるようです。
🚀実装手順(今回のケース)
①Webhookを受け取るアプリを開発する。
今回は、Node.js/ExpressでWebookを受け取り、JSONをパースして、Firestoreに対して、レコード情報を追加、更新、削除するアプリケーションを開発しました。
②kintoneのWebhook設定画面にエンドポイントを登録する。
httpsしか登録できないので、ローカル環境での開発の際はポートフォワーディングなどを使用してURLを発行するなどしないと厳しいと思います。
🚀参考資料
公式がわかりやすかったです。
🚀まとめ
Webhookについては前から知っていましたが、実際に実装してみて、便利だなーと感じました。
kintoneのWebhookについてはJSONにレコードの情報が入っており、詳細な情報を通知する際に便利そうです。
また、レコード情報のみが受信側のアプリケーションで必要な場合は送信側のJavaScriptも書かなくて良いのも利点でしょうか。
他には今回の利用目的のような、APIによるレコード更新をトリガとした通知の送信でしょうか。kintoneのJavaScriptイベントハンドラーは、主にユーザーの操作(画面表示、フィールド変更、ボタンクリックなど)に対するイベントを提供しているようで、バックエンド側の更新は検知しないようです。
←ホームに戻る