Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@noboru_i

DangerでCheckstyleの結果を指摘する

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:

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
9
Help us understand the problem. What are the problem?