notebook

都内でWEB系エンジニアやってます。

slack APIでコードスニペットを投稿する

ちょっとしたコードとか調査の途中経過などの結果を共有するときとかよくslackに投げたりすると思います

そんな時に、いちいち結果をコピーしてslackに投げるのって地味に面倒ですよね

いろいろ調査、コマンドライン上で結果をslackへ投稿!

簡単なコード書いた、コマンドライン上でコードをslackへ投稿!

といった感じになったら便利そうです

incommingwebhookではできないようなのですが、WEBAPIを使えばできるようです

files.upload method | Slack

https://api.slack.com/methods/files.uploadapi.slack.com

早速TOKENを発行して試してみます

TOKENの発行に関してはここでは割愛します

ファイルを投稿

まずはサンプルに沿ってファイルを投稿してみます

  • test.sh
#!/bin/bash

echo "Hello!!"
curl -F file=@test.sh -F channels=#swfz -F token=${TOKEN} https://slack.com/api/files.upload

ファイルタイプなども指定できるようですが、自動で判断してくれるようなのでそれに頼っても大丈夫そうです

f:id:swfz:20161011004326p:plain

テキストを投稿

curl -F content="text" -F channels=#swfz -F token=${TOKEN} https://slack.com/api/files.upload

こんな感じでテキストも投稿できるようです

ここにコマンドの結果を渡せば自由度が増しそうですね

スクリプトから投稿

ということでスクリプトを書いてみました

特に工夫ということもないですがファイル指定がない場合は標準入力$(cat -)から受け取ったテキストをslackへ投稿するようにしました

なので下記のような使い方ができるようになります

  • コマンドの結果をslackへ投稿
ps | file2slack

f:id:swfz:20161011004340p:plain

cat test.json | jq '.' -r | file2slack

f:id:swfz:20161011004348p:plain

jqとかもテキストのみ(色なし)の出力にすれば特に問題なく投稿できます

色がついているとansiカラーコードがそのままテキストとして出力されてしまうので注意が必要です

echo 'commandline to slack sample' | grep --color=always to  | file2slack

f:id:swfz:20161011005516p:plain

これで運用が少しはかどる?!

おわり