Slackme: テキストも画像もコマンドラインからSlackに送りつける

More than 1 year has passed since last update.

コマンドラインからSlackにメッセージや画像を送りつけたいので、そのようなコマンドを作った。

https://github.com/hayamiz/comfort/blob/master/scripts/slackme

Slackme demo

使い方

引数に文字列を渡して、文字列が存在するファイル名だったらファイルがSlackにアップロードされる。ファイル名じゃない文字列はメッセージとしてSlackにポストされる。

例えば:

  • slackme "hello world" : "hello world" とメッセージをポストする
  • slackme image.jpg : image.jpg をアップロードする(ファイルが存在すれば)
  • slackme "i like it" lgtm.gif : "i like it" をメッセージとしてポストしたあと、lgtm.gif をアップロードする

個人的な便利ポイントとして、EPSファイルやSVGファイルは、ImageMagickのconvertがあると勝手にPNGに変換してくれたり、高解像度(1Mピクセル)のファイルは縮小してアップロードするようになっていたりする。

初期設定

~/.slackme.yml を作っておく

:token: <slack API token>
:channel: "#channel"

今のところチャンネル名は決め打ちになってる。

ぼっちSlackのススメ

計算機を使って長時間のジョブをいろんなマシンで実行することが多いので、最近はSlackを通知専用に使っている。SlackをiPhoneとMacbookにインストールしておけば、ネットワークに繋がっている時は必ず何らかの方法で通知を受け取ることができるので便利。これがメールだと受信トレイがゴミで溢れてストレスが貯まるが、Slackだと適当に流れていくだけなのでちょうど良い。

Slackmeで画像もアップロード出来るようになったので、通知+結果データのgnuplot出力を送る、といったこともこれからやってみようと画策している。

また、リモートサーバで実験していると、グラフをgnuplotでファイルに出力してからGUIのあるマシンまでコピーしてきて表示させるという手間が何かしら発生してしまうが、とりあえずプレビューするのにもSlackmeが便利なのではという気がしている。

他との比較

とりあえず作ってみてから、他に似たようなものがないか調べてみたら、まあ色々ある。

  • Slack incoming webhook: Slackがデフォルトで提供しているHTTPS経由で投稿できるエンドポイントがある。curlなどで叩ける
  • slackcat : 汎用的にメッセージポストしたりファイルアップロードしたりできる
  • slacktee : teeを使う感覚でテキストをポストできる
  • slack-post : 簡単なRubyのSlack APIラッパ+コマンドラインインターフェース。テキストのポストのみ対応っぽい。