Slack Workflow Builder でリリース承認フローの自動化をやってみる

こちらの記事は、アソビュー! Advent Calendar 2024の19日目(裏面)です。

はじめに

こんにちは!アソビューでエンジニアをしている白井です。

今回は Slack Workflow Builder の利用例の一つとして、リリースの承認フローを自動化したものをご紹介したいと思います。

現状の課題

現在所属しているチームで何かリリースを行う場合は、以下の承認とテストまでのフローが必要でした。

  1. リリース手順書の作成
  2. リリース手順書の承認依頼
  3. (マネージャー)リリースの承認
  4. リリース予定の全体連絡
  5. 毎日実施する日次リグレッションテストの実施連絡

以上のやりとりを Slack 上で行っていたのですが、以下のような課題がありました。

  • 承認状況が分かりづらい
    スレッド内のメッセージが増えると、何が承認されていて、何が保留中なのか一目で把握できない。取りこぼしが起きやすい。
  • リリース対象の把握が困難
    リリース対象がある場合に日次リグレッションテストをする際、当日のリリースするものあるのか、具体的に何がリリースされるのかが分かりづらく、都度リリース承認メッセージがあるかないか探す必要がある。

今回は、こちらの (2) ~ (5) までをワークフロー化するために Slack Workflow Builder の導入を検討しました。

なぜ Slack Workflow Builder を使ったのか?

Slack Workflow Builder とは、Slack 内で手動または繰り返し行われる業務やプロセスを自動化するためのツールです。プログラミングの知識がなくても簡単に設定できるのが特徴で、ボタン操作だけでワークフローを作成できます。

すでに自分で何度か使ったことがあったのも理由の一つですが、今回は以下の理由で採用することにしました。

  • チーム全体が慣れているプラットフォーム
    Slack が既に日常業務で使われており、新しいツールの学習コストが発生しない。
  • すばやく実装可能
    他のサービス登録などが不要で、UI 自体もわかりやすく、短時間で実装することができる。
  • リスト機能との連携の容易さ
    簡易的なデータを蓄積するための Slack のリスト機能と組み合わせやすい。

Slack Workflow Builder を使った「リリース承認ワークフロー」の作成

それでは、Slack Workflow Builder を使用して作っていきたいと思います。具体的な利用方法については、公式チュートリアルをご確認ください。

リリース承認依頼ボタンの作成

まずは、毎日リリース承認スレッドの作成のためのメッセージを作成し、メッセージに承認依頼ボタンを設置します。

ボタンには以下の設定を加えることができます。

  • ボタンの無効化
    一定時間経過すると、ボタンが無効化される。
  • ボタンを押せるユーザーの制限
    ユーザーやユーザーグループを対象に、ボタンを押すことが可能なユーザーを制限できる。
  • ボタン押下回数制限
    一回しかおせないボタンか、何度でも押せるボタンかを選べる。

誤ってボタンが押されてしまうことを防ぐために、設定しておくとよいでしょう。

依頼フォームの作成

ボタンを押した時に表示されるフォームを作成します。リリース手順書のリンク、リリース時間など必要なフィールドを追加しておきます。

スレッドに承認依頼の内容を投稿

フォームに入力してもらった内容を、リリース承認依頼スレッドに投稿します。「Insert a Variable」を使うことで、ここまでのワークフローで入力した値などが変数として利用できますので、必要なものを設定していきます。

承認ボタン

こちらのメッセージには「承認」ボタンを追加しますが、必ず承認できるユーザーは制限しておきます。そして何回も承認できては困るので、一回に制限しておきます。

ボタンの注意点

ボタンは、ワークフローを 却下 ということができません。

Slack Workflow Builder によるボタンは「押されたら次のステップに進む」ことしかできず、そこでワークフローを終了することはできません。またワークフローで投稿した Slack Bot メッセージを削除することはできません。

そのためボタンによって何らかのメッセージが投稿されるような場合、やり直しが効きかないので、誤ってボタンが押されてしまった際にどうなるか、ということも念頭に置いておきましょう。

リストへの追加

