脱・手動管理! SDKMAN で始めるモダン Java 開発:.sdkmanrc 活用法とチーム開発のベストプラクティス

プロジェクトごとにJavaのバージョンが違う!チーム開発の課題をSDKMANで解決

「まただ…このプロジェクト、Java 8じゃないと動かないのか?」「このプロジェクト、Gradleのバージョンも固定されてないのか…」

Java開発者の皆さん、こんな経験はありませんか?

複数のプロジェクトを掛け持ちしていると、それぞれ異なるJavaバージョンやビルドツールを要求されることは日常茶飯事です。
特にJavaエコシステムでは、JDK、Maven、Gradleなど、管理すべきSDKが多岐にわたり、そのバージョン管理は課題となりがちです。

SDKMANは単なる個人用のバージョン管理ツールではありません。チーム全体で開発環境を統一し、生産性を向上させるための効果的なベストプラクティスを提供します。
プロジェクトディレクトリにcdするだけで、適切なSDKバージョンに自動で切り替わる。この機能を使って、「モダンな開発環境」への第一歩を踏み出してください!

この記事では、SDKMANの重要な機能の一つである.sdkmanrcの、価値と具体的な活用方法、そしてチーム開発におけるベストプラクティスを徹底解説します。

もう、SDKのバージョン管理で悩む必要はありません!


目次

  1. .sdkmanrc とは?
    • プロジェクトローカルな設定ファイル
    • cd するだけでSDKが切り替わる体験
  2. .sdkmanrc を使ってみよう
    • 自動切り替え機能を有効にする (sdkman_auto_env)
    • .sdkmanrc ファイルの作成 (sdk env init)
    • プロジェクトで使うバージョンを記述する
    • 動作確認とトラブルシューティング
  3. チーム開発を加速するベストプラクティス
    • .sdkmanrc をGitで管理する
    • 新規メンバーのオンボーディングを高速化
  4. CI/CDパイプラインにSDKMANを組み込む
    • GitHub Actionsでのセットアップ例
    • Jenkinsでのセットアップ例
    • ビルドの再現性を高める
  5. 複数ツール(Maven, Gradle)のバージョンを揃える
    • .sdkmanrc でJavaとビルドツールの両方を指定する
  6. まとめ:属人性を排除し、開発生産性を向上させる

対象読者

  • 複数のJavaプロジェクトを掛け持ちしており、プロジェクトごとに異なるSDKバージョンを管理する必要がある開発者
  • チーム開発において、開発環境の統一とオンボーディングの効率化を図りたいと考えている方
  • CI/CDパイプラインでのSDKバージョン管理にSDKMAN! の導入を検討している方
  • .sdkmanrc ファイルの具体的な活用方法やベストプラクティスを知りたい方

動作検証環境

この記事は、以下の環境で検証しています。

  • OS : macOS Tahoe Version 26.0
  • ハードウェア : MacBook Air 2024 M3 24GB
  • Multipass : Multipass version 1.16.1
  • Ubuntu : 24.0.4.0.2

1. .sdkmanrc とは?

.sdkmanrcファイルは、SDKMANが提供する「プロジェクトローカルなSDKバージョン管理」を実現するための設定ファイルです。

このファイルをプロジェクトのルートディレクトリに配置することで、そのプロジェクトで利用するSDKのバージョンを明示的に指定できます。


プロジェクトローカルな設定ファイル

考えてみてください。あなたのプロジェクトには、srcディレクトリやpom.xml(Mavenの場合)、build.gradle(Gradleの場合)など、様々な設定ファイルがありますよね。
.sdkmanrcもそれらと同じように、プロジェクト固有の設定を記述するためのファイルです。

このファイルには、例えば「このプロジェクトではJava 25とMaven 3.9.11を使う」といった情報を記述します。

SDKMANは、あなたがそのプロジェクトディレクトリに移動した際に、この.sdkmanrcファイルを自動的に検出し、記述されたSDKバージョンに環境を切り替えてくれるのです。


cd するだけでSDKが切り替わる体験

