【Rails】Slackに通知する方法


はじめに

今回はSlack Webhookを利用して、RailsアプリからSlackに通知してみます。

Slackに通知させる方法

必要なGem

Gemfileに以下の二つを追記しましょう。

Gemfile
gem 'slack-notifier'
gem 'dotenv-rails'
ターミナル
bundle install

slack-notifierはその名の通り、Slackに通知を送る際に利用します。

dotenv-rails.envに定義した環境変数を読み込むことのできるgemです。
よく使うgemなのでこちらも一読しておきましょう。
今回は後述するSlackのWebHooksURLとchannelを環境変数で管理する際に利用します。

Slack WebHooksURLを取得する

①以下のURLにアクセスする。
https://slack.com/services/new/incoming-webhook

②「Post to Channel」のセレクトボックスから通知したいチャンネルを選ぶ。(私はgeneralにしました)
③「Add Incoming WebHooks integration」を押して発行する。
④以下の画像のようにURLが表示されるため、コピーしておく。他人に見せないよう注意して管理してください。

Railsに設定する

アプリのルートディレクトリに.envというファイルを作成しましょう。
ここで環境変数を設定します。

.env
SLACK_WEBHOOK_URL=https://hooks.slack.com~~~~~ #取得したWebHooksURL
SLACK_CHANNEL=general #指定したチャンネル名

続いて、.envをgitの管理対象外にします。
ルートディレクトリの.gitignoreに以下を追記。

.gitignore
/.env

もしルートディレクトリに.gitignoreが作られていない場合は作ってください!
(PCによってはrails newした時に自動で生成されない場合があります。)

これを記述しないとGitHubにpushした時.envが公開されてしまいます!!

呼び出してみよう

通知したい場所で以下のように記述すればOK

○○_controller
notifier = Slack::Notifier.new(
  ENV['SLACK_WEBHOOK_URL'],
  channel: "##{ENV['SLACK_CHANNEL']}",
  username: '通知です'
)
notifier.ping '通知テキスト'

これで通知されるようになりました!

終わりに

お疲れ様でした。
例外や通報機能を実装した際にも設定できそうですね。