(※システム部益山により和訳しております。オリジナル英語版はこちら https://gmor-sys.com/2020/12/23/slack-bot-en/)
こんにちは!GMOリサーチのアントニオです。
GMOリサーチで働き始めて2年とちょっとが経ちました。
僕はメキシコ出身ですが、2018年にヨーロッパで修士課程を終えた後に来日し、それからずっとGMOリサーチで働いています!
実はこの世界的なパンデミックの発生により、実家からのリモート勤務許可をいただきました。
ということで、初夏の頃から5ヶ月間、僕は14時間の時差があるメキシコから勤務しています。
今回このブログでは、GMOリサーチシステム部のメンバーによって作成された「ちょっと仕事が楽になる」Slackbotをご紹介していこうと思います。
Slackといえば、チームで気軽に使えるコミュニケーションツールとして広く知られていますね。
また、チームの生産性を高めるいくつもの便利な特徴を備えています。
Slackは、チャネルベースのメッセージング・プラットフォームで、使用することで、より効率的に共同作業を行うことができます。
更に様々なツールやサービスを接続し、仕事に必要な情報を見つけ出すことも可能です。
Slackは数多くあるメッセージツールの一つに過ぎませんが、中でも多くのユーザーからの人気を博しているのには、他のアプリケーションとの連携が容易なこと、そしてユーザ独自のプラグインやbotを作成することが可能なこと、等の背景があると思います。
Botとは?
botとは、コンピューターの裏で動作しているソフトウェアの一種であり、外部からもたらされるトリガーに反応して、目標に向かって何らかのアクションを起こすものです。
botを活用できる状況は多種多様であり、適切に使用することでチームの生産性を大幅に向上させることが可能となります。
GMOリサーチでも、ある特定の単純作業を何度も繰り返す必要がありますが、そのような作業はbotやアプリなどを通じて自動化が可能です。
それでは早速、僕たちシステム部のメンバーが独自に開発したSlack botをご紹介して行きます。
Slack-translate-bot
GMOリサーチには様々なメンバーがいて、中には日本語がまだあまり得意ではない外国人メンバーや、英語があまり得意ではない日本人メンバーもいます。
このような場合、Google翻訳やDeepL翻訳などオンラインで利用できる翻訳ツールが大変便利ですが、メッセージを読みたい人だけが個人的に翻訳する必要があったり、いくつのもメッセージをいちいち別のサイトにコピーアンドペーストで翻訳するのは時間の浪費であったり、という問題点がありました。
この面倒な翻訳作業を、Slack内で、リクエストに応じて実施できるようにしたらどうだろうか。
そんな思いから開発されたのが、「slack-translate-bot」です。
このbotでは、リクエスト時にSlack内の日本語、英語、中国語、そしてスペイン語で書かれた文章を、これらの中のどれかの言語に翻訳することが可能です。
このbotは、翻訳したい文章に絵文字のリアクションを付けることで起動します。
リアクションに使用する絵文字は、その国で話されている言語に対応する国旗である必要があります。
すなわち、以下のように対応しています。
🇯🇵 日本語
🇺🇸 英語
🇪🇸 スペイン語
🇨🇳 中国語 (確か北京語だったはず)
国旗の絵文字がリアクションされると「スレッド」部分にその国旗に対応した言語の翻訳文が、コメントとして表示されます。
同じメッセージに対して、違う言語の翻訳を同時にリクエストすることも可能です。
例えば日本語の文章に対して英語とスペイン語のリアクションをしたら、それぞれ別のコメントとして翻訳文が表示されることになります。
ちなみに、同じ言語のリアクションを何度行っても、翻訳文がスレッドに書き込まれるのは一度だけです!
このslack-translate-bot はシステム部の優秀なシニアエンジニアの一人である岡崎さんによって開発されました。
岡崎さんによると、このbotはラムダ関数とAWSの翻訳APIの2つを組み合わせて作られたものとのことです。
絵文字でのリアクションがラムダ関数を実行するAPIをコールするトリガーとなっていて、ラムダ関数がリアクションされた絵文字の国を判断し、もしそれがサポートされている国であればAWSの翻訳APIを呼び出す仕組みとなっています。
このAPIは、要求された翻訳を返し、ラムダ関数を通じて、Message Get / Post Slack APIを呼び出して、スレッドに書き込みます。
slack-translate-botは現在Slackワークスペース内で広く使われています。
主に日本語と英語の翻訳に使われていますが、中国語とスペイン語のサポートが追加されたことで更に包括的となりました(素晴らしい!)。
support_tool:
システム部の業務の一環として、サービスの運用に関しての他部署からの問い合わせへ答える必要があり、その際、システムログやデータベースを深く見なければならないこともあります。
何度も問い合わせに対応しているうちに、問い合わせを担当しているクラウドパネルのチームは、問い合わせの種類に傾向があることに気付き始め、その一部をbotを使って自動化できるのではないかと判断しました。
そうして作成された「support_tool」は、2つのスラッシュ(/)コマンド、monitor_statusとsend_sales_reportを実行することができます。
スラッシュコマンド monitor_status はその名の通り、モニター、つまりアンケートに答える人のステータス情報を提供します。
主に、モニターが有効かどうか、アンケートに答えられるかどうかを知るために使用されます。
モニターが何らかの理由でアンケートに回答できないようになっていたり、サービスから退会していたりする可能性があるといった理由から、時にこのような調査が必要となります。
次に、もう1つのsend_sales_report スラッシュコマンドについてです。
このコマンドは、Slackの会話に関連する情報を表示しないので、先ほどのコマンドとは大きく異なり、国内の営業チームに提供するための営業情報を更新するコマンドになります。
この情報の更新は営業チームからの依頼で行われるものであり、サービス自体に関わりのある業務ではないので、Slack内のスラッシュコマンドにしました。
support_tool は元同僚の Jimmy (王)さん が作ってくれたものです。
彼は現在一緒に仕事をしていませんが、このツールの話をするときはいつも彼のことを懐かしく思っています。
このツールのおかげで、上の2つのような反復的な作業ではない他の作業を行う時間が増えました。
Today’s CRON check:
こちらのbotはメンバー持ち回りで実施していた繰り返し作業の「今日の当番」をお知らせしてくれるbotです。
しかし、次に紹介する「4.cron-cheker」というbotの開発により、この繰り返し作業自体を実施する必要がなくなったためためこのbotはもう稼働していません。
代わりに、エラーが発生した場合はいつでもSlackのチャンネルに通知が届きます。
1年ほど前まで非常に活躍していたbotなので、ご紹介させていただきます。
GMOリサーチが提供する、巨大なプラットフォームであるMarket Observerでは、日々様々なプロセスがバックグラウンドで実行されており、それが非常に重要な機能を提供しています。
社内で「クーロンバッチ」と呼ばれているこれらのプロセスは、様々な理由で実行に失敗することがあります。
これらのCRONバッチが失敗すると、どこでいつ失敗したのか、どのようなタイミングで失敗したのかが自動的にメールで送られてきます。
この情報があれば、エラーが発生した場所を特定することができ、バッチを再実行するなどして、エラーから回復することができるのです。
先ほどエラーメッセージがメールで送られてくると説明しましたが、私たちシステム部が受け取るメールの数は(そのようなシステムプロセスに関するものを含めると)膨大なため、すべてのメンバーが、受信したすべてのメールをチェックすることは非常に非効率的です。
そのため、システム部メンバーの内一人が毎日、ある日に発生した可能性のあるエラーをチェックするように社内で決められていました。
ただし、自分がCRONをチェックする順番がいつだったかうっかり忘れてしまうこともありますよね。
ということで、リマインドしてくれるbotがあるといいよね、と作成されたのが「 Today’s CRON check」botです。
毎日午前9時47分に、その日のcronの担当者をタグ付けしたメッセージをbotが出力してくれます。
Today’s CRON check botは、弊社のPHPエンジニアの一人である向井さんによって開発されました!
cron-checker
本章でご紹介する「Cron-checker bot」も先ほどご紹介した「3.Today’s CRON check」と同様、Market Observerおよび関連製品内で様々な目的のためにバックグラウンドで実行される「cronバッチ」に関連しています。
また、最近(※2020年11月現在)ほとんどのcronバッジの管理を外部ソフトウェアに移行したため、こちらのbotも現在は稼働していません。
こちらのbotには様々な機能があるのですが、その中でも代表的な機能をご紹介します。
Cronバッジ実行時、たまに何らかの原因で失敗してエラーが出ることがあります。
その際、バッジ実行時に自動で送信されるメール本文中に「エラー」を示す文章が書かれており、システム部メンバーが持ち回りでエラーが出ていないかメールの本文をチェックする必要がありました。
これが1つや2つなら良いのですが、一時期は200個以上のcronバッジが動いていたので、この作業がとても大変でした。
と、いうことで開発されたのが、cronバッジ実行時のエラー検出を自動で行ってくれる「cron-checker」です。
これは、AIチームのリーダーである福原(ふくはら)さんによって作成されました。
このbotの出力は下記キャプチャのように日本語のみですが、以下にこのbotの出力の翻訳を記載します。
This is the standard version. Good morning. I checked the email for you.[Email body log link]
There may be an unknown NG word. Please confirm.
[Title log link]
The title log will contain the titles of all emails identified by this tool.
[Execution log link]
This is the execution log.
終わりに
上記では、Slack内で使用されている便利なbotツールのいくつかを紹介しました。
これらのbotのおかげで、多くの繰り返しが必要な時間のかかる作業が解消され、間違いなく生産性が向上しています。
ちなみに現在、僕は余暇の時間を利用して「postcard-bot」という小さなbotを開発しています。
これは生産性を上げることはできないかもしれませんが、社内のポジティブな環境を醸成することを目的としています。
これについては、今のところ詳しくは触れませんが、次回のブログを楽しみにしていてください!
それでは、最後まで読んでくださってありがとうございました!!
*
GMOリサーチでは、WEBエンジニア(サーバーサイド、インフラ、フロントエンド)を随時募集しております。
興味のある方は、ぜひこちらからご応募ください!
詳しい募集要項など採用情報はこちら
参考
Slack. What is Slack? Date of access: Nov. 6th, 2020.
https://slack.com/help/articles/115004071768-What-is-Slack-