tech.guitarrapc.cóm

C#, PowerShell, Swift, Cloud, Serverless Technical Update and Features

IFTTT と Zapier と Integromat それぞれでGoogle Formsの回答をSlackに通知してみる

「Google Forms に入力があったらSlack *1に通知したい」

今回の記事は、IFTTTやZapier、あるいはIntegromatを使って通知を行う方法についてです。

目次

動機

Google Forms を外部に公開したり、内部に公開して回答を受けてアクションすることは、度々あります。 そして、そのたびに「気づけないと意味がない、でも気付くためにSlackに通知するにはどうすれば楽にできるのか」を悩み勝ちです。

これまでも、Google App Script(GAS)を書いて通知、GASからServerlessにWebhookを投げて通知などをやっていましたが、いずれもコードが必要なためノンプログラマーがカジュアルにやるには苦しいです。 そして、コードでやる以上GitHubで管理したいですが、GASのデプロイとか考えたくありません。 コードで書く必要がないことは、コードを書かないという選択はかなり重要だと思います。*2

seleck.cc

誰であっても障壁を感じることなく*3、自分の仕事を自動化で楽にして、時間が作れずにできなった本当にやりたいことに注力できる土壌や文化はあってしかるべきだと思っています。

ということで選択するのがいわゆるGlueサービス、と呼ばれるインターネット上の各種サービスをノンプログラミング/レスプログラミングでつなぎ合わせるサービスである、IFTTTやZapier、Integromatです。

普段はどれを使っているのか

私自身は、個人のSlackではIFTTTをメインに構築して、会社としてはZapierを使っていました。

用途 メイン サブ
個人 IFTTT -
会社 Zapier -

これは、次の理由からです。

  • 個人 : シンプルな操作が多く、IFTTTの方が設定の手間が少ない。また、使っているPhilips HueなどがIFTTTにしかない。
  • 法人 : SNSからの連携、ChatworkなどIFTTTではできず、複数のZapをかませたいなどZapierではないとできないサービスや処理がある。

また、個人としても法人としても「同系統サービスはなるべく一つのサービスで済むなら集約させたい」という思いもあり絞っていました。

Integromatの利用

Integromatは去年から見ていたのですが、いまいち使いたいサービスがなく、すでにIFTTT、Zapierで組んでいたのでスルーしていました。 ZapierやIFTTTに感じていた2つのストレス、「視認性の悪さ」、「ちょっとしたことですぐに処理を挟む必要性」、「Zapierの課金の高さ」を解消できそうなので、Integromatも用いてみました。

用途 メイン サブ
個人 Integromat -
会社 Integromat -

ただし、3日使ってみて Basic($9課金)もした結果、メインをIntegromatにすることはやめてIFTTT/Zapierと併用しています。

用途 メイン サブ
個人 IFTTT Integromat
会社 Zapier Integromat

f:id:guitarrapc_tech:20180723002148p:plain

www.integromat.com

利用サービスが増えましたが、IFTTT/Zapierでできなかったことを任せられるので、用途を定めればいいかと判断しました。*4

Integromatの強さ

Integromatは、かなり理想的なサービスと思っています。 特に次のポイントを評価しています。

  • ifがなどのフィルタ時でもシナリオのUIが分かりやすい*5
  • 組み込みのパーサーや配列ハンドリングがある
  • 実行分だけとすると無料で1000op/monthという破格さ
  • 課金もBasic $9~とZapierより安い
  • Google SpreatSheetへの書き戻しなど処理が強力

非エンジニアから、シナリオUIが可愛い、理解しやすいと高評価だったことも好ましいと思っています。Zapierは繋ぐとカオスなのですごくいいですね。

↓は2つのmoduleをつなぐUIですが、可愛さです。

f:id:guitarrapc_tech:20180723010054p:plain

Integromatをメインにしない理由

