HappyGoLucky

Web系サーバーサイド寄りの自動化大好きエンジニアの徒然なるブログ

slackに流す分報にprefixを付けたい

分報とは

日報はその日の作業や悩みをその日の最後に書いて出すことになる。作業中の課題や考えていることが、日単位で共有されるため、他の人が目にする時には、すでにその課題は解決済みな場合がある。情報共有の時間差がどうしても発生してしまう。
そこで、ツイッターのようにその時その時の作業内容や悩みをアウトプットする取り組みとして、分報というものが活用できる。

分報の考え方や進め方は次の記事が詳しい。

c16e.com

私の分報の仕組み

私は Terminal で zshvim な開発環境なので、つぶやくなら Terminal 上で行いたい。
自社ではSlackを使っているので、TerminalからSlackに分報を送信したい。
そこで下の記事を参考に、 slackcat を活用することにした。

qiita.com

slackcat の課題

slackcat は Slack App の Token を使うので、私のアカウントで発言したことにはならず、Token を発行した Slack App が発言したことになってしまう。

f:id:yasuhiroki:20180426124002p:plain

妥協策

せめて、もう少し自分の発言っぽさを出したいので、カスタム emoji を追加したい。
下のような感じ。

f:id:yasuhiroki:20180426124123p:plain

分報を送るためのスクリプト

毎回 emoji を入力するのは面倒くさい。
また、いちいち slackcat とコマンドを入力するのも面倒くさい。

そこで、一度実行したら常に入力待ちになって、文字列を入力して改行する度に、カスタム emoji を先頭に付与して Slackに送信するスクリプトを作った。

#!/bin/bash

set -e

which slackcat >/dev/null || { echo "required slackcat"; exit 1; }

if [ $# -gt 0 ]; then
    echo "${*}" | slackcat -c "${MY_SLACK_CHANNEL:-times-yasuhiroki}" -u "${MY_SLACK_USERNAME:-yasuhiroki}" --stream
else
    cat | gstdbuf -oL gsed 's/^/:yasuhiroki: /g' | slackcat -c "${MY_SLACK_CHANNEL:-times-yasuhiroki}" -u "${MY_SLACK_USERNAME:-yasuhiroki}" --stream
fi

stdbuf で入力を行ごとにsedに渡して文頭にカスタムをemojiを追加している。
mac なので gstdbufgsed となる。 BSD版だと sed -l としないと slackcat に文字列を渡してくれない。ただ、私の環境だと日本語を入力するとエラーになるので、GNU版が必須。なんでだろ。
実装当初、BSD sed で実装していてうまくいかず悩んでいたら @eban さんが Ubuntu だとできたと教えてくださり、GNU版じゃないとダメなのだと気付いた。