承認と同時に Slack のリストにも追加しておきます。こういったフォームで投稿した内容をリストに追加しておくと、データとして蓄積できるので後々便利かもしれません。

チェックボックスの内容をリストのチェックボックスに反映する

フォームのチェックボックスの ON/OFF の内容を、リストのチェックボックスフィールドに反映させる場合は、適当な文字列では反映させることができません。

チェックボックスの選択値を true もしくは 1 と設定すると、チェックされていればリストのチェックボックスフィールドに true を反映させることができます。

承認連絡

「承認」ボタンを押されても、依頼者に通知されるわけではありません。承認されたことに気づくことができないので、承認後は Slack Bot から依頼ユーザーへ DM を送信させます。

そして課題の(4)にあたる「リリース予定の全体連絡」を自動にするため、このメッセージには「全体連絡ボタン」を設置し、特定のチャンネルに内容を送信させます。

こちらを自動送信にしてもよかったのですが、間違った内容が承認され、間違った内容が自動投稿されることを防ぐためにあえてボタンにして、ワンアクション加えています(間違った内容が承認されること自体が問題かもしれませんが...)。

日次テストの依頼

現在所属しているチームでは毎日指定の時間にリグレッションテストを行っています。もちろんリリースするものがなければ行う必要がないので、リリースするものがあるかどうかを確認する必要があります。ここで先ほど作成しておいたリストの出番です。

本日のリリースがあるかどうかをリストで検索して、リスト内に対象が存在する場合のみリマインダーを送信したいところですが、Slack Workflow Builder では「特定の条件でリストを検索し、結果が1以上なら投稿する」といった条件分岐のようなことはできませんでした。

そのため、今回は「本日リストに追加されたもの」の条件でリストのビューを作成し、そのビューのリンクを Slack Bot のメッセージに貼り付けることで「本日のリリース一覧」を見れるようにしました。

リストにアイテムがある(= 本日リリースするものがある)状態

幸い、リストリンクはメッセージ内でプレビューが表示されるため、一目でリリース対象があるかどうかがわかるようになり、「リリース対象の把握が困難」という課題が解決できました。

これで、今回の課題の(2)~(5)までをワークフロー化することができました!🥳

未承認リスト

最後に、承認されていないものを一覧で確認できるようにするため、承認後にリストの「Approver」フィールドに承認者のユーザーを追加するように改修し、さらにリストの方で「Approver(承認者)が未設定のもの」でフィルタリングしたビューを作成します。

これで、未承認の依頼を一覧で確認できるようになり、「承認状況が分かりづらい」という課題が解決できました。

まとめ

良かった点

  • 手軽に扱える
    今回は Slack Workflow Builder のメッセージまわりを特に活用しましたが、UIがわかりやすかったことや、条件分岐などがないので、エンジニアでない方でも簡単に実装できると思います。
  • リストとの連携が簡単
    フォームの内容をリストに追加するのが容易にできました。ちょっとしたデータベースとしてリストを活用できそうです。

惜しい点

  • 条件分岐やループ処理が不可能
    Slack Workflow Builder は条件分岐やループができません。特に条件によってメッセージの出しわけができる機能があればなあと思いました。
  • Slackリストの取得が難しい
    リストの取得機能について、「複数のアイテムを取得できるような条件」を指定して、その次のステップでリストの内容を表示させても「最初の1つ目のアイテム」の内容しか参照できません(そのため実質1つに絞れるような条件でないと扱いづらい)。これがループ処理ができたり、合致したアイテムの特定のフィールドを全て表示、などできると色々な要件で活用できそうです。

以上、Slack Workflow Builder の活用例のご紹介でした。今回は Slack 内で完結させましたが、Google Spreadsheet など外部のアプリケーションと連携させて、どんなことができるのか模索していこうと思います。

みなさんも、普段煩雑に感じている業務があれば、ぜひ Slack Workflow Builder での自動化を検討してみてください!

最後に

アソビューでは、一緒に働くメンバーを大募集しています!カジュアル面談も実施しておりますので、少しでもご興味をお持ちいただけましたら、ぜひお気軽にご応募ください! www.asoview.co.jp