リモートワークを快適に活用するためにSlackbot「ラヴィ」を作成した話

こんにちは。ぐるなびウエディング開発担当で新卒2年目の村山です。趣味はダイエットと二郎系ラーメン巡りです。痩せなくて困ってます。

今回はぐるなびウエディングの業務改善のために、リモートワーカー通知botを作成した話をしたいと思います。

bot の説明

リモートワーカー通知botとは、その通り、リモートワーカー、つまりリモートワークで働く人を通知するbotです。

私が作成したbotでは、毎営業日に当日と翌営業日にリモートワークをする人をSlackのチームチャンネルに通知してくれます。

通知botの通称はラヴィ。ラヴィはぐるなびウエディングのマスコットキャラクターが由来です。

ウエディンググループ内で親しみやすいbotにするためにマスコットキャラクターの名前で呼んでいます。このブログでも、通知Botを「ラヴィ」と呼んでいきます。

導入までの背景

リモワ通知bot「ラヴィ」の制作にいたっては以下のような経緯がありました。

ぐるなびでリモートワークのトライアルがはじまった頃、ウエディング開発グループでもリモートワーク利用する人が出ました。

ウエディング開発グループでは約8割の人数がリモートワークを活用。当初は、誰がリモートワークで働いているのか把握するのが大変でした。

また、開発グループ内では把握できても、企画のメンバーまでは情報が行き届いないことも。MTGに来ないと思ったら、リモートワークだった……なんてトラブルも発生してしまいました。

この状況を改善したいと思い立ち、何か通知する手段を作ろうと思い、botの制作に取り組みました。

作り方

使ったもの

以下のツールで作りました。

  • Google Apps Script
  • Slack API
  • Googleスプレッドシート
  • Googleカレンダー

Google Apps ScriptはGoogleが提供しているJavaScriptベースの開発環境。頭文字をとってGASと、よく略されます。以下の特長があり、便利です。

  • Googleのアカウントさえあれば簡単に利用できる
  • Googleが提供しているサービスと連携させるのが非常に楽
  • jsベースなので少しでも知っていればコーディングしやすい
  • 定期的な実行の設定も楽

リモワ通知bot「ラヴィ」はGASを中核として動いています。

Slack APIはコミュニケーションツールのSlackから提供されているAPI。その中でも今回使用したのはIncoming WebhooksというAPIです。特定のチャンネルへの文章投稿を簡単に実現してくれるという特徴があります。

Slackはぐるなびの企画開発本部のコミュニケーションツールとして正式導入されています

もちろんウエディング開発グループでも使っていて、グループチャンネルがあります。よく見てもらえそうなグループチャンネルに投稿するのが良さそうだな、と思ったのでSlackのAPIを使って投稿することにしました。

GoogleカレンダーはGASと同じくGoogleが提供しているカレンダーツールです。リモワ通知bot「ラヴィ」ではウエディング開発グループメンバーがリモワの予定を入れているかどうかを判断するために使いました。

GoogleスプレッドシートもGoogleから提供されているものです。ブラウザ上で使える、Excelのようなものですね。表形式でデータをまとめるのに適しているので、リモワ通知bot「ラヴィ」で使う一部のデータをデーターベース形式でまとめています。

これらを用いては以下の図のように作成しました。

f:id:g-editor:20180403105021p:plain

スプレッドシートには以下のデータを取得してきます。

  • 名前
  • カレンダーid(個人のGoogleカレンダーにアクセスするためのid)

取得してきたカレンダーidを元に個人のカレンダーを参照します。参照した個人のスケジュールの中の「リモートワーク」または「リモワ」などのワードを検出。リモートワークの予定が入っている人のみ配列に格納し、最後にまとめてSlackに通知します。なお、実行のタイミングは1日1回。午前8時57分におこないます。

そうして、実際に動いている様子がこちらです!

slackbot

今日も元気に、リモートワーカーを通知しております。

気をつけた点

作る上では、最低限通知してくれる機能を作成しbotを公開することを最優先にしました。このbotを作った主目的は「リモートワーカーを可視化させてウエディンググループ内で把握できるようにすること」。見た目や装飾は後回しです。

ものを作っていると、こうしたい、ああしたいという考えはたくさん出てくると思うのですが、それをぐっとこらえてまずは目の前の問題を確実に片付けることに注力したので、サイト開発のタスクとも並行して進めることができました。

難航した点

難航した点としては、テストの方法があげられます。botが正しく通知するか確認するために、どこかのテスト用チャンネルか個人チャンネルでテストしなければなりません。

個人チャンネルに通知を飛ばすつもりでいたのですが、送り先を誤って開発チーム全員がいるチャンネルに設定。botの通知が流れてしまいノイズになってしまいました。

トライアンドエラーも大事ですが、冷静になる必要があると考えさせられました。

実行してみて

周囲の反応

リモワ通知bot「ラヴィ」が使われはじめてしばらくした頃、企画の方々から「すごく便利。ありがとう」と声をかけられたのが嬉しかったです。私も、感謝の言葉は積極的に言っていこうという気持ちになりました。

