日報リマインダBotを作った
こんにちは、@enda531です。 Misoca Advent Calendar 2017 の17日目の記事になります。
前の記事は
これですね。HTMLとCSSだけでゲーム作っちゃってます。すごい! 私は140点が限界でした。
ということで、日報リマインダBotを作ってちょっとした改善をした内容を書こうと思います!
はじめに
Misocaではesa.ioに日報を書くことになっていますが、退勤前に別の作業をしていたりすると、 日報を書き忘れたりWIPのままにして帰ってしまったことが何回かありました。
そこで日報をリマインドしてくれるBotを作りました。
監視する日報の作成
自動esaやり機(esa_feeder) が自動で日報をWIPで作成してくれます。
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で実行することにしました。
結果
こんな感じにSlackで通知してくれるようになりました。 退勤時間少し前に来るようにしています。
まとめ
esa-ruby
や slack-notifier
を使ってお手軽にリマインダBotが作成できました。
リマインダが飛んでくることで日報をWIPにしたままにしたり、書き忘れることがなくなりました。 また、日報編集ページへのリンクが付いているので日報を書くまでの作業を減らせました。
今後も小さな改善を繰り返していきたいなと思っています。
明日は@mugi_unoがNuxt.jsの話しを書いてくれるそうです!楽しみですね。