この記事は『Slack Advent Calendar 2018』の3日目の記事です。
どういうわけか?: joinしすぎて見れない問題
皆さんSlackは活用していますか? 僕はSlackがとっても好きです!
チャットツールとしての基本を抑えているのはもちろんのこと、
様々なインテグレーションツールが利用できることや、
何よりAPIを使うことで自分好みの様々なツールやbotが作成できる点が
とても便利&楽しいと感じています。
……が、その反面、いろんなチャンネルの話題を見たい!と思っていると、
気づいたらjoinしているチャンネル数が増えてしまうことがあります。
僕の入っているSlackチームには公開チャンネルだけで6000チャンネルくらいあるので、
その中から業務に関係あるもの、ちょっと興味があるものにjoinするだけでも
チャンネル数が軽く200を超えてしまったりします><;
さすがにこれを全部じっくり見ていたら時間が無くなってしまうので、
普段は大半のチャンネルをミュートにしているのですが、
じっくり見ないにしてもなんとなく雰囲気は感じていたいな……と思ってしまいます。
そうだ、ターミナルに全部流そう
昔、 IRC を使っていたときは LimeChat の下部分に
「全チャンネルの発言が表示される領域」があったため、僕はそれを活用していました。
あの体験ができれば今の僕の悩みも解決できるのでは!?と思い、
ちょっと前にペライチのRubyコードを書いて運用をしてみたところ
かなり僕の生活が豊かになりました!
せっかくなので自分用コードのまま眠らせず、お外に出してしまおう!ということで
今回ちょっとコードを整理したので紹介させていただきます。
Senrigan : Slackの発言をターミナルに流すやつ
Senriganは指定のチームで自分がjoinしているチャンネルの発言を
チャンネルの区別をすることなく、ターミナルに垂れ流すツールです。
「それってターミナル向けのSlackクライアントと違うの?」と思われるかもですが、
Senriganは投稿系の機能がなく、ただただログを表示するように
joinしている全チャンネルのログを流すだけのツールになっています。
Rubygemsとして作成しているので gem install senrigan
でインストールできます。
$ gem install senrigan
$ SLACK_TOKEN='ここにキミのlegacy tokenを入れよう' senrigan
なかみ
slack-ruby-client でSlack の Real Time Messaging API に接続し、
そこから送られてくるメッセージイベントの内容を解釈して、それっぽい色をつけて表示します。
シェルの色のコマンド覚えられないので、色付けにはcolorizeを使っています><;
対応しているメッセージ
- 普通のメッセージ
- Attachment
- 編集(Edited)された通知
Editedを表示する機能は僕的にはとても便利で、
面白いことを言った後にすぐ消しちゃう人にも対応することができます。べんり。
ところで、SlackのMarkdownっぽいやつは、
パースの方法が極めて難解であることで有名です。
ターミナル表示なのであんまり頑張る必要はないのですが、
さすがにユーザー名が <@U123456>
とかなってたら何のこっちゃなので、
そのあたりの最低限の置換はやった上で表示しています。
(でも僕が知らない機能もたくさんあるので、まだまだ足りないかも…)
なお、絵文字は…
諦めよう
macとかで表示できる普通の絵文字はなるべく対応したい気もするので、
gemoji をつかって、文中の :〜:
な部分を可能な限り絵文字に置き換えて表示しています。
require 'gemoji'
emoji = Emoji.find_by_alias('smile')
emoji.raw # => 😄
でも gemoji は 🤔
のエイリアスが thinking
なので、
Slackの :thinking_face:
は引っかからないんですよね……
ちゃんとやるなら、Slack用のエイリアス表が必要だ><
まとめ
僕がSlackを楽しむためにつくった&使っているツールである Senrigan を紹介しました。
おそらくSlackは様々な使われ方をしていると感じており、
きっと各チームごとの特性に合わせた秘密のツールとかもたくさんあるんじゃないかなぁと思っています。
この AdventCalendar でもそういったツールの片鱗が見えたりするかもしれませんね٩(๑❛ᴗ❛๑)۶