Integromatをメインからサブに戻した理由は、「実際に処理の必要な更新がなく、実行しない場合でもオペレーションが消費される」という特性を使って気付いたからです。 ZapierやIFTTTは、対象サービスの対象処理が実行された時にだけ「Zapなどのオペレーションを消費」するのに対して、Integromatは「スケジュール実行でポーリングする場合、実行されていなくてもスカシ実行でもオペレーションを消費」します。 計算すると、Integromatは通常の15分に一度のスケジュールでも96op/day 消費します。*6 15分スケジュールだと、無料アカウント(1000op/month)でひと月持たず、Basic(10000op/month)でも3ジョブ程度でしょう。「InstantやWebhookがない」けど「高頻度スケジュールで実行したい処理」はIntegromatにあまり向いていないと判断しました。*7

実際に使い始めてオペレーションを消費している原因を把握して、構成を組みなおすまでのOperation消費は次の通りです。

f:id:guitarrapc_tech:20180723005852p:plain

4シナリオで15分頻度スケジュールを実行した結果、一日で388使っているのが分かります。*8

f:id:guitarrapc_tech:20180723005925p:plain

例えば、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 は次の構成です。

f:id:guitarrapc_tech:20180723034152p:plain

回答先のスプレッドシートを設定しておきます。

f:id:guitarrapc_tech:20180723034227p:plain

結論どれで組むといいのか

ZapierかIFTTTがおすすめです。

この記事の用途でIntegromatは向いていません。理由は先述の通りです。

ただし、Webhook経由でトリガーが発動して、SpreadSheetに書き込み、Slackに通知、Twitterにポストを行って.... など、InstantなTriggerを起点に処理が実行されるならIntegromatが最高です。

Integromat

シナリオは、Google Forms -> Slackをつなぎます。

f:id:guitarrapc_tech:20180723033751p:plain

まずは、Google Forms モジュールを選択します。

f:id:guitarrapc_tech:20180723034335p:plain

Google Forms Moduleは、SpreadSheetの更新を検知させることができます。

f:id:guitarrapc_tech:20180723033945p:plain

フォームと回答のスプレッドシートにアクセスできるGoogleアカウントで接続し、ファイルとワークシートを選択します。

f:id:guitarrapc_tech:20180723034443p:plain

行は全てでいいでしょう。Formsからの自動生成なら先頭行はカラム名のはずです。

f:id:guitarrapc_tech:20180723034930p:plain

次はSlack通知をつなげます。Add another module でSlackをつなげましょう。

f:id:guitarrapc_tech:20180723034621p:plain

Create a messageでメッセージを送れます。Create a Postだとリンク先に飛べなかったのでMessageでいいかと思います。

f:id:guitarrapc_tech:20180723034742p:plain

あとはメッセージを送るChannelとメッセージを組みます。どのような値が来るかは、直前のGoogle Forms ModuleからのFetchによって可視化されています。

f:id:guitarrapc_tech:20180723035031p:plain

f:id:guitarrapc_tech:20180723035438p:plain

メッセージを作るときには、Text、Math、Date、配列操作、Parseなど強力な関数が用意されているのでZapierのような関数を組む必要がほぼありません。

f:id:guitarrapc_tech:20180723035135p:plain

f:id:guitarrapc_tech:20180723035155p:plain

一度保存します。

f:id:guitarrapc_tech:20180723035520p:plain

試しに今の回答でSlackに飛ばします。Run Onceしてみましょう。

f:id:guitarrapc_tech:20180723035533p:plain

それぞれのModuleに処理数が表示されます。

f:id:guitarrapc_tech:20180723035558p:plain

今回はスプレッドシートに回答がすでに4行あり、Google Forms Moduleの設定時に一度に2行処理するように設定していました。 そのため、Google Forms は1度の処理ですが、Slack Moduleは2度処理されて2つの回答がポストされています。

こういった詳細もわかるのは神ですね。

f:id:guitarrapc_tech:20180723035825p:plain

f:id:guitarrapc_tech:20180723035855p:plain

Slackを確認すると2つメッセージが送られていることが分かります。

f:id:guitarrapc_tech:20180723041656p:plain

あとは確認頻度スケジュール設定です。Integromatは、Zapier/IFTTTと違ってScheduleにInstantがない限りは定期的に実行します。(そしてOperationを消費します)

f:id:guitarrapc_tech:20180723040030p:plain

回答があるたびに実行をなるべく早く送信したいなら、Scheduleを短くすることになりますが、Operationが激しくなるのでものを選ぶのがここです。

f:id:guitarrapc_tech:20180723040115p:plain

Activate にすれば有効になります。