これが.sdkmanrc大きな利点です

# プロジェクトAのディレクトリに移動
cd ~/projects/project-a
# ここではJava 21が自動的に有効になる

# プロジェクトBのディレクトリに移動
cd ~/projects/project-b
# ここではJava 25が自動的に有効になる

このように、意識することなく適切なSDKバージョンが適用されるため、開発者はSDKのバージョン管理に煩わされることなく、本来の業務であるコード開発に集中できます。

これは、開発体験を向上させるだけでなく、バージョン違いによる潜在的なバグのリスクも低減します。


2. .sdkmanrc を使ってみよう

それでは、実際に.sdkmanrcを設定して、その利便性を確認してみましょう


自動切り替え機能を有効にする (sdkman_auto_env)

.sdkmanrcの自動切り替え機能を有効にするには、SDKMANの設定ファイル(通常は~/.sdkman/etc/config)を編集し、sdkman_auto_envtrueに設定する必要があります。

# ~/.sdkman/etc/config を開く
vi ~/.sdkman/etc/config

# 以下の行を探し、true に変更(コメントアウトされている場合は解除)
# sdkman_auto_env=false
sdkman_auto_env=true

この設定を有効にすることで、SDKMANはディレクトリ移動時に.sdkmanrcファイルを探索し、自動的にSDKを切り替えるようになります。


.sdkmanrc ファイルの作成 (sdk env init)

プロジェクトのルートディレクトリでsdk env initコマンドを実行すると、.sdkmanrcファイルのひな形が自動的に生成されます。

cd ~/projects/my-java-project
sdk env init

以下は sdk env init コマンドの実行結果の例です。

Creating empty .sdkmanrc file...
Done.

実行後、プロジェクトのルートディレクトリに.sdkmanrcファイルが作成されます。


プロジェクトで使うバージョンを記述する

生成された.sdkmanrcファイルを開き、プロジェクトで利用したいSDKのバージョンを記述します。例えば、Java 25とMaven 3.9.11を使いたい場合は、以下のように記述します。

# .sdkmanrc
java=25-tem
maven=3.9.11

ここで指定するバージョンは、sdk list javasdk list mavenで確認できる有効なバージョンである必要があります。


動作確認とトラブルシューティング

設定が完了したら、実際にプロジェクトディレクトリに移動して動作を確認してみましょう。

cd ~/projects/my-java-project
java -version # Java 25が表示される
mvn -version  # Maven 3.9.11が表示される

以下は mvn -version コマンドの実行結果の例です。

Apache Maven 3.9.11 (3e54c93a704957b63ee3494413a2b544fd3d825b)
Maven home: /home/ubuntu/.sdkman/candidates/maven/3.9.11
Java version: 25.0.1, vendor: Amazon.com Inc., runtime: /home/ubuntu/.sdkman/candidates/java/25.0.1-amzn
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "6.8.0-86-generic", arch: "aarch64", family: "unix"

以下は java -version コマンドの実行結果の例です。

openjdk version "25.0.1" 2025-10-21 LTS
OpenJDK Runtime Environment Corretto-25.0.1.8.1 (build 25.0.1+8-LTS)
OpenJDK 64-Bit Server VM Corretto-25.0.1.8.1 (build 25.0.1+8-LTS, mixed mode, sharing)

もし期待通りに切り替わらない場合は、以下の点を確認してください。

  • ~/.sdkman/etc/configsdkman_auto_env=trueになっているか。
  • .sdkmanrcファイルがプロジェクトのルートディレクトリに正しく配置されているか。
  • .sdkmanrcに記述されているSDKバージョンが、sdk listで確認できる有効なバージョンであるか。
  • シェルを再起動してみる。

3. チーム開発を加速するベストプラクティス

SDKMANの価値は、個人開発だけでなくチーム開発においても発揮されます。

チーム開発において最も重要なのは、メンバー全員が同じ開発環境で作業することです。SDKMANは、この「環境の統一」を容易に実現します。


.sdkmanrc をGitで管理する

