はじめに
分報という文化が定着してきているようですね。
私も始めてみたのですが、作業を随時投稿するという目的の割に、わざわざSlackの画面に移動しなければいけないという面倒臭さがあるのはちょっと納得がいきません。やはりターミナル上から投稿できるべきです。
Slackを操作するコマンドラインツールはいくつかありますが、今回は slackcat
を使ってみましょう。基本的にGoで書かれているようです。クロスプラットフォーム、良いですね。
インストール&設定
Macではおなじみの brew
コマンドでインストールできます。
$ brew install slackcat
Linuxではバイナリをダウンロードして配置します。Goはシングルバイナリを生成するので簡単ですね。
$ wget https://github.com/vektorlab/slackcat/releases/download/v1.1/slackcat-1.1-linux-amd64 -O slackcat
$ sudo mv slackcat /usr/local/bin/
$ sudo chmod +x /usr/local/bin/slackcat
Slackとの通信に必要なtokenを設定します。下記のコマンドを実行してください。
$ slackcat --configure
デフォルトのWebブラウザが起動し、権限を求めてきます。

承認すると slackcat のページに遷移します。

デカデカとtokenが表示されているので、これを指示通りにファイルに保存します。内容はだいたい下記のようなものです。
xoxp-0123456789-0123456789a-0123456789ab-0123456789abcdefghijklmnopqrstuv
ここで発行されるtokenはWebhookのtokenとは違いパーソナルなものです。このコマンドを使って投稿した際には、 BOT
ではなく自分自身として記録されます。
コマンドをラップする
分報を投稿する際にはこのようなコマンドを実行します。
$ echo -e "山田さんのレビューを始めマックス" | slackcat --channel "times_artifactsauce" --tee --stream
slackcat
はテキストの投稿はもちろんファイルをアップロードしたりもできるのですが、分報の投稿を簡略化したいというのが今回の目的ですので、むしろテキストの投稿しかできないように制限してしまいましょう。また、分報を投稿するチャンネルは固定されているはずですので、これも制限してしまいましょう。これらの条件を考慮したラップスクリプトが下のようになります。
#!/usr/bin/env bash
set -eu
: ${POST_CHANNEL:="times_artifactsauce"}
if [[ $# -eq 0 ]]; then
echo "[ERROR] Nothing has been entered." >&2
exit 1
fi
echo -e $1 | slackcat --channel $POST_CHANNEL --stream
こんな感じで実行します。簡単ですね。
$ slack "山田さんのレビューを始めマックス"
slackcat connected to HOGE-TEAM as artifactsauce
slackcat starting stream
slackcat flushing remaining messages to Slack...
slackcat flushing remaining messages to Slack...
slackcat posted 1 message lines to times_artifactsauce
slackcat
は実行結果をsnippetにして投稿したり、出力されたファイルを投稿したりすることが、主目的なんじゃないでしょうか?オプションを眺めている限りはそのように感じます。
終わりに
コマンドラインから簡単に分報を投稿できるようになったのは良かったのですが、簡単になったせいで分報の内容がだんだんTwitter化してきて、それはそれでどうなのかなと思っています。
また注意点として、コマンドラインから投稿しているだけでは他の人が自分のチャンネルに投稿してくれたことに気づけないので、SlackアプリのDesktop notificationsを必ず "Activity of any kind" にしておきましょう。