半導体設計者あるあるだが、一回に流れるジョブが長すぎて、別の作業をしているとそのジョブが完了していても忘れることがある。 つまり長いジョブを流す場合、ジョブが完了したときに通知が来ればよいのだが、いちいちメールを飛ばすようにしているとメールボックスが汚くなってしまい気持ちが悪い。
そこで便利なのがSlackだろう。 業務で直接Slackは使っていないものの、デスクトップアプリやスマートフォンと連携して便利だし、単純にチャットルームに書き込まれてポップアップが上がるだけなのでメールボックスが汚くなることもない。 つまり、コマンドラインからSlackが扱えるようになれば良い、という訳だ。
いろいろツールを探すと、slackcatというツールがあるようだ。
インストールは簡単だ。後で捕捉するが最新版を使う方がよい。
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
このとき、体裁としては"msyksphinz"から"msyksphinz"にメッセージを送ったことになるため、ポップアップは出現しない。 ポップアップを出したければ、ユーザ名を指定して"msyksphinz"以外からメッセージが送られたことにすればよい。
echo Hello Slackcat | slackcat -c general -t -s -u msyksphinz_bot
という訳で、以下のようなスクリプトを組んで、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