「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 |

利用サービスが増えましたが、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の設定時に1回、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の方が簡単に組めます