「在宅勤務中のIT備品受け渡し問題」をSlackアプリとロッカーで自動化した話

こんにちは。メルカリIT Serviceチームでコーポレートエンジニアをしているyoshioです。

IT ServiceチームはCorporate Engineeringチームの配下にあります。そんなCorporate Engineeringチームが掲げる合言葉は「最高のProduct Experienceのためには最高のEmployee Experienceを」です。

本記事では、ロッカーを用いた物品受渡しをSlackコマンドとスプレッドシートで自動化した話を書きます。

この記事に登場する人


  • 木村喜生(Yoshio Kimura)

    IT Service Teamのコーポレートエンジニア。2020年9月にメルカリ入社。前職では社会人向けプログラミング学校→独立してエンジニアとしてサービス作りや受託開発など。入社後はメルカリHDメンバー向けのGoogle Apps Script講座の開催やGoogle Data Portalと各種APIを用いたチーム用ダッシュボードの開発、入社時アカウント発行の自動化などを担当。 Slack名は @440_yoshio。


なにが課題だったのか?

 

弊社は、2020年2月より原則在宅勤務へ移行しました。その後も、メンバーは自宅からのリモートワークを継続しています(2021年6月現在)。

リモートワークへ移行したことにより、ITチームのメンバーも出社日数が絞られ、管理している社用PCなどの備品をメンバーが欲しいタイミングで受け取れない問題がありました。また、故障などの緊急時は物品の受渡しのために、ITチームのメンバーが緊急出社せざるを得ないこともありました。

昨年の感染状況が落ち着いていた時期は、最低1人は自発的に出社するメンバーがオフィスにいる状況でした。でも、2度目の緊急事態宣言時には出社も減ってしまいました。そのため、メンバーの緊急出社をなくし、かつ必要な物品をすぐに受け取れる仕組みを構築する必要がでてきたのです。

自動ログを残してくれるロッカーは高額

 

初めに、現状の運用の見直しと要件の整理をしました。

・ PCが遠隔からでも受渡しできる
・ 入館カードを忘れていたとしても使える
・ 非エンジニアのメンバーでも設定変更のコストが低い
・ PCが入れられる

as isとto beに分けて全体をフローチャートに描き、どの工程でどのような問題があるかをプロセスごとに整理しました。

当初は、遠隔地からネットワーク経由で鍵を開けられる電子式のロッカーを導入しようという方向で話を進めていました。

しかし、人の取り出し情報を自動で残すためには入館カードが必要だったり、遠隔操作するためのソフトがWindowsでしか使えなかったり、UIが使いづらいものだったり、費用面でも現実的ではなかったり…などの問題がありました。

そこで改めて検討し直し、入館カードで開けられる機能を要件から外しました。(忘れたときにも使うことが想定されるためです)

また、遠隔で入館カードの番号を変更できる機能も議論を重ねた上で要件から外してしまいます。鍵番号の更新を定期的な出社日のタイミングで手作業で行う形に変更しました。

アナログ式のロッカーの鍵番号を、必要時にSlackコマンドを打ち込むことで受け取れるようにしました。それにより、在庫ステータスは使い慣れたスプレッドシートで管理。そして、Slackコマンドとシートを連携させました。

結果的に、必要なツールを内製することで、最初に想定していた費用を大幅に抑えることができました。

どう使うのか

 

使い方は以下です。

Slackで特定のスラッシュコマンドを打つと、モーダルウィンドウが立ち上がり、「取り出し」か「返却」かを選びます。「取り出し」を選択すると、在庫があれば、その中から空いている番号を探し、一番若いボックスのカギ番号が返答されます。

管理側は、このようにコマンドの投稿によりスプレッドシートのステータスがリアルタイムで更新され、シート上に記入した鍵番号を返します。

シート上で在庫がなかったり、返却場所にすでにものが入っている場合は、もちろんエラーメッセージが返ってきます。

システム構成

 

Google Cloud Run & Node.js & Slack Bolt SDK(以下、Bolt)& Sheets APIを使って実装しました。

Boltとは、Slack APIを使いやすくするためのフレームワークです。

Boltを使うことで、セキュリティ観点からコマンド送信時のリクエストが本当にメルカリ配下のSlackワークスペースから飛んだものなのかをチェックする実装を省くことができています。

地味に辛いのが、APIのコールに3秒制限のルールがあることと、入力フォームをHTMLではなくJSON構造で定義するため「必須」の設定にできないことです。

前者については、本来であれば返却時にボックス番号を選択する際、選択肢に今借りているメンバーの名前が表示されていると、ユーザー目線から見ても嬉しいです。

しかし、リクエストのたびにAPI経由でスプレッドシートの在庫の状態を見にいくと、接続に時間がかかりタイムアウトしてしまう。そのため、いったん実装は見送りました。

地味なこだわりポイントとしては、ボックス位置とカード枚数の変更に強くした点です。

カード枚数を何番のボックスに入れるか、番号が変わったり枚数が増えたりする可能性もあります。その部分は変更が入っても修正が入れやすいように実装しています。

返却部分もボタン付きのSlack DMで後追いしてくれると良いな思っており、この部分は追加で実装していきたいと考えています。

リリース後、利用したメンバーの感想

 

Slackアプリのアイコンデザイン、アプリ上の文言の翻訳、耐震やインテリアの観点を踏まえた工事の実施、コードレビュー、セキュリティ観点でのレビューにおいて、それぞれWorkplace Team、Global Operation Team、Design Team、System Engineering Team、Security Teamなどさまざまなチームにお知恵を借りて無事に4月初旬から利用開始。(みなさま、大変ありがとうございました)

要望のあったメンバーへコマンドでの鍵番号の受渡しをしたところ、以下のような感想をもらうことができました。

メルカリではCorporate Engineeringチームではソフトウェアエンジニアを募集中です!!

 

現在メルカリのCorporate Engineeringチームでは、ソフトウェアエンジニアを募集中です。以下のようなポイントが個人的には良いと感じています。

・ 働くメンバーがIT活用に積極的かつ協力的で尊敬できる(All for Oneを大事にしています)
・ 過去の制約なく、モダンな環境での技術的挑戦ができる
・ 要件定義から技術スタック、実装方法まですべてにおいて主体的に関われる
・ グローバルを含めたメルカリグループ全体のシステムに携われる

ご興味ある方はぜひ!

関連記事 サクッと読める!✨

【随時追加】メルカリグループ関連のMeetyページが63個あったので、話すネタを全部見てみた #メルカリな日々 #Meety

【メルカリShops誕生】代表取締役CEO 石川佑樹が実現したい世界とは…? #メルカリな日々

「Mercari Summer Internship 2021」の募集を開始しました! #メルカリな日々

関連記事 読み応えアリ✨