🧽
Java: prettier-javaを使ったコードフォーマット
モチベーション
Javaのプロジェクトでよく用いられるコードフォーマッタとして、google-java-formatやPalantir Java Format、Eclipse JDTなどが挙げられる。しかし、細かいカスタムを行うためのものでは無い、もしくは出来ないことからprettier-javaで好みのフォーマット[1]を適用する。
環境
- java 17
- gradle
構成
必要なファイル構成は以下の通り。それぞれを配置する流れを記述していく。
.
└── <project>/
├── .git/
│ └── hooks/
│ └── pre-commit
├── .github/
│ └── workflows/
│ └── check-format.yml
├── .prettierrc.yml
├── build.gradle
└── package.json
build.gradle
plugins {
// spotless
id("com.diffplug.spotless") version "6.24.0"
}
repositories {
mavenCentral()
}
// ...
spotless {
// masterブランチとの差分にだけspotlessを適用する
ratchetFrom 'origin/master'
java {
trimTrailingWhitespace()
endWithNewline()
removeUnusedImports()
importOrder()
// prettierrc.ymlから設定項目を読みprettierを適用する
prettier().configFile("./.prettierrc.yml")
}
}
package.json
{
"devDependencies": {
"prettier-plugin-java": "^2.5.0"
}
}
prettierrc.yml
plugins:
# プラグインを適用
- prettier-plugin-java
# optional: 最大幅の設定
printWidth: 140
package.json
と prettierrc.yml
を配置したのち、以下のコマンドを入力し依存を導入する。
# (npmが導入されていなければ導入する)
$ npm i
optional: pre-commit (./.git/hooks/pre-commit`)
pre-commit を設定してコミット前にフォーマッタを適用する。
#!/bin/sh
./gradlew spotlessApply
optional: GitHub Actions (./.github/workflows/check-format.yml)
CI上でフォーマッタが適用されているかを確認し、不完全であればワークフローを失敗させるようにする。
name: check-format
on:
pull_request
permissions:
contents: read
job:
run-spotless:
runs-on: ubuntu-latest
steps:
# spotlessのratchetFromのためmasterブランチもcheckout
- uses: actions/checkout@v4
with:
ref: master
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- uses: actions/setup-node@v4
with:
node-version: 21
cache: "npm"
- run: npm i
- name: Setup gradle
uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
- run: ./gradlew spotlessCheck
-
ネストした括弧を1段ごとに閉じる、ラムダ式でも2スペースでインデントするなど ↩︎
Discussion