Dangerについて

Dangerが気になって、先週末に少し調べました。以下はその時書いたものです。

Dangerとは

Dangerはコードレビューbotで、最近人気を集めています。似たようなものにcookpaddokumiがあります。小さなチームおけるコードレビューの負荷はそれほど大きくないですが、 メンバーが増えてくるとレビュー作業は多くの時間を使い、消耗の度合いが増してきます。(個人の感想です)
レビュー作業は機械的に解決できることも多いため、そのあたりはbotに任せて人間はより重要なレビューに時間を使おうというのが利用するモチベーションだと思います。

特徴

http://danger.systems/

DangerはRuby製のプロジェクトです。DangerfileというファイルにDSLで設定を記述しプロジェクトに含めることで動かすことが出来ます。Ruby製ですが、対象とするプロジェクトの言語はなんでも良いです。CLIからコマンドが実行できて、出力が受け取れれば、任意のプラグインを作ることが出来ます。コアは小さく、様々な機能はプラグインによって提供されています。プラグインはそれほど揃ってないですが、見方を変えればチャンスと考える事もできます。iOS環境が比較的充実している印象で、Android関連ではAndroidLintとJUnitプラグインがあります。

導入

http://danger.systems/guides/getting_started.html

danger init を実行するとセットアップをサポートしてくれます。dangerはbundlerの利用が推奨されているので、以下のようなGemfileを用意します。

# frozen_string_literal: true
source "https://rubygems.org"

gem 'danger'
bundle install
bundle exec danger init

コマンドを実行するとひたすら長文のメッセージが流れます。読んだらenterで進みます。
Step 1はDangerFileを作ったよ、Step2はbot用のクールなgithubアカウントを作ってくれと言われます。重要なのはイケてるアイコン画像の設定を忘れないことと書かれています。creative commonsな画像リンクが表示されるのは良いですね。早速作りました。https://github.com/kazybot
Step 3で、botアカウントでアクセストークンを作るように言われます。Publicなレポジトリの場合 public_repo の権限だけで問題ないそうです。
Step 4でCI側の設定を求められますが、詳しい案内はないので、setting-up-danger-to-run-on-your-ciを見ると良さそうです。
全てのセットアップが完了したら、CIからbundle exec dangerを実行します。

Wercker対応されてない問題

残念なことに2017年5月地点ではWerckerはdangerにサポートされていません。dangerは対象のPRのidを取得するためにCIサービスが提供する環境変数を利用しています。そのため各環境に対応したスクリプトが用意されているのですが、このリストにWerckerは含まれていないためです。
Wercker対応のPRを投げようと考えたのですが一筋縄では行きません。というのも大抵のCIサービスは、PRのidを環境変数で提供していますが、Werckerにはそれが存在しないためです。一応アドホックな対応として他のCIに偽装し、githubのURLリダイレクト処理を利用することでwerckerでも動かす方法は考えたのでよければ参考にしてください。気が向いたらdangerにwercker対応のPRを送ってみようと思っていますがもっと良い方法無いですかね。。🤔