🕌

SlackカスタムAppとAIでSlackリストをチームToDo管理に拡張する

に公開

この記事は、KNOWLEDGE WORK Blog Sprint第22日目の記事になります。

ナレッジワーク コーポレートITのハリールです。
最近Slackリストが持つポテンシャルを知り、個人・チームのToDo管理を現在進行形でSlackリストに寄せています。その中で得た知見をブログとしてまとめます。

はじめに

みなさん、こんなことありませんか?

  1. Slackでやり取りしている中でタスクっぽい話になったが、会話が流れてしまい後から探すのに苦労する
  2. タスク管理ツールを別途用意しているがSlackとの行き来が面倒で更新が追いつかない
  3. 終わってないタスクのリマインドコストが工数的にも心理的な意味でも高い

コミュニケーションツールはSlackだからこそToDo管理もSlackで完結できればと感じることは以前からありました。
そこで注目したのが日々進化しているSlackリストです。実際に使ってみると"これは使える!"という点と"これができたらもっといいのに"といった点が浮かび上がってきました。
特に個人ToDo管理だけではなくチームとしてのToDo管理までカバーしようとするとどうしても標準機能では賄えない部分があります。
そこでこの記事では、Slackリスト標準機能でできること/できないことを整理したうえで、不足をカバーするSlackカスタムAppの活用方法を紹介します。

Slackリスト標準機能のおさらい

SlackリストはSlack上でToDo管理ができる機能であり、2024年6月に正式リリースされました。

現時点でSlackリストが標準機能でできることは大きくは以下です。

機能/仕様 内容
テンプレート 空のリスト作成以外にもあらかじめ定義されたテンプレートから作成ができる
カスタムフィールド テキストや選択肢、日付などさまざまなカスタムフィールドが追加できる
ビュー形式の切り替え テーブル(表形式)かボード(カンバン形式)で表示を切り替えられる
ビューの追加 フィルタ条件を指定したビューを追加しURLから直接アクセスができる
サブタスク 1階層の親子関係を表現できる
履歴管理 リスト全体や個々のアイテムの変更履歴が確認できる
ワークフロー連携 Slackワークフロービルダーで操作が可能
リマインド Slackワークフローと組み合わせることで期限切れなどを自動リマインドが可能

標準機能ではまだできない課題

Slackリストで個人・チームのToDo管理を運用していく上で、標準機能で賄えない部分が大きく3つありました。

1. Slackメッセージから概要や期限を自動生成して登録

リストに登録するユースケースとしては最も一般的なのはSlackでのメッセージのやり取りからToDoとして登録するケースです。
ただ、現状のSlackの機能ではメッセージの内容を要約したり、対応期限を生成するといったことはできません。
SlackワークフローにもAIは組み込まれていますが、現時点ではチャンネルと期間を指定して要約することしかできません。

SlackのメッセージからスムーズにToDoを登録するためにはこの機能必須となるでしょう。(今後のSlackAIの進化に期待したい点です)

2. 担当者へのグループ単位でのアサイン

チームのToDoを管理しようと思うと例えばSlackグループを指定して全員にToDoを割り当てたくなります。
Slackリストの担当者にはデフォルトメンバーを指定できるので、そこで割り当てる方法もあります。
しかし、この方法では静的な指定でありグループメンバーが変更になる場合などは追随できませんし、複数名が担当に割り当てられる状態は誤操作でToDoが意図せず完了してしまうなど、事故につながるリスクもあります。

3. ビューの条件にサブタスクが指定できない

Slackリストはさまざまな条件でビューを作成したり、表示をグルーピングすることができますが、あくまでも親タスクが対象となります。
例えば、サブタスクにグループメンバーを割り当てて、マネージャーがメンバーの対応状況を確認・フォローしたいといった場合には現状のビューの条件設定では実現が困難です。

ではどうするか

現時点で無いのなら作りましょう。今回二つのSlackカスタムAppを作成し、functionとしてSlack ワークフローから呼び出せるようにしました。
なお、具体的なカスタムAppの実装・構築方法については Slack開発者プログラム を参照いただくとして、今回は抽象化した運用フローの紹介にスコープを当てています。

1. メッセージURLを元に要約と期限を生成するfunction

Slackワークフローで特定のトリガーでSlackメッセージをSlackリストに登録するケースでは簡単なメッセージの概要と期限に関する情報があれば自動で算出して設定したくなります。
そこでメッセージURLを引数として、そのメッセージ内容を要約し、そこから期限に関する情報があれば生成して返却するfunctionを用意しました(内部ではOpenAIなどの生成AIを利用しています)。

これで前述の "Slackメッセージから概要や期限を自動生成して登録" の課題に対応ができました。

2.Slackグループを指定してアイテムを複製するfunction

Slackワークフローではリストアイテムをグループに割り当てることも、グループメンバー数分ループ処理することもできません。なのでこれもfunctionとして用意しました。
将来的にカスタムフィールドが増えることなどを考慮すると、functionの役割は作成ではなく既存アイテムを複製するにとどめ、複製時に必要な属性のみ書き換える形とすることで保守性・拡張性が保てるようにしました

