GitLabのコードレビュー依頼をChatWorkのタスク通知でランダムアサインしてみた

2018.04.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

オペレーションチームの下田です。 つい先日、GitLab のマージリクエストによるコード(ドキュメント)レビューの依頼を不特定のメンバーに対し ChatWork のタスクとして通知することによるレビューサイクル改善施策を行いました。 本記事では、その際の設定手順などについてご紹介します。

以前の記事でご紹介しましたが、弊社のオペレーションチームでは試験的に FAQ 記事(ドキュメント)を GitLab で管理し、GitLab のレビューシステムを活用して記事の作成作業を効率化するという施策に取り組んでいます。

筆者含め普段から GitHub や GitLab のようなサービスを利用しないメンバーが多数在籍しており、GitLab の利用方法を覚えるところから施策を開始したため、なかなかレビューが進まないという状況に陥りました。

そこで、あるグループに在籍しているメンバーの中から不特定の3名をランダムに選出し、3日後を期限とするレビュー依頼を ChatWork のタスクとして追加する処理を自動化することにより現状を打破しようと試みました。

なお、今回の自動化にあたって Zapier というサービスを利用しております。

やってみた

まずは、Zapier にログインし Make a Zap! ボタンをクリックします。

トリガーアプリケーションは、GitLab を選択します。

GitLab のトリガーとして、New Merge Request Event を選択し Save + Continue をクリックします。

Connect an Account から GitLab アカウントへの接続を行い、Save + Continue をクリックします。

今回は、GitLab の FAQ プロジェクトでマージリクエスト(ドキュメントのレビュー依頼)が作成されたタイミングで、ChatWork のタスク依頼を行うため Project に faq を、Notified On に Open を指定し Continue をクリックします。

これで、トリガーの設定が完了です。Continue をクリックします。

サンプルデータを取得するために、Fetch & Continue をクリックします。なお、サンプルデータを取得するために予め最低1つのマージリクエストが作成されている必要があります。

テストが成功しました。Continue をクリックします。

続けてアクションを設定するために、BUILT-IN APPS から Code を選択します。

今回は、Python で処理を記述するため Run Python を選択し Save + Continue をクリックします。(好みの言語を選択してください)

Input Data には、GitLab のマージリクエストイベントで取得される情報を指定することができます。 添付画像で確認できるとおり、ドキュメント著者(author)とマージリクエストID(id)を取得します。 Code に処理コードを入力し、Continue をクリックします。

ツッコミどころは多々あるかもしれませんが、作成した Python コードを参考情報として公開してみます。

import requests
import random
import json
from datetime import datetime, date, timedelta

# Get input_data
name = input_data['author']
mr_id = input_data['id']

# ChatWork ids
reviewer = [0000000, 1111111, 2222222, 3333333, 4444444, 5555555, 6666666, 7777777, 8888888, 9999999]

# API Key
APIKEY = 'APIKEY を指定する'

# ChatWork Room ID
ROOMID = 'ルームID を指定する' 

# API Call URL
URL = 'https://api.chatwork.com/v2'
url = '{0}/rooms/{1}/tasks'.format(URL, ROOMID)


# Elected 3 reviewer of random
ids = random.sample(reviewer,3)
to_ids = ','.join(map(str, ids))

# Review URL
mr_url = 'https://example.com/faq/merge_requests/' + mr_id + '/diffs'

# Deadline of the task is 3 days later
limit = datetime.today() + timedelta(days=3)

# HTTP Request Body & Params & Headers
body = name + ' さんからレビューの依頼が届いたよ(F)\n' + mr_url
params = { 'body': body, 'limit': int(limit.strftime('%s')), 'to_ids': to_ids }
headers = { 'X-ChatWorkToken': APIKEY }

# Run API Call
resp = requests.post(url,headers=headers,params=params)

Zapier での Python コードに関する詳細については、以下のドキュメントをご参照ください。

また、ChatWork API に関しては下記のドキュメントをご参照ください。

次のステップで Send Test To Code by Zapier をクリックすることにより、Python コードのテスト実行ができます。

実行に問題が無ければ、Finish をクリックし、Zap 名(例えば、GitLab MR to ChatWork Task など)を追記の上で、Zap を有効化してください。

うまく動作すれば、以下のような感じでタスクが追加されます。

いい感じですね。

さいごに

ネットで検索しても GitHub や GitLab + ChatWork でレビュー依頼をメッセージ通知するサンプルなどは見つかりましたが、タスクで依頼するというナレッジを見付けることはできませんでした。非同期のオフラインレビューが前提であるため、どちらかというとメッセージの通知よりはタスクで依頼する方が合っているんじゃないかと思い試してみた次第です。結果として、予想以上に良い結果が得られたので、もし ChatWork を利用されているのであれば試してみてはいかがでしょうか。

ではでは