一方、最近だとリモートワークを実施する曜日も各人ごとに把握されつつあり、私自身も通知を見なくても対応できることも多いです。使い続けてもらうためにはより便利に、ユーザーの気持ちに沿った改善が不可欠ですね。

改善したいところ

こんな感じで作ってきたリモワ通知bot「ラヴィ」ですが改善したい点もあります。

通知内容の見た目を良くしたい
今は急ぎで作ったので見た目にまだまだ改善させたいポイントはあります。Slack APIに適切なパラメーターを渡すことで、通知の見た目をカスタマイズできますのでこちらを用いてもっと見やすい通知にしていきたいと思います。

機能を増やしたい
通知だけではなく、Slackからリモートワークの予定を登録できたら便利だろうなぁと思っています。こういった機能を増やしてより便利なbotへと成長させていきたいです。

LT大会で発表

リモワ通知bot「ラヴィ」を導入してしばらくした頃、ぐるなび社内のLT大会に登壇して、作成から導入までの経緯を発表してきました。

リモワ通知bot「ラヴィ」の取り組みを知っていただきとても嬉しかったです。こういった場に出すと、もっとこうするといいね!って意見も貰えるのもいいですね。

slackbot

slackbot

SlackのLT大会実況チャンネルの様子

こんな感じで、新しい発想を頂けました。

ラヴィ、商標登録へ

LT大会の実況チャンネルで、以下のようなコメントをいただきました。

slackbot

そう。商標です。
村山(商標?商標ってそう言えば詳しいことわからないな.……。もしかして社内とは言えスライドにラヴィの画像使うのまずかったかな……)
こんな感じで内心一人で焦っていたのですが、純粋に商標登録されているのか知財チームの方が気になったようでした。後日確認したところ、ラヴィは商標登録されてなかったので知財チームのスピードプレーによりすぐに登録していただきました!

こんな感じで、取り組みを発表したら取り組みを知ってもらえること以外にもいろいろな発見、経験がありました。

ミスしたこと

一方、いろいろとミスしたことも……。

通知を暴発させる〜当日編〜

ぐるなびのLT大会にはSlackに実況チャンネルが用意されます。LT中に通知のデモをおこなうつもりでしたので、実況チャンネルにリモワ通知bot「ラヴィ」の通知が届くよう、大会の直前に設定しました。私が登壇する1つ前のセッション中、状態が最新であることを確認するために、cmd + Rを押したときのことでした。

なんか見たことある通知が実況チャンネルにあるな...って思ったらリモワ通知bot「ラヴィ」でした……。 MacでGoogle Chromeを見ているとき、cmd + Rは更新のショートカットキーですが、GAS画面上だと、ソースを実行するショートカットコマンドになっているようです……。ただ、ぐるなびの皆さんはPerfectに優しいので

slackbot2

slackbot3

積極的に発言して投稿を流し、10分前の通知暴発の記憶を滅してくれました。ありがとうございます。m( )m

通知を暴発させる〜後日編〜

村山のダメなほうの快進撃はまだまだ続きます。LT大会が終わって連休が開けた日、リモワ通知bot「ラヴィ」が連休中まるまる通知をLT大会の実況チャンネルに飛ばしていました。

今回は、通知テスト用の関数をさらにLT大会向けに書き換えたのですが、コードを流用した結果、トリガーが設定されてしまったことが原因です(´;ω;`)
何も考えず無闇にコードを流用しないことが再発防止策です(´・ω・`) 。

発表だけに気が行き過ぎていてもダメですね。ちゃんと前後も気を引き締めないといけないなと思いました。

まとめ

リモワ通知bot「ラヴィ」を作ったことで、問題発見から技術によって解決させ、ユーザーからお褒めの言葉をいただく……というエンジニア冥利に尽きる流れを経験させていただきました。

また、LT大会で取り組みを発表する機会をいただけたこと、発表に対して様々な意見を頂けたことが非常に良い経験になりました。

自分の成果物のアウトプットは、自身の学習のためにも非常な大事なことであると言われています。単純な仕組みだし発表してもな、と個人的には思っていたのですが、意外と高評価だったこともあり、自信につながりました。

一方、反省点もあります。急いで作った結果、プログラムが雑になってしまい、新しい機能の追加にチャレンジしようにも上手く進められませんでした。

この先も使ってもらえるbotであるためには、誰が読んでもわかりやすいプログラムである必要があると思います。 なので、時間があるときにプログラムのリファクタリングに挑戦します。

今後も今回の経験を通して、エンジニアとして成長していきたいと思います。


お知らせ
ぐるなびでは一緒に働く仲間を募集しています。


村山 公啓
ぐるなびウエディング開発を担当。悩み事は10歳上に見られること!
最近は読書と減量に熱が入る23歳ッ!!!23歳ですッ!!!!!(2017年現在)
Facebookには増え続ける体重のグラフを載せつつ今日も元気に開発中!