リモートワーク Slack Bot

GMOペパボにおけるリモートワークならではのSlackボット活用について

リモートワーク Slack Bot

 こんにちは、最近我が家では「さちょにー、さちょにー」と梨泰院クラスロスが勃発しています、P山です。今日はペパボで最近運用を始めて、これはムーブメントが起きている!!1 というくらい普及している、離席応答ボットについて紹介します。

導入のきっかけ

 P山は普段、コンパイルの待ち時間や、集中が切れたときに、いろいろなチャンネルを徘徊しコミュニケーションを図るときがあります。そのときにペパボのパートナー(※)がランチに行く際や、ちょっとした離席の時に 「ランチ行ってきます〜」「10分離席します〜」 というような発言をしていることに気づき、下記のことを感じました。 ※GMOインターネットグループでは従業員のことをパートナーと呼びます。

  1. Slackは比較的流れの早いコミュニケーションツールであるから、すぐに情報が見えなくなってしまう
  2. 人類はそれらの発言をみても、人数が多いと誰がランチに行っている、離席中ということを覚えていることが困難
  3. Slackは複数チャンネルある並列コミュニケーションであるから、発言したチャンネル以外には離席が伝わらない

 また、リモートワーク前は普段仕事を一緒に行っているチームメンバーであれば顔を上げれば在席状況が視覚を通じてすぐにわかったので、それを再現する仕組みを作り込み、在席状況を簡単にみえるようにするのは一つの手段であると思いますが、一方でリモートワークという状況においては相手の在席有無を気にするような 同期的なコミュニケーション よりも、相手の在席有無を気にしない 非同期的なコミュニケーション がマッチすると考えています。

 理由はリモート前提となると同じオフィスで働くことに比べて相手の在席を知ること、その行為自体がこれまでオフィスを見渡せばわかっていたものが、それに変わる仕組みの作り込みや、またはステータスメッセージの参照など一定の手間が発生すること、加えてリモートワークの性質上、自宅のキッチンでコーヒーを入れることもあれば、子供が野生のポケモンを拾ってきて、それに対応している間のちょっとした離席など、暮らしと密接 であるがゆえに、オフィスで仕事しているときよりも離席が発生しやすい状況にあると考えています。

 要するにこれまでオフィスで働いていたときに視覚、聴覚によって得られた情報が少なくなること、リモートワークという働き方は副次的により多様な働き方を許容している側面があるので、考え方を変える必要があると考えています。

具体的なアプローチ

 これらを鑑みた結果、いわゆる離席代理応答をするアプローチをとりました。相手がいるか、いないかをメンション時に代理応答することで、必要な時に必要な情報を伝えるようにしました。これによりまず相手の離席を話しかけたときに即時わかるので、メッセージの送り手は離席に応じたアクションをすぐに起こすことができるし、どのチャンネルでのコミュニケーションにおいても離席を必要な人に伝えることができます。

自動応答の例1

 登録のインターフェイスはスラッシュコマンドを採用しました。下記のように登録することが可能で、 /afk コマンドの他に /afk_30 といった具合に、30分後に自動解除するようなコマンドや、ランチに行く際に利用する /lunch コマンドなどがあります。

スラッシュコマンドを利用した登録

システム概要

システムの構成としては下記のとおりです。

構成図

  1. ユーザーがスラッシュコマンドを実行するとAPIのエンドポイントがコールされ、APIはRedisに誰が離席しているのかを登録する
  2. Redisに登録された内容に基づきSlackボットがチャンネルを監視し、離席中のパートナーにメンションが飛んだ場合、代理応答する

実装言語としてはRubyを採用し、slack-ruby-botsinatra を用いて開発しました。

