サービスを運営する上で、利用状況をチャットに適切に通知することで、開発効率やモチベーションを向上させることができます。 ここでは、通知する項目の設計と、RailsアプリケーションでSlackに通知するための実装方法について解説します。

前提

この記事では、アプリケーション本体に実装する通知について言及します。

プルリクエスト作成時やCIに失敗した際、またデプロイ時にSlackに通知する方法もよく行なわれますが、これらは外部サービスに関するテーマのため、ここでは省略します。

項目設計

チームで利用するチャットに通知する項目として、おおまかに次のようなものが考えられます。

1. 統計情報

前日のPVやUU、新規ユーザ数などを通知します。

サービスのKPIをもとに、改善すべき数値を日々通知することで、KPIの重要性をチームに浸透させることができます。

2. エラー情報

アプリケーションにエラーが生じた際にSlackに通知することで、いち早く対応することができます。

Railsアプリケーションの場合、exception_notificationというGemを導入することでこれを簡単に実現できます。

3. 問い合わせ状況

ユーザからの問い合わせや意見を通知することで、対応する担当の決定や返信内容に関する議論をスムーズに行なうことができます。

4. セキュリティ関連

これは自動テストでも安全性を十分に担保すべきですが、たとえば(意図的であったとしても)権限が大きなユーザレコードが作成された場合に通知することで、開発者全体にこれを周知することができます。

他にも、重要な処理がなされた際に通知することで、緊急時の対応を速やかにとることができます。

5. モチベーションが上がるもの

たとえばメディアならRSSの購読者数、コミュニティならユーザがコアなアクションをとった数など、サービスを運営していく上でモチベーションが上がる項目を通知すると、単純に楽しいです。

サービスを運営する上で、開発のモチベーションというのは非常に重要なテーマだと思うので、ぜひ適切に設計したい項目のひとつといえます。

備考

以上のように、運営に役立つ通知ですが、通知しすぎるのも問題です。

ただでさえSlackは情報過多に陥りやすいツールです。 必要最低限の項目に絞ったり、定期的に項目を見直すなど工夫してみましょう。

導入方法

次に、RailsアプリケーションからSlackに通知する方法について解説します。 これはslack-notifierというGemで実現できます。

1. インストールする

まずはGemfileにこれを追記し、bundle installします。

Gemfile:

gem 'slack-notifier'

2. 通知処理を実装する

あとは、Slackへの通知を行なうメソッドをコントローラ層から参照できるどこかに実装し、通知したいところから呼び出せばよいです。 以下に例を示します。

def notify_to_slack(message)
  notifier = Slack::Notifier.new(
    ENV['SLACK_WEBHOOK_URL'],
    channel: '#general',
    username: 'notifier'
  )

  notifier.ping(message)
rescue => e
  logger.error(e)
end

あるいは、Mailerと同じようにapp/notifiers下にNotifierという新しい責務をつくるのもよいかもしれません(例:ContactNotifierクラス)。

おわりに

開発者には、サービスの利用状況は見えづらいことと思います。 開発を楽しく行なうためにも、チャットの活用を工夫してみてはいかがでしょうか。