Google スプレッドシートの更新をLINEに通知する

先に投稿した「社員証タッチで参加者リストを自動作成」は、ICリーダーで読み取った情報を元に、Googleスプレッドシートにリストを追加するという内容をご紹介しました。今回は逆に、Googleスプレッドシートを起点として、スプレッドシートが更新されたら、LINEに通知するという内容です。

■ 作成の背景

これに取り組もうと思ったのは、あるIoT研修で受講者の方が「チーム間の情報共有ができていないがために、納期遅れや残業が発生している」と話されていたことがきっかけです。
その方は製造業で、詳しくお話を聞くと、以下のような状況が分かりました。

  1. ある製品を完成させるためには、5つの工程が必要で、その工程毎にチームが編成されている
  2. 1番目の工程が完了すると、その仕掛品は2番目の工程の棚に移動
  3. 2番目の工程の担当チームは、その棚に品物が置かれたことをトリガーに、作業を開始
  4. 同様に、2番目の工程が完了すると、その品物は3番目の工程の棚に移動される
  5. これを繰り返して、5番目の工程が完了すれば製品は完成する

ここで最大の課題は「後続の工程チームに、事前の情報共有がされておらず、自工程の棚に品物が置かれて初めて、品物の存在を知り作業の段取りが始まる」ということです。
それで、まずは実験的にGoogleスプレッドシートを用いた情報共有を試してみることを提案しました。つまり、各製品毎に、各工程のチームの作業予定と作業実績を入力するスプレッドシートを作成し、関係者に共有されている状態です。
しかし、これでは各チームは常にスプレッドシートを気にしていなければならず、あまり現実的ではありません。そこで、「誰かがスプレッドシートを編集したときに、それが自分に関係のあるものであれば、LINEに通知がされる」という仕組みを考えました。そうすれば、LINEで通知を受けたときだけ、スプレッドシートを確認すればよいということになります。

■ 作りたい仕組みのイメージ

動作のイメージはこんな感じです。

  1. 1番目のチームが、作業予定もしくは作業実績を入力あるいは変更すると、2番目以降のチームにLINEで通知が届く
  2. 同様にn番目のチームが、作業予定もしくは作業実績を入力あるいは変更すると、(n+1)番目以降のチームにLINEで通知が届く
  3. 新しいタスクの追加など全体に影響がある変更は、全員に通知する

今回は、3つの工程があるという想定で実際にこの仕組みを作ってみました。
全体は次のような構成で進めました。

スプレッドシートの変更の検知と変更内容の収集は、Google App Script(GAS)で行い、通知メッセージの作成とLINEへのメッセージ送信は、enebularが担うことにしました。これは、通知先や通知メッセージの送信方法は、現場の方が自分達で自由に変更できた方が良いと考えたからです。また通知先にはLINEグループを使用することで、通知を受ける人の設定は、LINEグループへの参加、退出で簡単に制御できるようにしました。

■ 作成したスプレッドシートとGAS

作成したスプレッドシートとGASは次のような内容になりました。
スプレッドシートの1,2行目は通知メッセージの送信先と通知の際に使いたい項目を入力していますので、通常の編集時は行全体を非表示にしておきます。
スプレッドシートとGASの作成については、Qiitaの記事(【GAS】Googleスプレッドシートを更新したらSlackに通知させる仕組みを作ってみた)を参考にさせていただきました。

  • スプレッドシート:タスク共有(閲覧専用、コピーしてご利用いただけます)

■ LINE botの作成と設定

今回は、Aチーム、Bチーム、Cチームのそれぞれにbotを作成して、そのボットが担当するチームに必要な通知を発するという形にしました。
LINEのボット作成の方法は、先輩方のサイトを参考にしながら実施し、作成した3つのbotのそれぞれに対して、次の作業や設定変更を実施しました。
参考サイト:1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefest

□設定内容

  • チャネルシークレットの取得‥‥(enebularのLINEノードに設定)
  • チャネルアクセストークンの取得‥‥(enebularのLINEノードに設定)
  • Webhook URL‥‥https://xxxxxxxxx.herokuapp.com/line    ※xxxxxxxxxはherokuのアプリ名
  • Webhookの利用‥‥ON
  • 応答メッセージ‥‥無効
  • あいさつメッセージ‥‥無効
  • チャットへの参加‥‥グループ・複数人チャットへの参加を許可する

上記の設定が出来たら、3つのボットをそれぞれグループに参加させます。これはスマホのLINEアプリで、友達とグループを作ってトークをするときと同様に、AチームのグループにはAチーム担当のbotを、Bチームのグループには‥というように3つのグループを作成しておきます。

■ enebularのフロー

さて、いよいよenebularのフローを作成しますが、enebularのフローで実施することは大きく次の3つです。

  1. GASからJSON形式のデータを受け取る
  2. 変更内容に応じて、LINEで通知する通知メッセージを作成する
  3. 変更された項目に応じて、適切なチームに通知メッセージを送信する

ただ、3.のメッセージ送信の前に、通知メッセージを送信するLINEグループのIDを確認する必要があります。botからグループに通知を送信するためには、そのグループを表すグループIDが必要なので、まずはこのグループIDを確認するためのフローを作成します。

下のフローの図で、”LINE webhook”で始まる小さなフローがありますが、これがLINEのデータを受信するためのフローで、webhookのノードのURLの項目にはLINE botに設定した”/line”を設定しています。このフローの実行中に、botが参加しているグループに対して、メッセージを送信すると、botを介してグループIDを含むデータが、enebularに送られてくるので、デバッグノードで確認しましょう。
それぞれのbotが参加しているグループIDが確認できたら、そのIDをLINE送信ノードの送信先に設定します。

また、このフローは常時動作している必要があるので、herokuにデプロイしました。herokuへのデプロイ方法はこちらを参考にしてください。
参考サイト:Heroku へのデプロイ

実際のフローはこのようになりました。

「変更内容判定」と次の「○○メッセ作成」では、スプレッドシートの変更内容に応じて、日本語の「てにをは」が正しくなるように送信用のメッセージを作成しています。そして、「送信先選択」では、工程Aに関する情報が変更された場合は、A,B,Cの全てのチームへ、工程Bに関する情報が変更された場合は、B,Cチームへ、というように変更項目に応じて、送信先を選ぶようになっています。

フローはこちらからインポートできます。(どちらも同じフローです)
フローのJSONデータ:google_spreadsheet_notice_flow
enebularのdiscoverより:spreadsheet-update-notice

■ 動作結果

実際にスプレッドシートを変更して、LINE通知が届く様子はこちらでご覧いただけます。

■ 感想

なんだかんだ苦労しましたが、なんとか完成しました。前後の工程との情報共有が、手軽にできるという点では、このような仕組みが使えるシーンは結構多いのではないかと思います。まずは手動になりますが、このような仕組みでも、タスクの種類と各工程の所要時間の等の基礎データが蓄積できるので、将来的に作業やプロセスの改善を効果的に行うことにも役立つと思います。

enebular(Node-RED)によるローコード開発とは言うものの、他のサービスと接続しようとすると、まだまだそれなりに知識が必要だと痛感しました。しかし、一連のプロセスを通して、クラウドサービス同士の連携やLINEなどのコミュニケーションツールとの連携など、様々なことに応用できる知識やスキルが身についたというのも事実です。

この記事では、ほぼ全てのソースコードや手順をご紹介していますので、これをベースに、是非、何か業務に役立つ仕組みなどに挑戦していただければと思います。