これで前述の "担当者へのグループ単位でのアサイン" の課題に対応ができました。

3. サブタスクをやめる

本来ならばチームタスクの管理方法としては親タスクがありそこにチームメンバーそれぞれがアサインされたサブタスクが紐づく形が理想的です(視認性など管理面でも)。
ただ、そうすることでSlackリストの利点であるビューの恩恵が受けられなくなります
ということでサブタスクはやめて、フラットにチームメンバー全員が親タスクに対してアサインされる形式に運用を変えることで解消しました。

こうしておくことで、担当者ごとのグルーピングもできますし、マネージャーとしてはメンバーの対応状況なども柔軟なビューのおかげで簡単に確認することができます。

これで "ビューの条件にサブタスクが指定できない" の課題に対応ができました。

運用イメージ

課題に対応した運用イメージをToDo登録・ToDoの確認・ToDoのリマインドの3つに分けて示します。

ToDo登録

ToDo登録のSlackワークフローは以下のイメージです。青色が今回SlackカスタムAppを用意した部分になります。

  1. Slack上でToDoとして登録すべきメッセージが投稿された際に起動するSlackワークフローを用意します。
    トリガーとしては特定リアクションでもメッセージ文言でも任意の条件が指定できます。
  2. メッセージのURLをパラメータとしてカスタムSlackAppを呼び出します。Appはメッセージの要約ともし期限に関する記述があればそれを返します。
  3. 個人ToDoかグループとしてのToDoかを分岐させます。これは例えば投稿元のチャンネルで分けてもいいですし、Slackワークフロー自体を複数用意して分岐してもよいです。
  4. 最後にSlackリストにToDoとして登録します。個人タスクであればSlackワークフローの標準機能で登録します。チームとしてのToDoであればベースとなるタスクをSlackワークフローの標準機能で作成後に、カスタムSlackAppを呼び出してメンバー分複製します。

これで、個人・チームのタスクをSlackリストに登録する流れができました。

ToDoの確認

登録したリストアイテムの確認ですが、標準で自分が割り当て済みのアイテムをリスト横断で確認するビューが用意されています。日々のToDoの確認はまずここで確認することになります。

マネージャーなどはチームの対応状況を確認する必要があります。その場合には、任意の条件を指定してビューを作成することができます。

作成したビューのURLは以下から確認ができます。

ビューはチャンネルCanvasなどにEmbed(埋め込み)ができるので、これでチーム全体の状況確認が簡単にできます

ToDoのリマインド

自分のToDoが確認できるといっても対応が遅れることもあります。人間だもの。
Slackワークフローには標準機能で二つのリマインドが用意されています。

一つは担当者本人に通知されるリマインドです。期限切れ以外にも前日・当日などさまざまな条件を指定してリマインドすることができます。

リマインドはアクティビティに表示されます。

もう一つは任意のチャンネルに通知することができるものです。チーム全体で把握したい際にはこちらを設定します。

条件に合致するアイテムリストがメッセージとして通知されます。現時点では細かいメッセージのカスタマイズはできません。

まとめ

以上がSlackカスタムAppでSlackリストをチームToDo管理に拡張する流れのご紹介でした。
標準機能で賄えない部分をうまくSlackカスタムAppで補うことで、ToDo管理の登録・確認そしてリマインド(受ける側・送る側)の負担軽減が期待できます。

今回は課題に対してSlackカスタムAppを作り込むアプローチをとりましたが、どこまでを作り込むかの判断については悩ましい部分はあります。
ただ、今回はfunctionとして再利用可能な形に切り出すことで、作り込み・メンテナンスの工数を上回るメリットが得られると判断しました。
例えば要約と期限の算出functionなどは、Slackワークフロー上で誰でも呼び出せる形にすることで、
Slackリストへの登録以外にも様々なツール・サービスに対して、誰でも簡単に情報をストックできるようになるといった恩恵が得られます。

コード・プログラミングで解決する部分と標準機能でカバーすべき範囲・役割分担をうまくバランスしながら今後も発展させていきたいと考えています。
また、現在はチームToDoをさらに拡張し、組織全体のToDo管理の効率化・一元化ができないか検証しています。こちらについてもまとまったらブログとして公開したいと思います。

なお、非常に便利なSlackリストですが今後活用する上でのOpportunityもあります。

  1. サブタスクをビュー条件として指定できない
  2. リストを整理・分類できない
  3. リストアイコンが指定できない

これらが今後解消されるとさらに効率的な活用に繋がりそうです。以上、Slackリスト活用を考えられている方の参考になれば幸いです。

KNOWLEDGE WORK Blog Sprint、明日9/23の執筆者はAIエンジニアの kato さんです。お楽しみに!

参考

https://slack.com/intl/ja-jp/features/task-list
https://slack.com/resources/collections/slack-platform

株式会社ナレッジワーク

Discussion