日報リマインダBotを作った

こんにちは、@enda531です。 Misoca Advent Calendar 2017 の17日目の記事になります。

前の記事は

merotan.hatenablog.com

これですね。HTMLとCSSだけでゲーム作っちゃってます。すごい! 私は140点が限界でした。

あしたはえんださんが「日報bot」について書いてくれるそうです!楽しみだな!

ということで、日報リマインダBotを作ってちょっとした改善をした内容を書こうと思います!

はじめに

Misocaではesa.ioに日報を書くことになっていますが、退勤前に別の作業をしていたりすると、 日報を書き忘れたりWIPのままにして帰ってしまったことが何回かありました。

そこで日報をリマインドしてくれるBotを作りました。

github.com

監視する日報の作成

自動esaやり機(esa_feeder) が自動で日報をWIPで作成してくれます。

f:id:endash:20171216170849p:plain:w300

Slackに日報へのリンク付きで通知してくれるのでとても便利です。

この日報の状態を監視するBotを作ります。

日報リマインダBot

日報リマインダBotは以下の4点を満す動作をするようにします。

  • 今日の日報がない場合はスキップする
  • WIPの場合とそうでない場合でメッセージとリンク先を変える
  • Slackへ通知する
  • 毎日決った時間に実行する

今日の日報がない場合はスキップする

土日祝日は休みのため日報リマインドをスキップさせます。 自動esaやり機は平日のみ自動作成できる機能があるので、 日報が作成されていない場合には通知をスキップさせるようにします。

daily_report = DailyReport.new(username: ENV['USER_NAME'], access_token: ENV['ESA_ACCESS_TOKEN'], team: ENV['ESA_TEAM'])

# 日報が見つからない場合には終了する
return unless daily_report.present?

DailyReport では esa-ruby を使って今日の記事一覧取得をして、自分の名前が入った記事を取得したりしています。

WIPの場合とそうでない場合でメッセージとリンク先を変える

WIPの場合は日報を書く必要があるので編集ページへ直で飛べるようにしました。

if daily_report.wip?
  # WIPの場合には日報を書くようにリマインドして日報編集ページへのリンクをつける
  status = :warning
  message = 'そろそろ日報を書こう!'
  link = daily_report.edit_url
else
  # WIPではない場合には完了済みのメッセージと日報へのリンクをつける
  status = :ok
  message = '日報完了してます :+1: お疲れさまでした。'
  link = daily_report.url
end

Slackへ通知する

事前に登録した Slack Incoming Webhooks を使ってメッセージを送信します。

Notify.new(webhook_url: ENV['SLACK_WEBHOOK_URL'], channel: ENV['SLACK_CHANNEL'])
   .call(message, daily_report.full_name, link, status)

Notify では slack-notifier を使ってSlackへ送信しています。

毎日決った時間に実行する

こちらについては、最初はDaemonでも作ろうかなと思いましたが、Cronで十分なのでCronで実行することにしました。

結果

f:id:endash:20171216171551p:plain:w330

f:id:endash:20171216171339p:plain:w300

こんな感じにSlackで通知してくれるようになりました。 退勤時間少し前に来るようにしています。

まとめ

esa-rubyslack-notifier を使ってお手軽にリマインダBotが作成できました。

リマインダが飛んでくることで日報をWIPにしたままにしたり、書き忘れることがなくなりました。 また、日報編集ページへのリンクが付いているので日報を書くまでの作業を減らせました。

今後も小さな改善を繰り返していきたいなと思っています。

明日は@mugi_unoがNuxt.jsの話しを書いてくれるそうです!楽しみですね。