「Google Forms に入力があったらSlack *1に通知したい」
今回の記事は、IFTTTやZapier、あるいはIntegromatを使って通知を行う方法についてです。
目次
動機
Google Forms を外部に公開したり、内部に公開して回答を受けてアクションすることは、度々あります。 そして、そのたびに「気づけないと意味がない、でも気付くためにSlackに通知するにはどうすれば楽にできるのか」を悩み勝ちです。
これまでも、Google App Script(GAS)を書いて通知、GASからServerlessにWebhookを投げて通知などをやっていましたが、いずれもコードが必要なためノンプログラマーがカジュアルにやるには苦しいです。 そして、コードでやる以上GitHubで管理したいですが、GASのデプロイとか考えたくありません。 コードを書かない、コードで書く必要がないという選択が必要なシーンも多いので、考えてみましょう。*2
誰であっても障壁を感じることなく*3、自分の仕事を自動化で楽にして、時間が作れずにできなった本当にやりたいことに注力できる土壌や文化はあってしかるべきだと思っています。
ということで選択するのがいわゆるGlueサービス、と呼ばれるインターネット上の各種サービスをノンプログラミング/レスプログラミングでつなぎ合わせるサービスである、IFTTTやZapier、Integromatです。
普段はどれを使っているのか
私自身は、個人のSlackではIFTTTをメインに構築して、会社としてはZapierを使っていました。
用途 | メイン | サブ |
---|---|---|
個人 | IFTTT | - |
会社 | Zapier | - |
これは、次の理由からです。
- 個人 : シンプルな操作が多く、IFTTTの方が設定の手間が少ない。また、使っているPhilips HueなどがIFTTTにしかない
- 法人 : SNSからの連携、ChatworkなどIFTTTではできず、複数のZapをかませたいなどZapierではないとできないサービスや処理がある
また、個人としても法人としても「同系統サービスはなるべく1つのサービスで済むなら集約させたい」という思いもあり絞っていました。
Integromatの利用
Integromatは去年から見ていたのですが、いまいち使いたいサービスがなく、すでにIFTTT、Zapierで組んでいたのでスルーしていました。 ZapierやIFTTTに感じていた2つのストレス、「視認性の悪さ」、「ちょっとしたことですぐに処理を挟む必要性」、「Zapierの課金の高さ」を解消できそうなので、Integromatも用いてみました。
用途 | メイン | サブ |
---|---|---|
個人 | Integromat | - |
会社 | Integromat | - |
ただし、3日使ってみて Basic($9課金)もした結果、メインをIntegromatにすることはやめてIFTTT/Zapierと併用しています。
用途 | メイン | サブ |
---|---|---|
個人 | IFTTT | Integromat |
会社 | Zapier | Integromat |
https://www.integromat.com/en/pricingwww.integromat.com
利用サービスが増えましたが、IFTTT/Zapierでできなかったことを任せられるので、用途を定めればいいかと判断しました。*4
Integromatの強さ
Integromatは、かなり理想的なサービスと思っています。 特に次のポイントを評価しています。
- ifがなどのフィルタ時でもシナリオのUIが分かりやすい*5
- 組み込みのパーサーや配列ハンドリングがある
- 実行分だけとすると無料で1000op/monthという破格さ
- 課金もBasic $9~とZapierより安い
- Google SpreatSheetへの書き戻しなど処理が強力
非エンジニアから、シナリオUIが可愛い、理解しやすいと高評価だったことも好ましいと思っています。Zapierは繋ぐとカオスなのですごくいいですね。
↓は2つのmoduleをつなぐUIですが、可愛さです。
Integromatをメインにしない理由
Integromatをメインからサブに戻した理由は、「実際に処理の必要な更新がなく、実行しない場合でもオペレーションが消費される」という特性を使って気付いたからです。 ZapierやIFTTTは、対象サービスの対象処理が実行された時にだけ「Zapなどのオペレーションを消費」するのに対して、Integromatは「スケジュール実行でポーリングする場合、実行されていなくてもスカシ実行でもオペレーションを消費」します。 計算すると、Integromatは通常の15分に一度のスケジュールでも96op/day 消費します。*6 15分スケジュールだと、無料アカウント(1000op/month)でひと月持たず、Basic(10000op/month)でも3ジョブ程度でしょう。「InstantやWebhookがない」けど「高頻度スケジュールで実行したい処理」はIntegromatにあまり向いていないと判断しました。*7
実際に使い始めてオペレーションを消費している原因を把握して、構成を組みなおすまでのOperation消費は次の通りです。
4シナリオで15分頻度スケジュールを実行した結果、一日で388使っているのが分かります。*8
例えば、Google Formsの新規入力があったらSlackやメールに通知、返信、などの処理はなるべくリアルタイムに処理したく15分に一度に設定するとあっという間にいっぱいになります。
IntegromatとZapier/IFTTTの利用用途
Integromatは実行分だけOperationを消費することが確定する処理にのみ利用することにして、次の用途と定めました。
- Webhook を受けて実行する処理
- Schedule に Instantがある処理
- 1op/week、1op/month、1op/yearなど非常に低頻度に繰り返す処理
- Router/Aggregatorなどを用いて分岐する処理
IFTTT/Zapierは、Integromatで処理が向いていない他の用途に使っています。
- 対象サービスの特定のオペレーションを起点に実行される処理
- HueやSNSなどIntegromatで処理しにくい処理
自動化を組むときは、まずIntegromatでInstantに処理できるか/Webhookかを確認、出来なければIFTTT/Zapierという順に利用しています。
Google Forms の回答をSlackに通知してみる
余談が長くなりました。
当初はIntegromatのみの記事を書くつもりでしたが、結局先述の理由でIFTTT/Zapierで組んでいます。
Google Forms は次の構成です。
回答先のスプレッドシートを設定しておきます。
結論どれで組むといいのか
ZapierかIFTTTがおすすめです。
この記事の用途でIntegromatは向いていません。理由は先述の通りです。
ただし、Webhook経由でトリガーが発動して、SpreadSheetに書き込み、Slackに通知、Twitterにポストを行って.... など、InstantなTriggerを起点に処理が実行されるならIntegromatが最高です。
Integromat
シナリオは、Google Forms -> Slackをつなぎます。
まずは、Google Forms モジュールを選択します。
Google Forms Moduleは、SpreadSheetの更新を検知させることができます。
フォームと回答のスプレッドシートにアクセスできるGoogleアカウントで接続し、ファイルとワークシートを選択します。
行は全てでいいでしょう。Formsからの自動生成なら先頭行はカラム名のはずです。
次はSlack通知をつなげます。Add another module でSlackをつなげましょう。
Create a messageでメッセージを送れます。Create a Postだとリンク先に飛べなかったのでMessageでいいかと思います。
あとはメッセージを送るChannelとメッセージを組みます。どのような値が来るかは、直前のGoogle Forms ModuleからのFetchによって可視化されています。
メッセージを作るときには、Text、Math、Date、配列操作、Parseなど強力な関数が用意されているのでZapierのような関数を組む必要がほぼありません。
一度保存します。
試しに今の回答でSlackに飛ばします。Run Onceしてみましょう。
それぞれのModuleに処理数が表示されます。
今回はスプレッドシートに回答がすでに4行あり、Google Forms Moduleの設定時に一度に2行処理するように設定していました。 そのため、Google Forms は1度の処理ですが、Slack Moduleは2度処理されて2つの回答がポストされています。
こういった詳細もわかるのは神ですね。
Slackを確認すると2つメッセージが送られていることが分かります。
あとは確認頻度スケジュール設定です。Integromatは、Zapier/IFTTTと違ってScheduleにInstantがない限りは定期的に実行します。(そしてOperationを消費します)
回答があるたびに実行をなるべく早く送信したいなら、Scheduleを短くすることになりますが、Operationが激しくなるのでものを選ぶのがここです。
Activate にすれば有効になります。
以上で、Integromatの設定は完了です。
ちなみに、Slack送信時にShow Advanced Settings でBotのアイコンや名前などいろいろ調整できます。
Zapier
Zapierの場合は次のように組めます。
Trigger Apps に Google Forms を選択します。
New Responseを選択。
接続するGoogle アカウントを認証してTestします。
トリガー対象のスプレッドシートとワークシートを選びます。
これで完了なので、Fetchして接続を試します。
トリガーを受けたら処理するActionは「Slackへメッセージ送信」です。Slackを選びましょう。
Channel Messageを送ります。
Slackとの接続をテストします。
Slackのメッセージを作ります。Integromat とは選べる内容が異なりますね、行やURLは取れません。*9 送信先のURLはZapierにテキスト埋めなの何とかならないでしょうか。
さぁ、ではテスト実行してみましょう。
Slackに送れていますね。
名前を付けてZapをOnにすれば完了です。
Zapierは、処理が縦に並ぶため複数のStepを組んだ時にどんな流れになるのかが見にくいのかが良くなるといいですね。
IFTTT
IFTTTの場合は、Google Formsではなくスプレッドシートで作成します。
新しい入力検知なので、New row added to the spreadsheetです。
パスかURLでシートを選択します。
あとはthatを選んで、Slackにポストします。
文章を適当に作りましょう。
始めからある程度いい感じの文が入っています。
カラムはプレビューできません。
保存しましょう。
Check now で実行をテストできます。
適当にRowを追加してから実行するとSlackにメッセージが連動します。
これで完了です。
まとめ
Google App Script でコード書いて、という処理に比べるとコーディングがない上にUXがある程度定型化しているのとストレートフォワードなのが分かります。
「誰でもこのような自動化が組め、何かを自動化できそうと気づいたら5分もかからずサクッと組める。」
この良さは、プログラミングをする理由と同様だと思います。 例えプログラミングができなくても、普段「何かをtriggerに手作業で行っていた単純な作業」は自動化できます、誰かにお願いせずとも自分で組める環境は非常に重要です。
もしも簡単に条件付けできるなら、それもZapierやIntegromatで自動化フローに載せられます。*10
例えば、Integromatなら質問1が「オプション 1」の場合はXXXX処理、違うならZZZZもFilterとRouterで簡単です。
ぜひ、普段の提携作業を自動化してしまって、本当にやりたいことをやってください。この記事がそのきっかけになれば幸いです。
*1:Teams でも Chatworkでも置き換えてください
*2:もちろん増えてくると定義をTerraformで~とかInfrastructure as Codeの辿る道がくるのですが
*3:あるいは障壁を意識することなく
*4:Integromatに統一したかったです
*5:英語であることは問題ではない
*6:4op/1hour * 24hour = 96op/day
*7:これらはIFTTT/Zapierで十二分にこなせていることもあり
*8:他にも1op/dayのシナリオをいくつか組んでます
*9:このためZapierでSpreadsheetの再帰書き換えは面倒です
*10:Integraomatの方が簡単に組めます