LoginSignup
15
13

More than 3 years have passed since last update.

Embulkのソースコードスタイルチェック方法 (Java編)

Last updated at Posted at 2016-01-09

1 概要

EmbulkのJava関連のコードは、Prestoと同じコードスタイル(Airlift codestyle)で記述されていました。
(Embulk本体は、v0.9からGoogle Java Styleの一部修正版が採用されています。(2018/2/8追記))
下記の手順で、プラグインのソースコードが同じコードスタイルになっているかどうかをチェックすることができます。

Gradleの設定とIntelliJ IDEA 15 CE(OSX)、 の設定それぞれについて解説します。

ちなみに、Gradleの設定は、embulk newしたときに自動的に生成できるようにするPRを作成しました。
[Propose] Add checkstyle settings in Java plugin generator
いい悪いどちらでも是非、コメントください。

プラグイン内のコードスタイルをチェックする設定がEmbulk 0.8から利用できるようになりました。

なお、Embulkのプロジェクトではプラグイン作成者の方が小気味良いハックで目の前の問題を解決することも許されても良いという方針から、スタイルを厳密に守ることを重要視していません。プラグインを作られる方の好きなスタイルでプラグインを作るのも自由です。

2 Gradleの場合

次の手順で設定をします。

  • 2.1 設定
  • 2.2 チェックコマンドを実行
  • 2.3 余談

2.1 build.gradleの設定(embulk 0.8からは自動設定)

embulk 0.8からは、embulk newをすると、次の設定がbuild.gradleに追加されます。

embulk 0.8より前のプラグインでもembulk migrate path/to/plugin_dirコマンドを実行すれば同じ設定が適用されます。

plugins {
    // 略
    id "checkstyle"
}
// 略
checkstyle {
    configFile = file("${project.rootDir}/config/checkstyle/checkstyle.xml")
    toolVersion = '6.14.1'
}
checkstyleMain {
    configFile = file("${project.rootDir}/config/checkstyle/default.xml")
    ignoreFailures = true
}
checkstyleTest {
    configFile = file("${project.rootDir}/config/checkstyle/default.xml")
    ignoreFailures = true
}

またチェックに使うファイルが次の場所に作成されます。
二つのファイルはチェックする内容が若干異なります。

例えば、default.xmlはimportの順序に関するチェックは行わないようになっています。

  • config/checkstyle/default.xml
  • config/checkstyle/checkstyle.xml

2.3 チェックコマンドを実行

gradlew <チェックの種類>でチェックを行うことができます。

チェックは次の種類が利用できます。checkは、checkstyleMaincheckstyleTestそれぞれを実行します。

  • check: 緩いチェックで、警告のみ
    • checkstyleMain: プラグイン本体のチェック
    • checkstyleTest: テストコードのスタイルチェック
  • checkstyle: より厳密なチェック、スタイルに従わないとエラーになる。

checkstyleの実行例はつぎのとおりです。

./gradlew checkstyle
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:checkstyleMain
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsFileInputPlugin.java:27: 'java.io.File' は上のインポート文から1行空けるべきです。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsFileInputPlugin.java:180:45: ':' の前にホワイトスペースがありません。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsFileInputPlugin.java:187:57: 名前 'rewind_seconds' はパターン '^[a-z][a-zA-Z0-9]*$' に一致しなければなりません。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFile.java:3:8: 使用されないインポートです - org.apache.hadoop.fs.Path。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFile.java:23:30: '{' は新しい行にあるべきです。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFile.java:38: Blank line before closing brace
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFileInputStream.java:0: ファイルが新しい行で終了していません。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFileInputStream.java:48:40: 'cast' の後にホワイトスペースがありません。
:checkstyleMain FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':checkstyleMain'.
> Checkstyle rule violations were found. See the report at: file:///path/to/embulk-input-hdfs/build/reports/checkstyle/main.xml

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 2.97 secs

余談

  • build.gradle内にtoolVersion = 6.7と記述しなくても良くなりました。(Embulk 0.8以降)
  • 上記はgradleのバージョンを2.6から2.10にアップデートしたからです。

3 IntelliJ IDEA 2020.3の場合

Airlift.xmlをダウンロードして、~/Library/Preferences/IdeaIC2016.2/codestyles/Airlift.xml(古いバージョンでは、~/Library/Preferences/IdeaIC15/codestyles/Airlift.xml) として保存します。

[Preferences] -> [Editor] -> [Code style]でSchemaからAirliftが選択できるようになります。

IntelliJ IDEA 15 CE

ソースコードのフォーマット

Reformatting Source Code によると、Code -> Reformat Codeで自動整形をしてくれます。
Optimizing Importsによると、Code -> Optimize Importsで、importの順番を直してくれます。

4 参考情報

Check code style embulk-executor-mapreduce

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