SlackコマンドでAirtableを検索する

SlackコマンドでAirtableを検索する

Integromat日本コミュニティのSlackに、検索アプリのプロトタイプを導入しました。

検索アプリの内容は「SlackコマンドからAirtableを検索し、チャットに返信する」というものです。これをSlackコマンドとIntegromatを連携して実装しています。

実際のフローは以下のようになります。

  1. ユーザーはSlackコマンドに検索ワードを渡す
  2. SlackアプリはIntegromatのWebhookにデータを渡す
  3. IntegromatはAirtableにデータを渡す
  4. AirtableはSEARCH()関数で検索する
  5. Airtableは検索結果をIntegromatに返す
  6. Integromatは検索結果をまとめてSlackに返す
  7. Slackは検索結果をチャネルに返す

これによって、ある種の「カーム・テクノロジー」の実装が可能となります。ちょっとカッコつけ過ぎではありますが、マルチタスクやマルチアプリを避けて、Slackで行動を完結させることが可能になります。

(Airtableだけでなく、Googleシートや検索APIを持つSaaSも同じです)

このような処理を非エンジニアがプログラミングを学んで実装しようとすると、どのくらいの労力と時間がかかるのでしょうか。ここが、ラクを極める自働化、カーム・テクノロジー、プロトタイプの高速開発などにつながっていきます。

とはいえ、ノーコード実装にはデメリットもあります。

今回の例でいうと、Slackコマンドそのものをチャネルに公開することができませんでした。また、Slackアプリのパラメター「レスポンスタイプ」を設定することができません。

仮に、レスポンスタイプや他のパラメターを設定できたとして、Webhookで受けたデータを処理して、Webhookレスポンスで返却すると、SlackチャネルにJSONが投稿されてしまいます。

(コードで実現できることがノーコードだとできない、となります)

このような不便さと「かゆいところに手の届かない孫の手」感はあります。しかし、本質的な目標は達成できます。また、フロー全体を変えてしまうことにより、より使いやすいアプリにすることも可能です。

その場合、ユーザーストーリー(期待値)はそのままで、ユースケース記述を変えるような変更になります。今回の例でいうと、チャネルにこだわらず、Slackbotで個人へのDMにすることが最もラクでカンタンな解決策となりえます。

ここからは、実装や技術的な内容です。

Airtableに格納されているデータですが、これはIntegromatの関数リファレンスです。文章による簡潔な解説と、動画による解説をセットにしたインデックス・テーブルです。

Screenshot 2021-06-04 at 12.54.40 PM.png

特に高度な設定はしていません。文章・リンク・ドロップダウン・日付(自動)で構成された、スプレッドシート的なテーブルです。

ポイントは、文章による解説をMarkdown形式で記述していることです。このままSlackにデータを渡すと、基本的にはそのままMarkdown設定が反映されるようになっています。

(ここはHTML記述にしておき、IntegromatでMarkdown変換することも可能です)

次に、シナリオの構成です。

Screenshot 2021-06-04 at 12.54.56 PM.png

これは本当にシンプルです。プロトタイプなので、エラー処理を入れていませんが、どちらにしても、シナリオはシンプルにしておくことが推奨されます。

目安は、ひとつのシナリオに10モジュール(分岐含む)です。

実装のポイントは、Airtableがイテレーターの役割を果たし、アグリゲーターがそれをまとめているところです。この実装によって、複数投稿をひとつにまとめることが可能になります。

さらに、Airtableとテキスト・アグリゲーターの間にある、Switchモジュールによって、条件分岐を実装しています。この場合は「検索結果がゼロと、それ以外」を指します。

通常、濃いグレーで囲われているループ処理の中に、ルーターを入れることはできません。入れてしまうと、条件通りに動かなくなります。

その場合、Switchモジュールを使うことで、いわゆる「caseごとに振る舞いを変える」とか「ifとelif」の実装が可能になります。ただし、テキストベースの入力で出力を変えるという条件付きです。

以下は、Switchモジュールの実装詳細です。

Screenshot 2021-06-04 at 12.55.21 PM.png

この分岐では、Airtableをイテレーターとして捉え、検索結果(つまりバンドル)の数によって、出力を変えています。この方法を使うと、ルーターとフィルターによる分岐が使えない場所でも、条件分岐を実装することが可能になります。

今回は、ノーコードで実装するSlackアプリをご紹介しました。

Slackアプリを作成したり、スラッシュ・コマンドを設定することはカンタンです。

ただし、設定項目がアチコチに分散していたり、ドキュメントが散財しているので、技術的でないところにハードルはあります。

また、そこから先の処理、つまり実際のロジックはIntegromatを使うとラクできるということもわかりました。

ただし、こちらも細かい設定や実装ができないこともあります。その場合、アプリの振る舞い自体を変えたり、ワークフローを微調整することで対応します。

このようなミニアプリを開発するメリットは、アナログのフローをそのままデジタル化せず「知恵を絞れるようになる」ということです。これからのデジタル化・自働化・効率化への小さな投資になります。

実際に動くものを確認されたい場合は、Integromat日本コミュニティのSlackに参加いただくと、誰でも試せるようになっています!

ノーコードで自動化を!

Integromat日本コミュニティへの参加はこちらから