SDKMANの便利な機能の一つに、プロジェクトルートに配置する .sdkmanrc ファイルがあります。

このファイルに、そのプロジェクトで使用するSDKのバージョンを記述することで、cd コマンドでプロジェクトディレクトリに移動するだけで、自動的にSDKのバージョンが切り替わるようになります。

.sdkmanrc の例:

# .sdkmanrc
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=25.0.1-amzn
maven=3.9.11
gradle=9.1.0

この .sdkmanrc ファイルをGitリポジトリで管理し、チームメンバー全員で共有することで、誰がいつプロジェクトに参加しても、常に正しいSDKバージョンで開発を開始できます。

これで、「自分の環境では動くのに…」といった環境起因の問題は減少するでしょう。

各SDKをインストールするコマンドの実行した例です。

sdk install java 25.0.1-amzn
sdk install maven 3.9.11

以下は sdk install maven 3.9.11 コマンドの実行結果の例です。

Downloading: maven 3.9.11

In progress...

Installing: maven 3.9.11
Done installing!

Setting maven 3.9.11 as default.
sdk install gradle 9.1.0

以下は sdk install gradle 9.1.0 コマンドの実行結果の例です。

Downloading: gradle 9.1.0

In progress...

Installing: gradle 9.1.0
Done installing!

Setting gradle 9.1.0 as default.

以下は sdk install java 25.0.1-amzn コマンドの実行結果の例です。

Downloading: java 25.0.1-amzn

In progress...

Installing: java 25.0.1-amzn
Done installing!

Setting java 25.0.1-amzn as default.

以下は プロジェクトフォルダへ移動前後の実行結果の例です。

ubuntu@my-dev-vm:~/project$ cd my-java-project/

Using java version 25.0.1-amzn in this shell.

Using maven version 3.9.11 in this shell.

Using gradle version 9.1.0 in this shell.

ubuntu@my-dev-vm:~/project/my-java-project$ cd ..
Restored java version to 25-tem (default)
Restored maven version to 3.9.11 (default)
Restored gradle version to 9.1.0 (default)
ubuntu@my-dev-vm:~/project$ cd my-java-project/

新規メンバーのオンボーディングを高速化

新しいメンバーがプロジェクトに参加した際、開発環境のセットアップは大抵手間がかかります。

でも、.sdkmanrcがあれば、SDKMANをインストールし、プロジェクトをクローンしてcdするだけで、必要なSDKバージョンが自動的に設定されます。

これで、新メンバーはすぐに開発に取り掛かることができ、オンボーディングの時間を短縮できます

ドキュメント化のポイント:

  • SDKMANの公式インストール手順へのリンク
  • .sdkmanrc ファイルの役割と基本的な使い方
  • プロジェクトリポジトリをクローン後、sdk env コマンドを実行するよう指示
  • よくあるトラブルシューティング(例: sdkman_auto_env の設定確認)

これにより、新規メンバーは迷うことなく開発環境を構築でき、すぐに本質的な開発作業に取り掛かることができます。

SDKMANのインストール、各コマンドについては、以下の記事で詳細に解説していますので、是非ご覧ください。


4. CI/CDパイプラインにSDKMANを組み込む

チーム開発におけるSDKMANの利点は、CI/CDパイプラインとの連携でも発揮されます。

ビルド環境と開発環境のSDKバージョンを一致させることで、ビルドの再現性を高め、CI/CDパイプラインでの予期せぬエラーを防ぐことができます。


GitHub Actionsでのセットアップ例

GitHub ActionsでSDKMANを使用する場合、sdk install コマンドをワークフローに組み込むことで、簡単にSDKをセットアップできます。

name: Java CI with Maven

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Install SDKMAN and Java
      run: |
        curl -s "https://get.sdkman.io" | bash
        source "$HOME/.sdkman/bin/sdkman-init.sh"
        sdk install java 25.0.1-amzn
        sdk default java 25.0.1-amzn
        sdk install maven 3.9.11
        sdk default maven 3.9.11
    - name: Build with Maven
      run: mvn clean install

