窓際BLOG

プログラミングの学習メモや書籍の感想等を公開していきます。

RubyonRails:Slack通知処理を実装する

Moook(https://moook.herokuapp.com/)を運用していて、毎日管理画面を確認するのがめんどくさかったので、新規ページが追加された時にSlackに通知が送られるようにしましたφ(..)

その手順をメモしておきます。

やりかた

gemのインストール

今回は、slack-notifierというgemを使って実装していきます。

github.com

まずは、Gemfileに下記を追記して、bundle installを行います。

gem 'slack-notifier'

Slackの設定

slack-notifierではIncoming WebHooksWeb hook URLを使用して通知を送信します。
通知を送りたいワークスペースのチャネルの歯車マークからAdd an Appをクリックします。

f:id:madogiwa0124:20171126212742p:plain

その後、遷移先の画面にてIncoming WebHooksを検索し、Add Configrarionをクリックします。

f:id:madogiwa0124:20171126210215p:plain

f:id:madogiwa0124:20171126210343p:plain

そしてWebhook URLを取得します。

f:id:madogiwa0124:20171126210601p:plain

ちなみにこの画面では、通知を送る名前やアイコンも設定できます。

項目 内容
Customize Name 通知欄で表示される名前を設定出来ます
Customize Icon 通知欄で表示されるアイコンを設定できます

Moookではこんな感じにしました(・_・)

f:id:madogiwa0124:20171126210850p:plain

通知処理の実装

実装内容はすごく簡単です。

  1. Web hook URLを引数にインスタンスを生成
  2. 本文を引数に通知送信処理を実行

サンプル

def notice_slack
  # 先程取得したWebhook URLを引数にインスタンスを生成
  notifier = Slack::Notifier.new(webhook_url)
  # 通知を送信
  notifier.ping("test")
end

Moookの実際の実装はこんな感じです。slackの通知処理は他でも使いそうだったのでapplication_controller内に記述しました。また、Web hook URLは.envを使って環境変数化しました。

application_controller.rb

  # slack通知用メソッド
  def notice_slack(message)
    notifier = Slack::Notifier.new(ENV['SLACK_WEBHOOK_URL'])
    notifier.ping(message)
  end

page_controller.rb

  def create
    @page = Page.new(page_params)
    @page.user_id = current_user.id
    @page.html = @page.get_html(@page.url)
    if @page.save
      redirect_to @page, notice: '新しいページを登録しました。'
      # ページ追加時に通知を行う
      notice_page_info(@page)
    else
      render :new
    end
  end

  def notice_page_info(page)
    # 本文を生成
    message = <<~"EOS"
      Moookに新規ページが登録されました!
      名前:#{page.name}
      URL:#{page.url}
    EOS
    # Slack通知処理を呼び出し
    notice_slack(message)
  end

実行例

こんな感じでSlackに通知を送ることが出来ましたヽ(´エ`)ノ

f:id:madogiwa0124:20171126211817p:plain

参考

qiita.com