ちょっとしたコードとか調査の途中経過などの結果を共有するときとかよくslackに投げたりすると思います
そんな時に、いちいち結果をコピーしてslackに投げるのって地味に面倒ですよね
いろいろ調査、コマンドライン上で結果をslackへ投稿!
簡単なコード書いた、コマンドライン上でコードをslackへ投稿!
といった感じになったら便利そうです
incommingwebhookではできないようなのですが、WEBAPIを使えばできるようです
早速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
ファイルタイプなども指定できるようですが、自動で判断してくれるようなのでそれに頼っても大丈夫そうです
テキストを投稿
curl -F content="text" -F channels=#swfz -F token=${TOKEN} https://slack.com/api/files.upload
こんな感じでテキストも投稿できるようです
ここにコマンドの結果を渡せば自由度が増しそうですね
スクリプトから投稿
ということでスクリプトを書いてみました
- file2slack
#!/bin/bash API_URL="https://slack.com/api/files.upload" CHANNEL="#swfz" # curl -F content="$(cat -)" -F channels=#swfz -F token=${TOKEN} ${API_URL} # curl -F file=@${1} -F channels=#swfz -F token=${TOKEN} ${API_URL} post2slack(){ echo ${FILE} filetype=${SYNTAX:-text} if [ -n "${FILE}" ]; then curl -F file=@${FILE} -F title=${TITLE} -F channels=${CHANNEL} -F filetype=${filetype} -F token=${SLACK_WEB_API_TOKEN} ${API_URL} else curl -F content="$(cat -)" -F title=${TITLE} -F channels=${CHANNEL} -F filetype=${filetype} -F token=${SLACK_WEB_API_TOKEN} ${API_URL} fi } _usage(){ cat << EOS usage: ./file2slack.sh environment SLACK_WEB_API_TOKEN is required. prease set SLACK_WEB_API_TOKEN export SLACK_WEB_API_TOKEN=***** options) -f : filename (if this option is not exist, to post the stdin.) -c : post channel -t : file title -s : filetype syntax EOS exit 1 } main(){ while getopts hc:f:t:u:s: opt do case ${opt} in h) _usage;; c) CHANNEL=${OPTARG};; f) FILE=${OPTARG};; t) TITLE=${OPTARG};; s) SYNTAX=${OPTARG};; :|\?) _usage;; esac done if [ "${SLACK_WEB_API_TOKEN}" == "" ]; then echo 'not exist environment!!' _usage fi post2slack } main $@
特に工夫ということもないですがファイル指定がない場合は標準入力$(cat -)
から受け取ったテキストをslackへ投稿するようにしました
なので下記のような使い方ができるようになります
- コマンドの結果をslackへ投稿
ps | file2slack
cat test.json | jq '.' -r | file2slack
jqとかもテキストのみ(色なし)の出力にすれば特に問題なく投稿できます
色がついているとansiカラーコードがそのままテキストとして出力されてしまうので注意が必要です
echo 'commandline to slack sample' | grep --color=always to | file2slack
これで運用が少しはかどる?!
おわり