FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

コマンドラインからSlackに通知を送るツールslackcatを使って長いジョブを忘れないようにする

半導体設計者あるあるだが、一回に流れるジョブが長すぎて、別の作業をしているとそのジョブが完了していても忘れることがある。 つまり長いジョブを流す場合、ジョブが完了したときに通知が来ればよいのだが、いちいちメールを飛ばすようにしているとメールボックスが汚くなってしまい気持ちが悪い。

そこで便利なのがSlackだろう。 業務で直接Slackは使っていないものの、デスクトップアプリやスマートフォンと連携して便利だし、単純にチャットルームに書き込まれてポップアップが上がるだけなのでメールボックスが汚くなることもない。 つまり、コマンドラインからSlackが扱えるようになれば良い、という訳だ。

いろいろツールを探すと、slackcatというツールがあるようだ。

github.com

インストールは簡単だ。後で捕捉するが最新版を使う方がよい。

curl -Lo slackcat https://github.com/bcicen/slackcat/releases/download/v1.6/slackcat-1.6-$(uname -s)-amd64
sudo mv slackcat /usr/local/bin/
sudo chmod +x /usr/local/bin/slackcat

つぎに、連携するSlackのアカウントを設定する。

slackcat --configure

Slackの画面がウェブブラウザ上で表示され、どのアカウントと連携するかを設定する。http://slackcat.chat/configureを開いてアカウントの連携を行い、最後に表示されたトークンを ${HOME}/.config/slackcat/config に張り付ける。これで設定完了となる。

基本的な使い方は、以下のようにすることで連携したSlackのワークスペース上に上にメッセージが表示される。

echo Hello | slackcat -c general -t -s
f:id:msyksphinz:20190301233131p:plain

このとき、体裁としては"msyksphinz"から"msyksphinz"にメッセージを送ったことになるため、ポップアップは出現しない。 ポップアップを出したければ、ユーザ名を指定して"msyksphinz"以外からメッセージが送られたことにすればよい。

echo Hello Slackcat | slackcat -c general -t -s -u msyksphinz_bot
f:id:msyksphinz:20190301233345p:plain

という訳で、以下のようなスクリプトを組んで、Slackに通知したいジョブを実行するためのWrapperを作った。

  • sc.sh
#!/bin/sh

argv=$@

echo $argv

${argv}
echo "Finished
Time = `date`
HostName = `hostname`
DIR = `pwd`
${argv}" | slackcat -c general -t -s -u job_botname
````

以下のようにすれば、コマンド終了時にSlackに通知される。これでジョブの完了をすぐに知ることができるようになった。

sc.sh make