Usual Software Engineer

よくあるソフトウェアエンジニアのブログ

Gradle のデフォルトの locale を変更する方法

小ネタにもほどがある、って感じではありますが最近あまり余裕がないので良しとしましょうw

自身のマシンの言語設定は日本語のままにしておきたいけれど、開発の時に目に触れるメッセージは英語にしたいという人、多いのではないかと思います。

17:19:12: Executing task 'compileJava'...


> Task :compileJava FAILED
/.../Foo.java:8: エラー: ';'がありません
        System.out.println(Locale.getDefault())
                                               ^
エラー1個

FAILURE: Build failed with an exception.
...

少し ”うっ気持ち悪い” ってなりますよね。

というわけで今回は Gradle / Java でデフォルトの locale の変更方法を紹介します。(タイトル "Gradle の" って書いたけれど要は JVM なんで若干語弊がありますね)

それぞれいくつか方法があるとは思いますが、 Gradle に関しては一番簡単だと思われるのが gradle.properties に設定する方法です。 ホームディレクトリ (GRADLE_USER_HOME) の .gradle/gradle.properties に以下の設定を入れてあげるだけで locale を変更することができます。


~/.gradle/gradle.properties

org.gradle.jvmargs=-Duser.language=en -Duser.country=US

build.gradle の確認用 task

...
task printLocale {
    doLast {
        println Locale.getDefault()
    }
}
...

設定なしの結果

> Task :printLocale
ja_JP

設定ありの結果

> Task :printLocale
en_US

ユーザ固有の設定でプロジェクトも汚さないし、環境変数などで他に影響出ることもないしで管理しやすいですね。 IntelliJ などの IDE 上で実行される場合もちゃんと設定が反映されるのでご安心を。

ただこれだと Gradle 経由で Java の実行を行う場合は英語に変えることができますが、当然ターミナルなどで直接 Java を実行する場合は日本語のままです。 どうしても直接の Java 実行時もデフォルトの locale を変更したいという人は環境変数を使うのが良い気がします。 少し乱暴ですがシェルの rcfile で環境変数 _JAVA_OPTIONS をセットしてしまうのが楽かなと思います。


~/.zshrc など

...
export _JAVA_OPTIONS="-Duser.language=en -Duser.country=US"
...

こういう設定をするということは常にデフォルトの locale を変えたいという目的なので、まあ rcfile の環境変数に設定されてても許せるかなという。 ちなみに JVM の locale を変更しようとして環境変数 LANGLC_CTYPE を変更しても無駄なので気をつけましょう。 ドキュメントには

Locale (Java Platform SE 8 )

based on the host environment.

って書いてあるんで気持ち的には LANG とか参照してほしいですが脆弱性が生まれることなどを気にして隠してあるんですかね。

ちなみに gradle.properties 使わずに _JAVA_OPTIONS だけでいいじゃんという人も、 rcfile だけじゃなく IntelliJ などの IDE それぞれに対し _JAVA_OPTIONS を設定して上げる必要があります。 IntelliJ なら Edit Custom VM Options...idea.vmoptions-Duser.language=en-Duser.country=US を書いてあげればいいですね。

以上、小ネタでした。