slackは結構前から情報収集の場、そしてコミュニケーションの場としてかなり使っています。
1日の最後にGoogleAnalyticsの今日のアクセス数一覧を投稿しておいて前日の話題を想像したり、今日のTodoを自動投稿しておいて朝からげんなりしたり、必ず見るTwitterユーザの投稿をまとめて投稿しておいたり。
WEBで使うことが多いけど、投稿するときはCLIで投稿することもあります。Analyticsのやつは違うけど、サーバの中のファイルが更新されたらそれを流すとか。そんな時に使っているのがslackcatです。
slackcatとは
CLIでslackの投稿が出来たり、ファイルアップロードが出来たりするrubyのGemです。
前回のtwもしかり、自分、黒い画面本当好きだな〜。
投稿の方も簡単。
echo "あああああああ" | slackcat -g 999_memo -p
こんな感じで投げることが出来ます。echo 〜〜〜
のところを ls -ltr
とかにすると、ファイルリストをslackに投稿できたりします。
で、インストールなどはページを参考にしてもらうとして、ハマった本題。
パブリックチャンネルに投げるかプライベートチャンネルに投げるか
今回ハマったのはプライベートチャンネルに投げる時どうすればイイのかということ。
ヘルプを見てみると、Channelに投げるには -c
をつけるらしい。
$ slackcat -h Options: -k, --token=<s> Slack API token (default: ) -c, --channels=<s> Channels to share (default: ) -g, --groups=<s> Groups to share (default: ) -u, --users=<s> Users (DMs) to share (default: ) -t, --filetype=<s> File type identifier -T, --title=<s> Title of file -n, --filename=<s> Filename of file -i, --initial-comment=<s> Initial comment to add -p, --post Post instead of upload -m, --multipart Multipart upload each file -d, --download=<s> Download a linked file -s, --save-as=<s> Save downloaded file as -h, --help Show this message
結果的にはパラメータを-g
にすることで行けました。
echo "あああああああ" | slackcat -g 999_memo
プライベートとはいえども、チャンネルだから、-c
をつけるんだとずっと思い込んでいました。ってかRubyのslackAPIを使っているときはパブリックは#general
とかでシャープを先頭につけて、プライベートはシャープなしで投稿していたから、それと混在してますね。完全に。
ずっと勘違いしていた時に出てきたエラーがこれ。
$ echo "aaa" | slackcat -c 999_memo /var/lib/gems/1.9.1/gems/slackcat-0.2.5/bin/slackcat:118:in `block in <top (required)>': undefined method `fetch' for nil:NilClass (NoMethodError) from /var/lib/gems/1.9.1/gems/slackcat-0.2.5/bin/slackcat:117:in `map' from /var/lib/gems/1.9.1/gems/slackcat-0.2.5/bin/slackcat:117:in `<top (required)>' from /usr/local/bin/slackcat:23:in `load' from /usr/local/bin/slackcat:23:in `<main>'
このエラーでググっても全然結果が出てこなくて困った。
まとめ
パブリックチャンネルに投稿する場合
echo "あああああああ" | slackcat -c general
プライベートチャンネルに投稿する場合
echo "あああああああ" | slackcat -g 999_memo
投稿する文字はパイプで渡したらスニペットとして投稿されちゃうので-p
をつけるとテキストで投稿できます。
echo "あああああああ" | slackcat -g 999_memo -p
存在しないグループとか、パブリックグループとかプライベートグループとかを間違えた場合は
`block in <top (required)>': undefined method `fetch' for nil:NilClass (NoMethodError)
が出るようなので、それもおぼえておこう。