【Webhook】API経由でのレコード更新を検知してFirestoreを更新する!

Posted date at 2024-10-19

GoogleCloud

Business

Node.js

Webhook

kintone

 

title.png

 API経由でkintoneのアプリにレコードが追加、更新、削除されるとFireStoreにその内容が反映される仕組みを構築しました。今回共有するものは、その中のkintone-FireStoreの部分です。


🚀kintoneのWebhookでどのようなことができるか

 ⇒kitntoneのレコードを更新(追加・編集・削除・コメントの編集、ステータスの変更)したときに別アプリのURLに通知(レコード情報が含まれるJSON)を送ることができる

 JavaScriptを書かなくても更新結果をある程度のリアルタイム性(0~1分程度(実測))を持って別アプリにレコード情報を共有することができます。Slackやメールにレコード情報を付与した通知を送るのに使用されるケースがあるようです。

 私は、自分の開発したアプリでkintoneの更新すると同時に、別アプリにもレコード情報を送りたかったため使用しました。

 kintoneのJavaScriptイベントハンドラーはバックエンド側の更新には対応していないようです。

🚀なぜWebhookを使用したか(具体例)

 AP課日報アプリで担当者が日報を追加、変更、削除したときに、kintoneとFirestore両方に結果を反映させてほしいというユーザの要望をかなえるためです。以下のような構成を考えました。


context-diagram.png


 kintoneの更新後、Webhookによる通知でFirestoreの更新をかける仕組みです。

 なお、本件とは別の話ですが、データベースの整合性を確保するために、夜間にkintoneの更新日が前日分のすべてのレコードを対象とし、Firestoreのデータに対して追加、更新、削除を行うプログラムを作成する予定です。※何らかの原因でwebhook通知が失敗たときのため

🐡Webhookがうまくいかなったときに考えていたアーキテクチャ

 こちらはバックエンドでFirestoreとkintoneの両方の更新を行う方法です。webhookを受け取る実装しない分コンパクトですが、アプリ側のアーキテクチャにFirestoreの更新ロジックが入るため、上記よりは「蜜結合」になります。今回はWebhookを勉強したかったので採用しませんでした。


context-diagram-alter.png


 

🚀デモ動画

 紹介しているものは、開発中のAP課日報アプリからのAPIによる更新ではなく、kintoneアプリの操作を手動で行っています。

 レコード番号10の追加、更新、削除を行っています。追加はほぼ即時ですが、更新、削除は反映までに1分ほどかかっています。反映時間は毎回変わるようです。


🚀実装手順(今回のケース)

①Webhookを受け取るアプリを開発する。 

 今回は、Node.js/ExpressでWebookを受け取り、JSONをパースして、Firestoreに対して、レコード情報を追加、更新、削除するアプリケーションを開発しました。

②kintoneのWebhook設定画面にエンドポイントを登録する。

 httpsしか登録できないので、ローカル環境での開発の際はポートフォワーディングなどを使用してURLを発行するなどしないと厳しいと思います。

setting.png


🚀参考資料

 公式がわかりやすかったです。

説明文

 


🚀まとめ

 Webhookについては前から知っていましたが、実際に実装してみて、便利だなーと感じました。

kintoneのWebhookについてはJSONにレコードの情報が入っており、詳細な情報を通知する際に便利そうです。

 また、レコード情報のみが受信側のアプリケーションで必要な場合は送信側のJavaScriptも書かなくて良いのも利点でしょうか。

 他には今回の利用目的のような、APIによるレコード更新をトリガとした通知の送信でしょうか。kintoneのJavaScriptイベントハンドラーは、主にユーザーの操作(画面表示、フィールド変更、ボタンクリックなど)に対するイベントを提供しているようで、バックエンド側の更新は検知しないようです。

 

←ホームに戻る