jEnv vs SDKMAN: Java バージョンの管理
jEnv はすでにインストール済みの JDK 間を切り替えます。SDKMAN は JDK に加えて他の JVM ツールもインストール・管理します。
jEnv は薄いバージョン切り替えツールです。JDK は自分でインストールし(Homebrew、ベンダーパッケージ)、登録すると、jEnv が .java-version ファイルでプロジェクトごとに JAVA_HOME を設定します。SDKMAN はさらに進んで、多数のベンダーの JDK ディストリビューションをインストールし、Gradle、Maven、Kotlin などを1つのカタログから管理します。jEnv はミニマルで JDK をインストールする何かと組み合わせて使い、SDKMAN はオールインワンのインストーラ兼マネージャです。
| jEnv | SDKMAN | |
|---|---|---|
| JDK のインストール | しない(自分でインストール) | する |
| JAVA_HOME の設定 | する、プロジェクトごと | する |
| 他の JVM ツール | なし | Gradle、Maven、Kotlin など |
| 設定ファイル | .java-version | 標準ファイルなし |
| 最適な用途 | 既存 JDK の切り替え | すべての JVM ツールのインストールと管理 |
CI では
CI では、JDK は通常 setup-java によって提供されるため、jEnv と SDKMAN はローカルのパリティの話が中心になります。jEnv はパッケージマネージャから JDK を取得しプロジェクトごとの切り替えだけを望む開発者に適し、SDKMAN は特定ベンダーの JDK と build ツールを1つのツールでインストールしたいチームに適します。いずれもローカルと CI の Java バージョンを揃えます。
高速化
固定したバージョンと lockfile をキーに、JDK のインストールと build ツールの cache を保存しましょう。どちらも CI runner 上で動作し、より高速なマネージド runner は JDK のセットアップと build の手順を短縮します。
Decide with your own numbers, not a feature table
Feature comparisons age badly and rarely decide anything, because both tools in a mature category can do the job. What differs is how each behaves on your repository, and that takes one afternoon to measure.
# time a cold install with each candidate, cache cleared
hyperfine --prepare "rm -rf node_modules" --warmup 1 \
"<tool-a> install" "<tool-b> install"
# and the thing CI actually pays for: a cold run with no local cache
docker run --rm -v "$(pwd):/w" -w /w node:22 sh -c "<tool> install"What actually changes when you switch
- Lockfile format. A switch is a one-way door for anyone still on the old tool until everyone migrates, so plan it as a single coordinated change.
- Resolution strictness. Tools differ on whether an undeclared transitive import works, and the stricter one will surface latent bugs as new failures.
- CI cache configuration. The cache path and key differ per tool; carrying over the old ones silently disables caching.
- Everyone on the team and every runner must move together. Pin the version so they cannot drift.
結論
すでに別の方法で JDK をインストールしていて、プロジェクトごとの切り替えだけが必要なら jEnv。JDK ディストリビューションと JVM の build ツールをインストールする1つのツールがほしいなら SDKMAN。多くの JVM 開発者はインストールに SDKMAN を使い、別の切り替えツールを好む場合のみ jEnv 式の切り替えを使います。