より高度な使い方として、プロジェクトの .sdkmanrc ファイルを読み込むように設定することも可能です。

プロジェクトのファイル構造例:

.
├── .github/
   └── workflows/
       └── java-ci.yml
├── .sdkmanrc
├── src/
   └── main/
       └── java/
           └── com/example/App.java
└── pom.xml

.sdkmanrc の内容例:

# .sdkmanrc
java=25.0.1-amzn
maven=3.9.11

この設定をGitHub Actionsで利用するには、以下のように sdk env コマンドを使用します。

    - name: Setup SDKs with .sdkmanrc
      run: |
        curl -s "https://get.sdkman.io" | bash
        source "$HOME/.sdkman/bin/sdkman-init.sh"
        # .sdkmanrc を読み込むために sdkman_auto_env を有効化
        # 既存の sdkman_auto_env の設定を true に変更、または追加
        sed -i 's/^sdkman_auto_env=false/sdkman_auto_env=true/' "$HOME/.sdkman/etc/config" || echo "sdkman_auto_env=true" >> "$HOME/.sdkman/etc/config"
        # プロジェクトディレクトリに移動して .sdkmanrc を適用
        cd ${{ github.workspace }}
        sdk env

Jenkinsでのセットアップ例

Jenkinsのようなオンプレミス環境のCI/CDツールでも、同様にSDKMANを導入できます。JenkinsエージェントにSDKMANをインストールし、ビルドスクリプト内で source "$HOME/.sdkman/bin/sdkman-init.sh" を実行した後、sdk usesdk default コマンドで必要なSDKバージョンを設定します。


ビルドの再現性を高める

開発環境とCI/CD環境で同じSDKバージョンを使用することで、ビルドの再現性が向上します。

これにより、「ローカルでは動くのにCIでは失敗する」といった問題が減少し、開発者は安心してコードをプッシュできるようになります。


5. 複数ツール(Maven, Gradle)のバージョンを揃える

Javaプロジェクトでは、JDKだけでなく、ビルドツール(MavenやGradle)のバージョン管理も重要です。SDKMANは、これら複数のSDKのバージョンをまとめて管理する機能も提供します。


.sdkmanrc でJavaとビルドツールの両方を指定する

前述の .sdkmanrc の例のように、JavaだけでなくMavenやGradleのバージョンも .sdkmanrc に記述することで、プロジェクトに必要なすべてのSDKバージョンを一度に管理できます。

# .sdkmanrc
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=25.0.1-amzn
maven=3.9.11
gradle=9.1.0

これにより、チームメンバーは常にプロジェクトで推奨されるJDKとビルドツールの組み合わせで作業でき、環境起因のトラブルを最小限に抑えることができます。


まとめ:属人性を排除し、開発生産性を向上させる

SDKMANは、単なる個人開発者のためのツールではありません。.sdkmanrcを活用することで、プロジェクトごとのSDKバージョン管理を自動化し、開発体験を向上させます。さらに、チーム開発にSDKMANを導入し、.sdkmanrc を活用し、CI/CDパイプラインと連携させることで、開発環境の属人性を排除し、チーム全体の開発生産性を向上させることができます。

本記事で紹介したベストプラクティスを参考に、あなたのチームでもSDKMANを活用し、よりスムーズで効率的な開発ワークフローを構築してください。

あなたのチームでは、SDKのバージョン管理にどのような工夫をしていますか?.sdkmanrcの活用事例や、他に便利なツールがあれば、ぜひコメントで教えてください!


免責事項

本記事の内容は、執筆時点での情報に基づいており、SDKMAN! および関連技術の将来の変更によって、内容が古くなる可能性があります。
また、本記事は特定の環境での動作検証に基づいており、すべての環境での動作を保証するものではありません。
記事の内容を参考に作業を行う際は、ご自身の責任において実施してください。
本記事の情報を利用したことにより生じた損害について、筆者および公開元は一切の責任を負いません。


SNSでもご購読できます。

コメントを残す

*