プログラミング

RailsからSlackに通知する

ruby on rails eyecatch

railsで特定のアクセスがあったときや、特定の処理が行われたときに通知をSlackに飛ばすことで、アプリケーション運用の質を高めることが出来ます。

RailsとSlackの連携は簡単に実装可能ですので、その方法を記載します。

Slackの通知を受けるチャンネルを設定する

通知を受け取るチャンネルを作成する

まずはRailsからの通知受信専用のチャンネルを作成しておきます。

slack-new-channel

「チャンネルを追加する」をクリックし、必要事項を入力し、「作成」をクリックします。

Incoming WebHocksアプリを追加

次に作成したチャンネルに「Incoming WebHocksアプリ」を追加します。新規作成したチャンネルを開き、画面上部の「アプリを追加する」を選択し、表示される画面で「Incoming WebHocks」と入力します。

「Incoming WebHocks」のアプリが表示され選択すると、Slackのウェブサイトに遷移するので、そこで追加の設定を行います。

slack-incoming-webhock

チャンネルを選択し、「インテグレーションの追加」をクリックします。

slack-incoming-webhock

「Webhock URL」が表示されるので、どこかに文字列をコピーしておきます。

「Webhock URL」は、後ほど確認することが可能です。また通知される際のSlackに表示されるアイコン等も、この設定画面からいつでも変更可能です。

以上で、Slack側の設定は完了です。

RailsからSlackに通知を飛ばす

次にRails側の設定を行います。

SlackNotificationServiceクラスの作成

appフォルダ配下にservicesフォルダを作成し、その下に、slack_notification_service.rbを作成します。

# app/services/slack_notification_service.rb

class SlackNotificationService
  def initialize(**params)
    @params = ActionController::Parameters.new(params)
  end

  def send_notification(channel:, title:, body:)
    notifier = Slack::Notifier.new '取得したWebhockURL', channel: channel, username: title

    notifier.ping body, channel: channel
  end
end

柔軟に様々な箇所から通知を飛ばせる用に関数も用意しておきます。

SlackNotificationServiceを呼び出す

sns = SlackNotificationService.new
channel = "#作成したチャンネル名"
title = "test title"
body = "slack通知テスト"
sns.send_notification(channel: channel, title: title, body: body)

呼び出し側で「channel」「title」「body」を変更できるようにしています。

これで、通知テスト用のメッセージがSlackに飛んでくれば完了です。