ランチメンバーを自動でグループ分けしてくれるSlackbotをAWS Lambdaでサクッと作ってみた

こんにちは。プレイドの@monoiです。
プレイドでは主に管理画面周りの開発を担当しています。

さて、突然ですがプレイドには最近ある課題が浮上しています。
それはメンバーが増えるに伴って、コミュニケーションの機会がなかなかない人ができてしまうこと。

この課題には多くの会社が頭を悩ませていると思いますが、コミュニケーションと言えば何と言ってもランチですよね。
普段の業務であまり関わりのない人でも、一緒にランチに行けばそこには深い友情が芽生えるかもしれません。

そんなわけで今回は、ランチメンバーをシャッフルしてグループ分けしてくれるSlackbotを、AWS Lambdaを使って作成しました。

目次

  • プレイドのbot紹介
  • AWS Lambdaとは?
  • 作る
  • 完成
  • 最後に

プレイドのbot紹介

botを作る方法は様々あります。

プレイドにはすでに多くのおもしろいbotがいるので、これらを紹介しつつ、処理方式を検討していきます。

はる子さん

はる子さんは優秀な人事・労務管理botです。
勤務時間を管理してくれたり、社員のプロフィールを教えてくれたりします。

はる子さんは、社内に置いてあるMacBookAirにnode.jsサーバーを立てて動かしています。
以前はiBeaconを使って社員がオフィスにいた時間を把握し、自動で勤務時間を記録してくれる仕組みもありました。(リモート勤務や外出が多い社員の勤務時間をうまく取得できないため、一時休止中。)

KARTEくま

KARTEくまはCX(Customer Experience)チームをサポートするためのbotです。プレイドが提供しているサービスで、異常な数値が検出されていないか等のチェックを行っています。

Google App Scriptで定期実行し、SlackのIncoming Webhookを叩いています。

karte-hubot & DeployBot

日々のデプロイを補助してくれるbotです。
デプロイをするのにいちいちコマンドを叩くのは面倒だ、ということで、Slack上で特定のキーワードを打つとデプロイできるような仕掛けが作られました。

こちらはEC2インスタンス上で動作させています。
karte-hubotは名前の通りgithub社のhubotフレームワークを使っています。

さてどうするか。

完全に余計な手間ですが、まだ社内で使われていない方法で作ってみたい・・・!

というわけで今回はAWS Lambdaで作ってみました。

AWS Lambdaとは?

FaaS(Function-as-a-Service)の一種で、AWS上に関数を置いておき、インスタンスを立ち上げることなくクラウド上でアプリケーションを実行できるサービスです。
CloudWatch(定期実行)や、S3(データがアップロードされたら実行)など様々なAWSのサービスをトリガーにして実行させることができます。
2016年12月現在、Node.js、Python、Java、 C#に対応しています。

実際に処理が行なわれている時間のみしか課金されないため、常時動かす必要のないアプリケーションとは相性がいいです。
お昼の時間しか動かさない今回のbotにはうってつけですね。

作る

作成するbot

ランチメンバーを募集してグループ分けしてくれるランチくまbot

  • 12:00に「一緒にランチに行く人募集ー!」と誘いがくる。
  • 13:00に上のメッセージに対してリアクションした人を適度な人数でグループ分けする。

slackでBot Userを作る

まず https://slack.com/apps/build からBot Userを作成します。

作成が完了したら、登場させたいchannelにinviteしてあげましょう。

Lambdaのsetup

続いてAWSコンソールからLambda Functionを作成します。

今回は定期実行なので、トリガーはCloudWatch Eventを使います。
「平日12時」に実行の場合、CloudWatchのスケジュールはcron(0 3 ? * MON-FRI *)としてあげればOKです。

「平日12時」のCloudWatch Eventでは{"event_name": "send"}を投げるようにしています。
「平日13時」のEventでは{"event_name": "aggregate"}を投げます。
event_nameによって処理内容をハンドルします。

また、タイムアウトまでの時間がデフォルトでは3秒になっているのですが、slackのAPIを何度か叩くので念のため10秒にしておきます。

コードを書く

通常通りローカルでコードを書き、その後zip化してAWSのコンソール画面からアップロードします。
ブラウザ上でもちょっとしたコードを書くことはできますが、モジュールのインストールなどはローカルで行う必要があります。

ボタンひとつでテスト実行することもでき、デバッグも容易です。
もちろんただの関数なので、ローカルでも簡単にテストできます。

Lambda Function内からのみアクセス可能な環境変数をコンソール画面から設定することができます。
例えばCHANNEL名をここで設定できるようにすると、再アップロードせずに投稿先のチャンネルを切り替えられるようになり、テストが非常に楽になります。

その後はSlackAPIを見ながらコードを書き進めていきます。
SlackのAPIは非常に豊富でわかりやすいです。

完成

まずは自己紹介から入ります。
先ほど紹介したKARTEくまbotの作成者である@akobaさんからも受け入れられたようです。

12:00になるとlunchチャンネルにメッセージを投稿し、募集を開始します。
よく分からないリアクションもいっぱい付いてますが、lunch_kumaは余裕で全て受け入れます。

13:00になるとリアクションをしたメンバーをシャッフル、グループ分けします。
いい感じにグループ分けできました!

最後に

ウェブ接客プラットフォーム「KARTE」を運営するプレイドでは、KARTEを支える技術に興味を持つエンジニア(インターンも!)を募集しています。

詳しくはこちら(Wantedly)をご覧ください。 もしくはお気軽に、こちらの「話を聞きに行きたい」ボタンを押してください!