LoginSignup
18
10

More than 5 years have passed since last update.

Android の開発環境へ Danger を導入するメモ [GitHub x Bitrise 編]

Posted at

これは GitHub のプルリクエスト時に CI(Bitrise)上で Danger を動かし結果をプルリクエストへ書き込む、という仕組みを Android の開発環境へ導入する手順のメモです。

動作イメージ

スクリーンショット_2019-01-07_18_23_22.png

Dangerfile の作成

A. Bundler で Danger を管理しない場合

1. 作業用の Mac に Danger をインストール

$ sudo -s gem danger

2. Dangerfile の作成

Android プロジェクトのルートへ移動して、

$ danger init

[ENTER] キー連打で Dangerfile ファイルが生成される。

作業用 Mac で Danger を動かさないなら手動で Dangerfile ファイルを作成しても良さそう..

B. Bundler で Danger を管理する場合

1. 作業用の Mac に Bundler をインストール

$ sudo -s gem install bundler

2. 作業用の Mac に Danger をインストール

Android プロジェクトのルートへ移動して、

$ bundle init

Gemfile ファイルが生成されるので、Danger gem を追記

Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# gem "rails"
+ gem "danger"

追記したら、

$ bundle install --path vendor/bundle

vender/bundle は Git 管理下に置きたくないので .gitignore に追記しておく。.bundle/configGemFile.lock も生成されるが、それらはそのまま Git 管理下に置いておく。

3. Dangerfile の作成

$ bundle exec danger init

[ENTER] キー連打で Dangerfile ファイルが生成される。

動作確認用に Dangerfile を修正

上記 A または B の手順で Dangerfile を作成したら、動作確認用に message "Hello World!" と追記する。(既存の他の行はコメントアウト。)

Dangerfile
# Sometimes it's a README fix, or something like that - which isn't relevant for
# including in a project's CHANGELOG for example
# declared_trivial = github.pr_title.include? "#trivial"

# Make it more obvious that a PR is a work in progress and shouldn't be merged yet
# warn("PR is classed as Work in Progress") if github.pr_title.include? "[WIP]"

# Warn when there is a big PR
# warn("Big PR") if git.lines_of_code > 500

# Don't let testing shortcuts get into master by accident
# fail("fdescribe left in tests") if `grep -r fdescribe specs/ `.length > 1
# fail("fit left in tests") if `grep -r fit specs/ `.length > 1

message "Hello World!"

ここまで出来たら、追加したファイル類と共に Dangerfile ファイルをリモートの GitHub へプッシュしておく。(プルリク先のブランチに Dangerfile ファイルが存在している必要がある。)

GitHub で Personal access tokens を発行

GitHub の個人アカウントの設定画面で、

スクリーンショット_2019-01-07_17_29_23.png

作成したトークンの文字列は、後で利用するので控えておく。(この時点で控えておかないと後からは参照できないので、忘れた場合はトークンを再生成する。)

個人アカウントで Danger のコメントがプルリクに書き込まれるのが嫌な場合は、ボット用の GitHub アカウントを用意してトークンを作成する。

Bitrise 側の設定

ワークフローの画面で環境変数 DANGER_GITHUB_API_TOKEN を定義する。値は控えておいたトークンを記載。

スクリーンショット_2019-01-07_17_51_39.png

適当なワークフローを作成し(下記が Danger を動かす最低限のワークフロー)、

スクリーンショット_2019-01-07_18_01_55.png

スクリプトの箇所(上記の赤枠)に次のように記載する。

Bundlerを利用していない場合
gem install danger
danger
Bundlerを利用している場合
bundle install --path vendor/bundle
bundle exec danger

以上で準備は完了。作成したワークフローをプルリクをトリガーにして起動するように設定し、次のようにコメントが書き込まれればOK。

スクリーンショット_2019-01-07_18_23_22.png

Android Lint でレビューする例

これだけだと恩恵がよく分からないと思うので、プルリクエストを Android Lint でチェックして結果をレビューとして書き込む例を紹介します。danger-android_lint プラグインを利用します。(説明の簡易化の為に Bundler を使わない方の例を載せます。)

Dangerfile

Dangerfile
android_lint.gradle_task = "app:lint"
android_lint.report_file = "app/build/reports/lint-results.xml"
android_lint.filtering = true
android_lint.lint(inline_mode: true)

各オプションの説明はプラグインのページを参照ください。

Bitrise 側

gem install danger
gem install danger-android_lint
danger

これを動かすと、修正したコードが Android Lint にひっかかると次のように指摘してくれるようになります。

スクリーンショット_2019-01-16_16_31_40.png

参考にさせて頂いた記事

18
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
10