1. Qiita
  2. 投稿
  3. Slack

Slackにスレッド機能を追加する

  • 120
    いいね
  • 3
    コメント
この記事は最終更新日から1年以上が経過しています。

Slackにスレッド機能を追加してみました。
レポジトリはGithubに置いているので、cloneしてherokuの環境にpushするだけ(とちょっとした環境変数の設定)で動きます。
https://github.com/KeitaMoromizato/slack-thread

Slackにスレッド機能を追加するというよく分からない事を言ってるようですが、結構効果的なので試してみてはどうでしょうか。

Slackの問題点

Slackを使っていると、よく次のような問題にぶち当たります。

10.png

確認したいこと・共有したいことがあったのに別のトピックによって埋もれてしまう。逆に、別のトピックが走っていたので埋もれてはいけないと思い投稿を躊躇ってしまう。本当によくあります。

解決方法としてはチャネルを細かくわけてコミュニケーションを分散させることも出来ます。が、これも情報が分散してしまったり、結局どのチャネルに投稿していいか分からなくなったり、10数個のチャネルを見るのが面倒になったりと問題が山積み。

そこでスレッド機能です

そんな問題を抱えている方のためにスレッド機能を作りました。実際は「チャネルをより細かくした」チャネルです。Slackのチャネルを「タスクが出来るたびに作っては消すもの」として捉えると、情報の管理・やりとりが非常にシンプルになります。

また、この記事で説明したように、Slackはストック型サービスと組み合わせるとより便利になります。今回は情報のストック先としてQiitaTeamを利用しています。

説明し辛いので動きを見て行きましょう。

機能説明

最初に環境設定を行う必要があるのですが、イメージを付けるために運用の流れから。以降に示す環境設定を完了してから動かしてください。

  1. メインで使っているチャネルにbotを招待する
  2. まとまって話したいトピックが出てきたらthreadコマンドでスレッドを作成する
  3. 会話が完了したらexitコマンドでスレッドをアーカイブ。会話の内容は自動的にQiitaTeamに投稿される

1.botを登録する

まずはメインで使っているチャネルにbotを招待しましょう。チャネル上でinviteコマンドを実行します。

/invite thread-bot

12.png

2.スレッドを作る

スレッドを作るにはthreadコマンドを作ります。スレッド名は英数字しか使えないので注意。

> thread <thread_name>

13.png

するとチャネルが作られます(プレフィクスとして現在のスレッド名がつきます)。今後はそのチャネルで会話を進めましょう。

14.png

3.スレッドをアーカイブする

スレッドでの会話が終了したらスレッドをアーカイブします。アーカイブしたスレッドの内容はQiita Teamに投稿されるので、タイトルとタグを付けます。これ、メインのチャネルでは実行しないように注意してください。作成されたスレッドで実行しましょう。間違ってアーカイブしてしまっても戻せますが。

> exit <title> [tag, ...]

18.png

アーカイブが完了すると元のスレッド(threadコマンドを実行したスレッド)にまとめへのリンクが投稿されます。

16.png

QiitaTeamにはこんな感じで投稿されます。共同編集になっているのでだれでも整形できます。

19.png

メリット

このシステムを使うと以下のメリットがあります

情報がごちゃごちゃにならない

1つのチャネルで複数の会話が同時進行で流れることがなくなるので、適切なコミュニケーションが取れます。

手軽

Slackのテキストエリアだけで操作が出来るので楽です。

情報をストックできる

Slackのようなフロー型サービスは情報の保存に向きません。話の内容が一段落したら、QiitaTeamにストックすることで情報の検索性が増します。

環境設定

では実際に自分のプロジェクトで使っているSlackに適用する方法を見て行きましょう。

1.heroku環境構築

ここからレポジトリをcloneしてきて下さい。カスタマイズ不要で使えますが、独自の変更を加えたい方は/scripts/slack.coffeeを変更してください。

$ heroku create <App Name>
$ git push heroku master
$ heroku ps:scale web=1

2.Slack->Hubot用tokenの取得

ここを参考にHubot用tokenを取得します。

3.Hubot->Slack用tokenの取得

Slack APIを使用するためにまずはアプリケーションを登録します。以下にアクセスして[Create a new application]を選択。
https://api.slack.com/applications

必要な項目を入力します。URL/Redirect URIはheroku環境のURLで。
1.png

アプリの作成に完了したら(1)Client IDと(2)Client Secretをメモ。
2.png

認証コードを取得するために以下のURLにアクセスします。

https://slack.com/oauth/authorize?client_id=(1)xxxxxxxxxxxx&scope=read,post,identify

URLに(3)コードがついて返ってきます。
5.png

tokenを取得するため以下のURLに(1)Client ID、(2)Client Secret、(3)コードを設定してアクセス

https://slack.com/api/oauth.access?client_id=(1)xxxxxx&client_secret=(2)xxxxxx&code=(3)xxxxx&pretty=1

アクセスTokenが取得できました!

6.png

4.QiitaTokenの取得

QiitaのTokenは設定画面から簡単に作成出来ます。以下にアクセスして「新しいトークンを発行する」を選択。
https://qiita.com/settings/applications

今回はQiitaTeamしか使わないので、write_qiita_teamのスコープのみ設定します。
7.png

[発行する]を押してtokenを発行しましょう。

9.png

5.token設定

必要なtokenがすべて揃ったのでheroku環境へ設定します。

$ heroku config:set HUBOT_SLACK_TOKEN=xxxxxxx
$ heroku config:set QIITA_TEAM_ID=xxxxxx(QiitaTeamのURLの最初)
$ heroku config:set QIITA_TEAM_TOKEN=xxxxxxxxxxx
$ heroku config:set SLACK_API_TOKEN=xxxxxxxxxxxx
$ heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s  | grep web_url | cut -d= -f2)

$ heroku restart

これで環境設定は完了です!たぶん動くはず...

最後に

Slackを使い始めた当初、会話がごちゃごちゃになってしまうのが嫌でタスクベースでスレッドを作っては捨てるチャットサービスを作ろうかと、ちょっとだけ考えてました。しかしSlackのIntegrationを使っているうちにドンドンはまってしまい、あれ?もしかしてSlackでもやりたかったことはできるんじゃないの?ということで作ってみました。

いやーSlack便利ですわー