LoginSignup
6
7

More than 5 years have passed since last update.

Slackへの投稿をコマンドからできるようにする

Last updated at Posted at 2016-10-05

やりたかったこと

各種作業を自動化するにあたり、Slackに投稿するためのコマンドが欲しかった。
しかもRubyでやりたかった

できたもの

ターミナルなどでこうすると

image

こうなる

image

やり方

Slackに書き込むコードを書く

$ mkdir slack # 作業ディレクトリ。任意の名前。
$ rbenv local 2.3.1 # rbenvでRubyを管理している場合
$ bundle init # BundlerでGemを管理したい場合
$ vim Gemfile

Gemのslack-apidotenv(環境変数を管理)を入れます

Gemfile
source "https://rubygems.org"
gem 'slack-api'
gem 'dotenv'

Gemをインストール

$ bundle install --path vendor/bundle

こんな感じのファイル構成になるはずです

.bundle
.ruby-version
Gemfile
Gemfile.lock
vendor

コードはこんな感じに。
アクセストークンは開発用にはこちら(https://api.slack.com/docs/oauth-test-tokens )、本番用にはこちら(https://my.slack.com/services/new/bot )を使うといいようです。
開発用のアクセストークンが簡単に取れるのが嬉しい。

main.rb
require 'slack'
require 'dotenv'

Dotenv.load #.envファイルを読み込み

message = ARGV[0]
channel_name = ARGV[1] || 'my_channel'

Slack.configure do |config|
    config.token = ENV['SLACK_API_TOKEN']
end

Slack.chat_postMessage(text: message, channel: channel_name)

.evnファイルを作って、同じディレクトリに配置します。

.env
SLACK_API_TOKEN=##トークンに置き換える##

ファイル構成は今こんな感じになっているはず

.bundle
.env
.ruby-version
Gemfile
Gemfile.lock
main.rb
vendor

試しに実行してみましょう

$ bundle exec ruby main.rb Hello my_channel

#my_channelにHelloと書き込まれれば成功です。
もっとオプションを受け取ったりしてコマンドっぽくしたい場合はGemのThorなどを使うといいでしょう。

コマンド化する

これをどこからでも単にslackとするだけで呼び出せるようにしたいです。
rbenvやBundlerを使っていなければ、パスが通ってるところから単にスクリプトにシンボリックリンクなどを張るだけでいいのですが今回はそうではありません。
いろいろなやり方がありますが、私は~/binにPATHを通してそこからシェルスクリプトで呼び出すという方法でやります。

slack
#!/bin/bash

if [ $# -ne 1 ]; then
  echo "テキストを引数として渡してください" 1>&2
  exit 1
fi
cd ~/projects/slack
bundle exec ruby main.rb $1 $2

こんな感じのスクリプトを書いて~/binに配置します。
実行権限をつけるのを忘れずに。

$ chmod +x slack

最後にパスを通します。.bash_profileなどに追記しましょう。

.bash_profile
export PATH=$PATH:~/bin

とすれば、どこからでもslackとするだけで呼び出せるようになります。

次のステップ

せっかくコマンドにしたので標準入力も受け取れるようにしたいですね。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7