🚀
Slack 通知を試す
Slack 通知を試す
Webhook アドレスを作成する
-
https://slack.com/services/new/incoming-webhook
- デフォルトチャンネル(チャンネル指定なしの時に通知するChannelを選択する)
いつもの初期動作
rails new slack_notify -d mysql -B --skip-test
rails webpacker:install
bundle install
bundle exec annotate
bundle exec rails g annotate:install
rails g scaffold user name email login
rails db:create
rails db:migrate
追加Gemfile
- メインは slack-notifer 。
- 他にもありそうだし、slack側が webhook? アプリじゃないのか、と思いつつよく見かけるので
- https://github.com/slack-notifier/slack-notifier
- dotenv は今回 webhook アドレスを管理するのに〜っと、思ったがpublic repositoryなので、credentials に入れ直した。ENVについては Channel名 を入れるのに使った。
- annotate は便利& pryはデバッッグ用でいつも入れてるやーつ。
gem 'slack-notifier'
gem 'dotenv-rails'
gem 'annotate'
gem 'pry-rails'
gem 'pry-byebug'
初期確認
- 立ち上げて、 http://127.0.0.1:3000/users の scaffold が見えればok
- scaffold (スキャフォルド)って ff 連続してなければ読める気がする
- ちょいっと素振りする時に便利ですよね。
rails s
Model ( app / model / slack_notifier.rb )
class SlackNotifier
WEBHOOK_URL = Rails.application.credentials.dig(:SLACK_WEBHOOK)
USER_NAME = "slack-notifier"
def initialize
channel = Rails.env.production? ? ENV['SLACK_PROD_CHANNEL'] : ENV['SLACK_NON_PROD_CHANNEL']
@client = Slack::Notifier.new(WEBHOOK_URL,
channel: channel,
username: USER_NAME,
unfurl_links: true,
)
end
def send message, title: "Title", coloer: "#00ff00"
message = {
"color": coloer,
"pretext": title,
"fields": [
{
"value": "```" + message + "```"
}]
}
@client.post attachments: message
end
end
- ちょっと動かしてみる
[1] pry(main)> SlackNotifier.new.send("Send Message")
=> [#<Net::HTTPOK 200 OK readbody=true>]
Contoller ( app / controllers / users_controller.rb )
ユーザ新規登録時に追加してみる
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
SlackNotifier.new.send(@user.name, title: "新規ユーザが追加されたよ...!")
ユーザ削除してみる
# DELETE /users/1 or /users/1.json
def destroy
@user.destroy
respond_to do |format|
SlackNotifier.new.send(@user.name, title: "ユーザが削除されたよ...!", coloer: "#ff0000")
悩み(というか手抜き?)
- Coler 指定が手間...。処理中で実際に使う時になったらもうちょっと扱いやすくしたいな。
- Log level に合わせるとか、 Event level に合わせるとか
- とりあえず、カラー変更と通知チャンネルの切り替えができればええかなぁ、と。
ハマった...。
- env を更新しても rails c で反映されず・・・。しばらく悩んだが、 spring stop で反映され、Rails.env による通知先切り替えが出来るようになった。
Discussion