Slack ワークフローをさわってみた

この記事は [クラウドワークスアドベントカレンダー2019](https://qiita.com/advent-calendar/2019/crowdworks) 14日目の記事です。
昨日は @ac_kimura による 「[人事の思い出でも語ろうか。](https://engineer.crowdworks.jp/entry/2019/12/13/070000)」 でした。

クラウドワークスでマネジメントをしてる @oura です。最近はほとんどコードを書いてないですが、まれに [クラウドテック](https://crowdtech.jp/) [^1] というサービス のインフラを触ったりしてます。そしてエンジニアリングブログへの投稿も実に約3年ぶり、、ということでお手柔らかにお願いします！

[^1]: 【PR】クラウドワークスの運用する、エンジニア、デザイナーさんを中心に[お仕事を紹介するサービス](https://crowdtech.jp/)です。ご興味ありましたらまずはご登録を！ 

本記事のタイトルはもはや何番煎じかわからないのですが、主にワークフローの使い方の詳細というよりも、試してみての考察や設定におけるポイントなどを中心に取り上げているため、エンジニアはもちろんですが、エンジニアでない方にも参考にしてもらえれると幸いです。 特に、この Slack のワークフローについて目にしたことはあるけど、どういったサービスか分からず手を付けてなかったという方や、はたまた Slack を使ってて業務改善に興味があるといった方には是非読み進めていただき、導入の判断に活かしてもらえればと思います！ :)

# Slack ワークフローの使いどころは？

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9948/15864fff-e9be-d225-dda9-b4cfa6c96f1a.png" width="600" alt="Workflow builder sample image.">

まずは公式のアナウンス、 [ワークフロービルダーが新登場 : Slack で簡単にタスクを合理化](https://slackhq.com/intl-ja-jp-automate-tasks-in-slack-with-workflow-builder) の冒頭をのぞいてみましょう。

> 協力してプロジェクトを進めるには、リアルタイムで適切な担当者に適切な情報を届けることが欠かせません。にもかかわらず、申請を行ったり、進捗状況を尋ねたり、チームメンバーに関連情報を伝えたりといった手続きは手間のかかるものばかり。これがプロセス全体のボトルネックとなることもままあります。

ワークフローの解決したい課題は、 `人と人とのコラボレーション部分` だということがわかります。
上記文中にもいくつか例がありますが、続いて  [ワークフローの例](https://slack.com/intl/ja-jp/slack-tips/workflow-builder-examples) を見てみますと、この一覧からも、何かをトリガーとして一気通貫で処理を完了させるといった類いのものではないことが見てとれます。

- [共有チャンネル横断のニーズを調整する (Coordinate needs across Shared Channels)](https://slack.com/intl/ja-jp/slack-tips/coordinate-needs-across-shared-channels)
- [繰り返しの進捗共有をシンプルに (Simplify recurring progress updates)](https://slack.com/intl/ja-jp/slack-tips/simplify-recurring-progress-updates)
- [チームメンバーに感謝する (Make it easy to give team shoutouts)](https://slack.com/intl/ja-jp/slack-tips/make-it-easy-to-give-team-shoutouts)
- [新規チャンネルメンバーの自動オンボーディング (Automatically onboard new channel members)](https://slack.com/intl/ja-jp/slack-tips/automatically-onboard-new-channel-members)
- [適切なチームへの素早いリクエスト (Quickly field requests for your team)](https://slack.com/intl/ja-jp/slack-tips/quickly-field-requests-for-your-team)
- [チームを超えた情報共有を簡単に (Make information sharing across teams easier)](https://slack.com/intl/ja-jp/slack-tips/make-information-sharing-across-teams-easier)
- [インシデントレポートをリアルタイムで収集 (Collect incident reports in real time)](https://slack.com/intl/ja-jp/slack-tips/collect-incident-reports-in-real-time)

*※ 執筆時点(2019/12/8)で日本語訳されてないので筆者が勝手に訳してます。*

# ワークフローについて

改めてですが、 `ワークフロー` について Wikipedia から引用します。

> ワークフロー（英: workflow）は、リソース（資源）を体系的に組織化した反復可能な業務活動のパターンである。ワークフローは、物質の加工、サービスの提供、情報の処理など、何らかの具体的意図をもって設計される。ワークフローは、例えば、操作の列、個人またはグループの定まった作業、従業員の組織、複数の機械の機構などで表現しうる。[^2]

[^2]: [https://ja.wikipedia.org/wiki/ワークフロー](https://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC)

このワークフローをナレッジマネジメントにおける [SECI モデル](https://ja.wikipedia.org/wiki/%E3%83%8A%E3%83%AC%E3%83%83%E3%82%B8%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88#SECI%E3%83%A2%E3%83%87%E3%83%AB) に当てはめて考えると、 以下のような関係になると考えられます。

- `連結化(Combination)`: ワークフローの設計 
- `内面化(Internalization)`: [ワークフロービルダー](https://slack.com/intl/ja-jp/features/workflow-automation)でワークフローを構築し、実際に組織内で継続的に使われるようになるまで

<img alt="SECI model." src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9948/4b3a8e2e-d8d9-d3ee-489f-479eddd47cc6.png" width="400">

組織運営をしていく中では、ここの内面化の難しさによく突き当たります。たとえ素晴らしいワークフローをつくっても、それが運用に根付かなかったり、根付いても時間の経過とともに廃れていったりします。みなさんも身に覚えがありませんでしょうか...？ ;)
Slack のワークフローは、 Slack 上のコミュニケーションに自然と馴染むかたちで実行できるのがうれしいポイントですね。

# Slack のワークフローを活用するには

Slack のワークフローを活用するには、何より、組織のメンバーがワークフローを使う文化を徐々に醸成していく必要がありそうです。というのも、ワークフローのトリガーとなるアクションメニューは通常使わなくても困るものでもないので、ワークフローを使う文化がないとそもそも存在さえ気づいてもらえなさそうだからです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9948/83fda12c-909b-9bf1-06f2-d566b967eb80.png" width="350" alt="Action menu.">


最初は情報共有の簡単なフォーマットなどを作成、展開して徐々に普及していったところで業務へも取り込んでいくというシナリオで進めてみましょう。
例えば、以下のようなシンプルな朝会用のフォーマットはどうでしょう？

<img width="400" alt="Daily scrum." src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9948/58b573de-3a62-63a2-f7d7-aaeb3e6a7a2c.png">

アクションメニューが表示されるチャンネルやフォームの中身、フォームに入力した内容の出力先とフォーマットを設定するだけなので、ほとんど時間を要しません。この中で一番時間がかかるのは出力フォーマットの装飾でしょうか。

<img width="400" alt="Create a form" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9948/6823bf4d-247a-c8a4-d8fe-74b74c0d9eed.png">

# ワークフロー設計時に工夫・注意が必要になりそうなこと

以下に、筆者がワークフローを実際に試してみた中で、気づいた工夫や注意が必要なポイントを挙げてみました。実際に試されないと伝わりにくいところがありそうですので、実際に試された後にまた読み返してみるとよいかもしれません。

- 情報が流れていくため、証跡が必要な場合はSlack外のメディアに残すよう促しましょう。
- 複雑な Slack のワークフローは設計をドキュメントとして残しましょう。ドキュメントがないと全体像を掴むのが困難なケースが発生し得えます。またドキュメント化しておくことで、ふりかえりや見直しに活用できます。
- ワークフローの流れの途中、時間を要する処理がある場合はワークフローを2つにわけると良いでしょう。そして1つめのワークフロー内で、2つめのワークフローを実行する流れを伝えておきます。
- 条件文を組めないので、場合分けが発生するポイントでワークフローを一度終わりとし、その後どのワークフローを実行するのか実行者に委ねると良いでしょう。

<img width="400" alt="Incident report sample." src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9948/5b510259-e984-b8ac-d47d-c72e64df2176.png">

# 最後に

このワークフロー機能、最初に触れた際は高機能な [BotKit](https://github.com/howdyai/botkit)[^3] などのチャットBotと比較してしまい、機能が不十分では？という印象をもったのですが、コンセプトを読み込んだときにその活かし方をようやく理解できました。そして、テクノロジー的に目新しいところは正直なかったのですが、目の付けどころが素晴らしいなと改めて感じました。
筆者は今後、社内でこのドキュメントを全社に周知し、興味を持った方向けにワークショップを開催ししてこの興味深いソリューションを展開していければと目論んでいます。
また、この記事をご覧になったみなさんへ！どういう使われ方をされていくのか興味がありますので、事例ができましたら、是非教えてください。最後まで読んでいただきありがとうございました！

[^3]: 今年の頭あたりに [Microsoft さんに買収されたニュース](https://blog.howdy.ai/xoxco-to-join-microsoft-ad128e5ed6e7)で驚きました。