コンテンツまでスキップ

【Zapier】Slackから呼び出すルーレットアプリを作ってみた

はじめに


ネクストモードの南です。

ネクストモードではZapierを社内の業務効率化に役立てています。
今回はZapierを使ってSlackから呼び出しができるルーレットアプリを作ってみましたので、紹介をしていきたいと思います。

目次

経緯


ネクストモードでは社内業務やイベントなどで担当決めが必要になった場合、ルーレットアプリなどを使ってランダムに決めることがカルチャーになってます。
ルーレットで決めるのは公平感もありますし、自分になった時のためにちゃんと話に参加しておこうという気持ちにもなるので、良い施策だと思っています。
(もちろん業務都合などでパスすることもできます。ルーレットの話はこちらのブログでも紹介しています。)

これまでは無料で使えるWebアプリのルーレットを使っていたのですが、サイトを開いたり結果の画像をSlackで共有するのがちょっと手間でした。
そのため、もう少し使いやすいツールを探してみたり、独自で実装してもいいよね、というような声が社内であがっていました。

相談

そこで、どうせなら作ってしまおうということで社内のタスクフォースを立ち上げました。
要件はそこまで細かく詰めませんでしたが、とりあえず以下が実現できるように検討を進めていきました。

  • 結果がそのままメンバーに共有できるように、Slackに結果を通知したい
  • 実行もSlackからできるのが理想
  • いろんな場面で使えるように、対象者はその都度変えられるようにしたい

アプリの概要


Google Apps ScriptやAWSのサービスを組み合わせることも検討したのですが、最終的にはシンプルにSlackとZapierの連携のみで実装しています。

概要

使い方としては、「ルーレット」というキーワードを1行目に入れて、その下に対象者の名前を記載してルーレット用のチャンネルにメッセージを投稿します。
対象者の名前は一人一人改行して記載します。

使い方1

しばらくすると、Slack Botから抽選結果のメッセージが送付されます。

使い方2

当初上がっていた要件もクリアできており、使い勝手の良いアプリになったかなと思っています。

ワークフロー


Zap(Zapierで作成したアプリ)のワークフローは以下のようになります。
ステップを複数持つZapとなるため、Zapierで有料プランの契約が必要になることをご留意ください。

ワークフロー

1.の[New Message Posted to Channel in Slack]がワークフローのトリガーとなっており、指定したSlackチャンネルにメッセージの投稿があった場合にZapが起動します。

2.の[Only continue if...]では、投稿されたメッセージが処理の対象になるか条件判定をしています。
今回はメッセージの中に「ルーレット」というテキストがあった場合は後続の処理を続け、条件に合致しない場合は処理を終了する、という動作にしています。

3.と4.の[Text in Formatter by Zapier]では、投稿されたメッセージを整形しています。
3.では余分なテキストを排除し、4.ではルーレットの対象者をリスト化する、という処理をしています。

5.の[Utilities in Formatter by Zapier]では、4.で作成した対象者のリストから、ランダムに1名を選択する、という処理をしています。

6.の[Send Channel Message in Slack]では、5.の結果を含めたテキストメッセージを作成し、指定したSlackチャンネルにメッセージを投稿する、という処理をしています。

構築手順


ここからは構築手順を紹介していきます。

1. Slack側の準備

まずはSlack側でルーレット実行・通知用のチャンネルを作成します。
今回はtest-rouletteというパブリックチャンネルを用意しました。

slack1

  • 補足
    専用のチャンネルを用意しなくても問題ありません。
    ただし、Zapのトリガーを「Slackチャンネルのメッセージ投稿」としているため、Zapの実行回数を抑えるために専用のチャンネルを作成することをオススメします。

テスト用として以下のメッセージを対象のSlackチャンネルに投稿します。

  • テスト用メッセージ
    ルーレット

    田中
    加藤
    山本

slack2

2. Zapierの設定手順

2-1. トリガーの設定