発生した課題

 リリース当初はSlackのスラッシュコマンドを用いて、離席登録をするとメンションを受けたときのみ、代理応答するようにしていましたが、リリース後、人類を観測していると、スラッシュコマンドのあとに離席理由をわざわざチャンネルに投稿しているのを発見しました。また各チームのマネージャーからの困りごとをヒアリングしたところ、ペパボのリモートワークのルールとして勤怠連絡をSlackでマネージャーに行うというルールがあり、マネージャーとしてはその情報が必要であるという事がわかってきました。これらはリモートワークにおいても勤務状況の把握をするという側面と、各パートナーに勤務報告の習慣を持ってほしいという意図からルール化されています。

 これについてはP山自身が裁量労働という雇用形態で、働き方についてはかなり裁量を有していることから、自分以外のパートナーの働き方に対する視点が漏れていたため、機能のミスマッチが生まれていました。対応として、スラッシュコマンドの引数で登録したメッセージをスラッシュコマンドを実行したチャンネルに投稿するようにしました。

/afk 散歩に行くのでしばらく離席します。

離席理由を投稿してくれる

意外な発見と付加価値の提供

 ペパボでは全社員がフレックス勤務かつ、介護や育児における時短勤務も認められています。これらの制度により、それぞれ始業時間、退勤時間が異なります。始業前や、退勤後にメンションが飛んでくることもしばしばあるので、退勤後に離席応答を行うコマンドとして /finish を追加しました。同じ離席を伝えるのに、コマンドを分けた理由は退勤時にペパボで利用している勤怠システムのURLや工数管理システムのURLを通知することでユーザー体験を高めたかったためです。そして、さらに退勤の対となる、始業時に実行する /start も追加しました。こちらも同じく登録時に勤怠システムのURLを応答します。この実装の結果、意外なことがおきました。それはこれらの機能を追加することで驚くほどこの離席応答ボットの利用が促進されたことです。当初は離席を伝えるだけのボットでしたが、離席は勤怠と密接に関わるため、勤怠に対する機能の追加が利用者であるペパボのパートナーにとってのキラー機能となったのだと思います。

面白い使い方紹介

 エゴサーチをするなかで面白い使い方がいくつかあったので紹介します。

離席とともに相手に望む行動を記載する

急ぎなら電話してほしい

 先週はお盆休み中で多くのパートナーがおやすみでした。急ぎの場合にどういった行動を望むかを書いてあるので、メッセージの送り手が次の行動に移れる模範的な例でした。

自分で袋とじを開ける系

自分でいっちゃう

 /lunch コマンドは引数を取れるようにしてあり、 /lunch 今日はカレーが食べたい といった具合に登録できます。また /lunch コマンドは登録時に、 xxxxxがランチに行きました。何食べるんでしょうね? と自動で登録してくれるので、それに対する袋とじ的に遊べるようになっています。森田さんは (@tascript) 見ている限り、だいたいこのように自分で自分にメンション飛ばして一人遊びしていることが多いようでした。

その他の機能

 離席登録以外に、取引先の従業員が存在するチャンネルなど、ボットに反応させたくないチャンネルを除外するための /disable_afk といったコマンドや、始業時間、ランチに行った時間などを確認できる /stats_afk といったようなコマンドがあります。今後もボットのもともとの責務である離席応答を大きく外れない範囲で機能追加を行っていく予定です。

最後に

 P山はペパボにおける基盤サービスの開発運用に加えて、こういった業務改善系のボット開発や業務改善の仕組みの開発を多く手掛けています。そのなかで大事にしていることはリリース後にユーザーの使い方や、感想を徹底してエゴサーチすることで潜在ニーズを検知して先回りして改修したり、次に手掛ける仕組みのヒントにしています。これらはWEBサービス開発において日常的に行われていることだと思いますが、社内で提供される仕組みについてもこれは必須の取り組みだと思います。なぜならばWEBサービス開発において、パートナーの生産性の最大化は競争優位性になると考えているからです。加えて、「なんかこの仕組みだせぇなぁ・・・・」とか「この操作とか登録いるんかなぁ・・・」とか毎日思いながら仕事しても楽しくないですよね?そういった疑問や不満を解消していくというのも非常に大事な仕事だと思っています。

 さて、本題の梨泰院クラスからだいぶ話がそれてしまいましたが、今回紹介したボットは slack-afk として公開しているので、興味を持たれた方はぜひ自社に導入してみてください。