Tech Blog

グローバルな家族アプリFammを運営するTimers inc (タイマーズ) の公式Tech Blogです。弊社のエンジニアリングを支える記事を随時公開。エンジニア絶賛採用中!→ https://timers-inc.com/engineering

Slack Bot 開発: Feedback Bot

CTOのアマドです。 今回は弊社でのslack bot活用の取り組みについて。

Feedback 文化

弊社のカルチャーのひとつに "Feedback" というものがあります: いろんな企画案や、ユーザーに送りたいアンケートなど、色々なものについて多角的な意見を社内でもらうことを推奨しています。 視点の多さとアウトプットの質は相関すると信じているためです。 ただ現実的に社内の色々な人に回って意見をもらっていくというのは大変になるので、 それを効率的にするために、Feedback Bot というものを作りました!

Feedback Botとは

こんな感じで動きます:

f:id:timers-tech:20161222161840p:plain

@timers-botfeedback という言葉をメンションで送ると、 botが社員リストから3人ランダムで選び、定型文と一緒にメンションを飛ばしてくれる、というシンプルなものです。 メンションを受けた人間は、フィードバック依頼をした人間から内容を聞き、適切な場所(spreadsheetなど)でフィードバックをする、といった流れが作られます。

実装について

今回botの実装には python-rtmbot を使いました。Pythonベースで RTM API (Websocket) を使うためのライブラリです。 Websocketコネクションの張ったプロセスが立ち上がり、pluginで定義されたプラグインモジュールが実行されます。 一般的なプラグインの作り方としては、

class MyPlugin(Plugin):
    def process_message(self, data):
        # dataに受け取ったメッセージが入ってくるので、ここでその内容を使った処理を行う

という形で、非常にシンプルに作れます。 今回の Feedback Bot もこれをベースに非常に簡単に作ることが出来ました:

def process_message(self, data):
    mention_pattern = re.compile(r'.*<@U12345678.*(feedback).*', re.DOTALL|re.IGNORECASE)
    if not ( re.match( mention_pattern, data['text'] ) ):
        return

    self.outputs.append(
        [data['channel'], u'今回のフィードバックメンバーはこちら!より良い体験を作るため、フィードバックにご協力ください :bow:']
    )

    i = 0
    random.shuffle(self.MEMBER_LIST)
    for member in self.MEMBER_LIST:
        if i >= self.FEEDBACK_MEMBER_COUNT:
            break
        self.outputs.append(
            [data['channel'], u'<@{}>'.format(
                 member
            )]
        )
        i += 1

こんな感じで書けば良いです( @U12345678botのuserID)。 今回の Feedback Bot では、ここで社員のハンドルネーム一覧配列( self.MEMBER_LIST )からランダムで3人( self.FEEDBACK_MEMBER_COUNT )を抜き出してアウトプットする、という風にしています。

botコードの管理

rtmbot の良いところはプラグインベースでの開発だということですね。ドキュメントにもありますが、 rtmbot.conf に実行したいプラグインをどんどん追加していけばそれらを実行してくれます。 なので、エンジニア同士で別のbotを開発し、それを一個の rtmbot プロセスで実行させておくことが可能です。

現状弊社ではいくつかのbotが動いてますが、各エンジニアが自発的に別箇所で作っていて別箇所で実行している状態になっているので、それらをうまく統合していく、ということをしていきたいなと思っています。

積極採用中!!

子育て家族アプリFamm、カップル専用アプリPairyを運営するTimers inc. では、現在エンジニアを積極採用中! 急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください! 採用HP : http://timers-inc.com/engineerings

Timersでは各職種を積極採用中!

急成長スタートアップで、最高のものづくりをしよう。

募集の詳細をみる