まずはZapのトリガーの設定をしていきます。

Zapierにログインしたら、左ペインの[Zap]をクリックし、Zapの格納先となるフォルダーを選択したら[Create][New Zap]の順でクリックして新しいZapを作成します。

トリガー1

Zapの作成画面になったら、まずは左上の設定でZapの名前を入力しましょう。

トリガー2

トリガーを選択します。
今回はSlackチャンネルでの新規メッセージ投稿をトリガーにしたいので、[Slack]を検索して選択します。

トリガー3

[Event]の項目ででプルダウンから[New Message Posted to Channel]を選択し、[Continue]をクリックします。

トリガー4

[Slack account]の項目で対象のSlackのワークスペースを選択して[Continue]をクリックします。
※対象のSlackワークスペースが表示されない場合はこちらの備考の内容をご確認ください。

トリガー5

以下のように項目を選択し、[Continue]をクリックします。

  • Channel:ルーレット実行・通知用のSlackチャンネル
  • Trigger for Bot Messages?:No

トリガー6

  • 補足
    Channelの項目でSlackチャンネルが表示されない場合は、以下のように入力します。
    トリガー7

[Test trigger]をクリックします。

トリガー8

対象のSlackチャンネルからメッセージが取得できていることを確認します。
プルダウンで取得したメッセージを確認できるので、ここから事前にテストで投稿したメッセージを探します。
テストで投稿したメッセージを選択したら、[Continue]をクリックします。

トリガー9

  • 備考:ZapierとSlackのワークスペースのコネクトが未実施の場合、コネクトを実施する必要があります。
    • [Slack account]の項目で対象のSlackのワークスペースがない場合、[Connect a new account]をクリックします。
      (または、コネクトが1つもない場合は[Sign in]という表示をクリックします。)
      トリガー10
    • 別画面でSlackワークスペースへのリクエストウィンドウが開かれます。
      右上のプルダウンから対象のワークスペースを選択し、[許可する]をクリックします。
      (対象のワークスペースが表示されない場合は、プルダウンから[別のワークスペースを追加する]を選択し、ワークスペースへのログイン処理を行います。)
      トリガー11
    • 元の項目に戻り作業を継続します。

2-2. 条件判定の設定

続いて条件判定の設定を進めていきます。

Actionの選択画面で[Filter by Zapier]を検索してクリックします。

条件判定1

[Filter setup & testing]の画面で、以下のように入力をして[Continue]をクリックします。
投稿されたメッセージの中に「ルーレット」というキーワードが入っている場合に処理を続ける、という条件にしています。
(条件に合致しない場合はここで処理を終了。)

  • フィルター処理の対象:[1. Text]
  • 判定:(Text)Contains
  • キーワード:ルーレット

条件判定2

[Your Zap would have continued]という表示が確認できたら、[Continue]をクリックします。

条件判定3

2-3. メッセージの整形①

続いて、投稿されたメッセージの整形処理を追加していきます。

Actionの選択画面で[Formatter by Zapier]を検索してクリックします。

メッセージの整形1-1

[Event]の項目から[Text]を選択して[Continue]をクリックします。

メッセージの整形1-2

以下のように入力して[Continue]をクリックします。
投稿されたメッセージから「ルーレット」というキーワードを削除する、という処理になります。

  • Transform:Replace
  • Input:[1. Text]
  • Find:ルーレット
  • Replace:空欄のまま何も入力しない

メッセージの整形1-3

[Test Action]をクリックし、[output]の結果でメッセージから「ルーレット」のキーワードが削除されていることを確認します。
[Close]をクリックしてアクションの編集を閉じます。

メッセージの整形1-4

2-4. メッセージの整形②

もう一つメッセージの整形処理を追加していきます。

3.の処理の後に追加するので、3.のアクションの下の[+]マークをクリックします。

メッセージの整形2-1

3.と同様にActionの選択画面で[Formatter by Zapier]を検索してクリックし、[Event]の項目から[Text]を選択して[Continue]をクリックします。