f:id:guitarrapc_tech:20180723040208p:plain

以上で、Integromatの設定は完了です。

ちなみに、Slack送信時にShow Advanced Settings でBotのアイコンや名前などいろいろ調整できます。

f:id:guitarrapc_tech:20180723041016p:plain

Zapier

Zapierの場合は次のように組めます。

Trigger Apps に Google Forms を選択します。

f:id:guitarrapc_tech:20180723040350p:plain

New Responseを選択。

f:id:guitarrapc_tech:20180723040416p:plain

接続するGoogle アカウントを認証してTestします。

f:id:guitarrapc_tech:20180723040456p:plain

f:id:guitarrapc_tech:20180723040522p:plain

トリガー対象のスプレッドシートとワークシートを選びます。

f:id:guitarrapc_tech:20180723040605p:plain

これで完了なので、Fetchして接続を試します。

f:id:guitarrapc_tech:20180723040620p:plain

f:id:guitarrapc_tech:20180723040642p:plain

トリガーを受けたら処理するActionは「Slackへメッセージ送信」です。Slackを選びましょう。

f:id:guitarrapc_tech:20180723040719p:plain

Channel Messageを送ります。

f:id:guitarrapc_tech:20180723040823p:plain

Slackとの接続をテストします。

f:id:guitarrapc_tech:20180723040840p:plain

f:id:guitarrapc_tech:20180723040849p:plain

Slackのメッセージを作ります。Integromat とは選べる内容が異なりますね、行やURLは取れません。*9 送信先のURLはZapierにテキスト埋めなの何とかならないでしょうか。

f:id:guitarrapc_tech:20180723041123p:plain

f:id:guitarrapc_tech:20180723041305p:plain

さぁ、ではテスト実行してみましょう。

f:id:guitarrapc_tech:20180723041326p:plain

Slackに送れていますね。

f:id:guitarrapc_tech:20180723041814p:plain

名前を付けてZapをOnにすれば完了です。

Zapierは、処理が縦に並ぶため複数のStepを組んだ時にどんな流れになるのかが見にくいのかが良くなるといいですね。

IFTTT

IFTTTの場合は、Google Formsではなくスプレッドシートで作成します。

f:id:guitarrapc_tech:20180723042039p:plain

新しい入力検知なので、New row added to the spreadsheetです。

f:id:guitarrapc_tech:20180723042053p:plain

パスかURLでシートを選択します。

f:id:guitarrapc_tech:20180723042245p:plain

あとはthatを選んで、Slackにポストします。

f:id:guitarrapc_tech:20180723042312p:plain

f:id:guitarrapc_tech:20180723042321p:plain

f:id:guitarrapc_tech:20180723042330p:plain

文章を適当に作りましょう。

始めからある程度いい感じの文が入っています。

f:id:guitarrapc_tech:20180723042445p:plain カラムはプレビューできません。

f:id:guitarrapc_tech:20180723042436p:plain

保存しましょう。

f:id:guitarrapc_tech:20180723042506p:plain

Check now で実行をテストできます。

f:id:guitarrapc_tech:20180723042526p:plain

適当にRowを追加してから実行するとSlackにメッセージが連動します。

f:id:guitarrapc_tech:20180723044214p:plain

これで完了です。

まとめ

Google App Script でコード書いて、という処理に比べるとコーディングがない上にUXがある程度定型化しているのとストレートフォワードなのが分かります。

「誰でもこのような自動化が組め、何かを自動化できそうと気づいたら5分もかからずサクッと組める。」

この良さは、プログラミングをする理由と同様だと思います。 例えプログラミングができなくても、普段「何かをtriggerに手作業で行っていた単純な作業」は自動化できます、誰かにお願いせずとも自分で組める環境は非常に重要です。

もしも簡単に条件付けできるなら、それもZapierやIntegromatで自動化フローに載せられます。*10

例えば、Integromatなら質問1が「オプション 1」の場合はXXXX処理、違うならZZZZもFilterとRouterで簡単です。

f:id:guitarrapc_tech:20180723043144p:plain

ぜひ、普段の提携作業を自動化してしまって、本当にやりたいことをやってください。この記事がそのきっかけになれば幸いです。

*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の方が簡単に組めます