LoginSignup
13
9

More than 5 years have passed since last update.

DangerでCheckstyleの結果を指摘する

Last updated at Posted at 2017-09-01

CircleCI 2.0でAndroidのアプリをビルドしつつ、コードレビューBOTも動かす - Qiita で、Androidアプリの自動レビューでRubyが使えるようになりました。

その最後で書いてましたが、gradleのタスクを実行しないDangerプラグインを自分で作ったので、それの利用方法などを紹介しようと思います。

主にAndroidのアプリを想定していますが、Checkstyle formatのXMLが用意できれば、同じように自動レビューさせることが出来ると思います。

作ったもの

RubyGems : danger-checkstyle_format
GitHub : danger-checkstyle_format

出来ること

Checkstyle formatのXMLファイルを用意して、Danger経由で danger-checkstyle_format を実行すると、差分に対してwarningをコメントしてくれる。

イメージとしては、こんな感じ。

image.png

導入手順

基本的には、 CircleCI 2.0でAndroidのアプリをビルドしつつ、コードレビューBOTも動かす - Qiita で記載した内容のうち、Saddlerに関する部分を、Dangerに書き換えるイメージ。

利用するGemのインストール

Gemfileに、下記の依存関係を追加します。

gem 'danger'
gem 'danger-checkstyle_format', '~> 0.0.1'

bundle install を実行し、Gemfile.lockを更新しておきます。

Dangerfileを作成する

https://github.com/noboru-i/SlideViewer/blob/0680f790273785adfea8c3d5184f59a96b3a8e42/Dangerfile こんな感じのDangerfileを作成する。
最低限必要なのは、下記の3行です。

github.dismiss_out_of_range_messages

checkstyle_format.base_path = Dir.pwd
checkstyle_format.report 'app/build/reports/checkstyle/checkstyle.xml'

github.dismiss_out_of_range_messages については、 https://techblog.recruitjobs.net/development/danger_driven_development を参照してください。

checkstyle_format.report の引数は、利用するCheckstyle formatのXMLファイルです。
ただ、基本的にはfileタグのname属性は絶対パスになるようです。
inlineでレビューするときには、リポジトリルートからの相対パスが必要になるため、それを打ち消すために base_path の指定が必要となります。
https://github.com/noboru-i/danger-checkstyle_format/blob/03de2616687fe7e8c8d93afbb2f72e087e2f1fc3/lib/checkstyle_format/plugin.rb#L36 こんな感じで、置換しています。)

CircleCIの設定を行う

.circleci/config.yml を下記のように修正します。
参考: https://github.com/noboru-i/SlideViewer/pull/75/files#diff-1d37e48f9ceff6d8030570cd36286a61

jobs:
  build:
    <<: *defaults
    steps:
      - run:
          name: Check lint
          command: ./gradlew :app:check -x test
      - persist_to_workspace:
          root: ~/code
          paths:
            - .
  check:
    working_directory: ~/code
    docker:
      - image: circleci/ruby:2.4.1
    steps:
      - attach_workspace:
          at: ~/code
... 
      - run:
          name: Run danger
          command: bundle exec danger

いろいろ書いてありますが、メインはRubyのコンテナで bundle exec danger をやっている点です。
あとは、その前で ./gradlew :app:check をすることで、 app/build/reports/checkstyle/checkstyle.xml が出力しておき、それを attache_workspace などを利用して引き継いでいます。

最後に

初めてのDangerプラグインでした。
もし、使ってバグなど発見されましたら、issueやPRしていただけるとうれしいです。 :bowing_man:

13
9
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
13
9