メッセージの整形2-2

以下のように入力して[Continue]をクリックします。
3.の処理のOutputに対し、半角スペースをセパレーターにしてテキストを分離して、リスト形式で出力する、という処理になります。

  • Transform:Split Text
  • Input:[3. Output]
  • Separator:半角スペースを入力
  • Segment Index:All (as Line-items)

メッセージの整形2-3

[Test Action]をクリックし、[output]の結果で対象者がリスト形式で表示されていることを確認します。
[Close]をクリックしてアクションの編集を閉じます。

メッセージの整形2-4

2-5. リストからランダムに1つのアイテムを選択

4.で作成したリストから、ランダムに1つのアイテムを選択する、という処理を追加していきます。

4.のアクションの下の[+]マークをクリックして、アクションを追加します。
続いて、Actionの選択画面で[Formatter by Zapier]を検索してクリックし、[Event]の項目から[Utilities]を選択して[Continue]をクリックします。

アイテム選択1

以下のように入力して[Continue]をクリックします。
4.で作成したリストから、ランダムに1つのアイテムを選択する、という処理になります。

  • Transform:Pick from list
  • Operation:Choose Random
  • Input:[4. Output]

アイテム選択2

[Test Action]をクリックし、[output]の結果で対象者のリストから1つのアイテムが選択されたことを確認します。
(ランダムに選択されるので、[Retest action]を実行すると結果が変わることも確認できます。)
[Close]をクリックしてアクションの編集を閉じます。

アイテム選択3

2-6. Slackチャンネルにメッセージを投稿

最後に、Slackチャンネルに結果のメッセージを投稿する処理を追加していきます。

5.のアクションの下の[+]マークをクリックして、アクションを追加します。
続いて、Actionの選択画面で[Slack]を検索してクリックし、[Event]の項目から[Send Channel Message]を選択して[Continue]をクリックします。

メッセージ投稿1

[Slack account]の項目で、1.の処理と同様のSlackワークスペースを選択して[Continue]をクリックします。

メッセージ投稿2

以下のように入力して[Continue]をクリックします。
今回は以下の項目以外はデフォルトにしていますが、好みに合わせてカスタマイズしてみてください。

  • Channel:[1. Channel Id]  ※選択の仕方は後で補足
  • Message Text:ルーレットの結果、[5. Output]さんに決まりました!
  • Send as a bot:Yes
  • Bot Name:ルーレット
  • Include a link to this Zap?:No

メッセージ投稿3

  • 補足:SlackチャンネルIDの選択の仕方
    [Custom]タブをクリックし、検索フィールドから[1. Channel Id]
    を検索してクリックします。
    メッセージ投稿4

[Test Action]をクリックし、ルーレット実行・通知用のSlackチャンネルにメッセージが投稿されたことを確認します。

メッセージ投稿5

問題なければ[Publish Zap]をクリックします。
続けてウィンドウが表示されるので、[Publish & Turn On]をクリックします。
これで作成したZapがリリースされました。

メッセージ投稿6

メッセージ投稿7

3. テスト

実際にテストをしてみます。

作業のはじめにテストとして投稿していたメッセージを、ルーレット実行・通知用のSlackチャンネルに再度投稿してみます。
しばらくするとルーレットのSlack Botから結果のメッセージが投稿されました。

テスト1

抽選はランダムなので、投稿のたびに結果が変わることも確認できます。

テスト2

まとめ


今回は社内で使えるルーレットアプリを紹介させていただきました。

ZapierはいろんなアプリケーションやSaaS製品と連携させることができ、シンプルな要件であればノーコードで実装することができます。
繰り返し発生する業務を自動化させることはもちろんですが、アイディア次第で今回のようなカルチャー寄りの施策にもつなげることができます。

ネクストモードは社内のいろんな場面でZapierを活用させていますので、今後も有用な取り組みは紹介していきたいと思います。