DangerでPull Requestに自動コメント

はじめに

こんにちは!トーチライトSherpa事業部の太田です。

皆さん、コードレビューしてますか?
トーチライトの開発では、GithubのPull Requestでコードレビューしています。
日々新しいPRが提出されるため、基本的には毎日1~2時間ほどレビューに時間を使っていると思います。

そこで、普段のコードレビューを少しでも効率よく進めるために、
Dangerというツールを試してみました。
この記事では、導入手順をまとめています。
使用ツールは下記になります。

  • Danger
  • Github
  • Bundler ( + Gemfile)
  • CircleCI

Dangerとは

スクリーンショット 2018-11-28 9.44.24.png (287.8 kB)

Stop saying “you forgot to …” in code review https://danger.systems

  • Pull Requestでよくある「これ、忘れてない?」を自動的に指摘してくれるツールです
    • Pull Requestにコメントを投稿してくれます
    • 普段人間が指摘することによって発生するやりとりを削減できます
  • チェック項目はRubyのスクリプトで実装するため、自由度が高いです
  • チェック項目の例:
    • wipになってます
    • 誰もアサインされていません
    • テストが修正されていません
    • Lintの警告をインラインで指摘(例:セミコロンがありません)
  • Lintなどはプラグインが公開されているため、インストールすれば簡単に導入できます

スクリーンショット 2018-11-28 9.43.23.png (152.5 kB)

使い方

Gem install

  • プロジェクトのGemfileに下記を追加して bundle install を実行します。

Bot用のGithubアカウント作成

  • BotがPRにアクセスできるように、Bot用のGithubアカウントでAPIトークンを取得します
    • Settings > Developer Settings > Personal access tokens
  • 生成したトークンはどこかにメモしておきます

Dangerfile作成

下記のルールを設定してみます。

  • 警告表示
    • PRのタイトルに [wip] が含まれていた場合
    • PRに誰もアサインされていない場合
    • PRのタイトルにチケット番号が含まれていない場合
    • lockファイルがコミットされていない場合
      • package.json に修正があるのに yarn.lock がコミットされていない
      • Gemfile に修正があるのに Gemfile.lock がコミットされていない
    • app以下のファイルに修正があるのにテストコードが修正されていない
  • メッセージを表示
    • PRのタイトルにチケット番号が含まれている場合、コメントにリンクを貼る

Dangerfileをこんな感じに実装します。

CircleCIの設定

  • CircleCIの対象プロジェクトの環境変数にGithubのトークンを追加します
    スクリーンショット 2018-11-28 9.54.46.png (37.7 kB)

  • 環境変数名は DANGER_GITHUB_API_TOKEN
    スクリーンショット 2018-11-27 16.09.34.png (54.2 kB)

  • CircleCI上でDangerを実行するようにConfigを修正します

PR作成

  • 試しに、下記に引っかかるようなPRを作成してみます
    • タイトルに [wip] が含まれている
    • 誰もアサインされていない
    • タイトルにチケット番号が含まれていない

スクリーンショット 2018-11-28 10.16.49.png (70.2 kB)

  • Circle CIのビルドを走らせます
  • bundle exec danger が実行されると、PRにコメントがつきます

スクリーンショット 2018-11-27 17.05.21.png (40.7 kB)

  • PRのチェック項目にDangerの実行結果が表示されています

スクリーンショット 2018-11-27 17.20.24.png (35.2 kB)

  • 今回はすべて警告( warn )のみなのでグリーンですが、失敗( fail ) でメッセージを投げれば失敗させることもできます
  • 警告内容を修正して、Dangerを再実行します(CircleCIで再ビルドします)

スクリーンショット 2018-11-28 10.19.16.png (70.4 kB)

  • さきほどのコメントが編集されました!チケットへの自動リンクも機能しています。

スクリーンショット 2018-11-28 10.12.45.png (26.1 kB)

所感・今後に向けて

  • PRのやりとり削減につながりそうなので、チームへ導入を進めたいです
  • Lintなどの指摘も↓のようにインラインコメントできるので、いろいろ試してみたいです

スクリーンショット 2018-11-28 10.23.55.png (50.5 kB)

参考文献

太田 実花

太田 実花