脱・手動管理! SDKMAN で始めるモダン Java 開発環境: SDKMAN コマンド & テクニック 実践ガイド

Java開発環境をモダンに管理するSDKMANコマンドの全体像

「コマンドラインツールはちょっと苦手で…」と感じる方もいるかもしれません。

しかし、ご安心ください!SDKMANのコマンドは非常に直感的で、一度覚えてしまえば、開発環境管理は効率的になります
SDKの検索、インストール、バージョン切り替え、そして不要なSDKの削除まで、スムーズに実行できます。

この記事では、SDKMANの基本コマンドから応用テクニックまで、各コマンドを実践的に解説します。
インストール、バージョン切り替え、プロジェクト管理を効率化し、モダンな開発フローを実現する内容となっています。

この記事を都度参照しながら、SDKMANの主要コマンドを使って、複数のJavaバージョンやビルドツールをプロジェクトに合わせてバージョン管理を効率的に実施しましょう!


目次

  1. SDKを探す・一覧表示する (list)
  2. SDKをインストール/アンインストールする (install, uninstall)
  3. SDKのバージョンを切り替える (use, default, current)
  4. プロジェクトごとのSDK管理 (sdk env)
  5. その他の便利なコマンド
  6. まとめ:コマンドを使いこなし、バージョン管理を自在に

対象読者

  • SDKMAN! の基本的なインストールが完了し、主要なコマンドの使い方を学びたい方
  • Java、Maven、GradleなどのSDKのインストール、バージョン切り替え、アンインストール方法を知りたい方
  • SDKMAN! を使った効率的な開発環境管理に興味がある方

動作検証環境

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

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

関連記事

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


1. SDKを探す・一覧表示する (list)

SDKMANを使いこなす第一歩は、利用可能なSDKを知ることから始まります。sdk list コマンドは、インストール可能なSDKの一覧や、現在インストールされているSDKの情報を表示する便利なコマンドです。


インストール可能な全SDKを表示

SDKMANが管理できるすべてのSDKを表示するには、引数なしで sdk list を実行します。

sdk list

このコマンドを実行すると、Java、Maven、Gradle、Kotlinなど、SDKMANがサポートする多数のSDKとそのバージョンが一覧表示されます。

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

================================================================================
Available Candidates
================================================================================
q-quit                                  /-search down
j-down                                  ?-search up
k-up                                    h-help
--------------------------------------------------------------------------------
...
--------------------------------------------------------------------------------
Java (25.0.1-tem)        https://projects.eclipse.org/projects/adoptium.temurin/

Java Platform, Standard Edition (or Java SE) is a widely used platform for
development and deployment of portable code for desktop and server environments.
Java SE uses the object-oriented Java programming language. It is part of the
Java software-platform family. Java SE defines a wide range of general-purpose
APIs  such as Java APIs for the Java Class Library  and also includes the Java
Language Specification and the Java Virtual Machine Specification.

                                                            $ sdk install java
...

特定のSDK(Javaなど)のバージョン一覧

「Javaの特定のバージョンだけ知りたい」「Gradleの最新版は何だろう?」といった場合は、sdk list <sdk_name> の形式でコマンドを実行します。例えば、Javaのバージョン一覧を見たい場合は以下のようになります。

sdk list java

これにより、利用可能なJavaのバージョンがベンダー(AdoptOpenJDK, OpenJDKなど)ごとに整理されて表示されます。必要なバージョンを見つけるのに非常に役立ちます。

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

================================================================================
Available Java Versions for Linux ARM 64bit
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 Corretto      |     | 25.0.1       | amzn    |            | 25.0.1-amzn
               |     | 25           | amzn    |            | 25-amzn
               |     | 24.0.2       | amzn    |            | 24.0.2-amzn
               |     | 21.0.9       | amzn    |            | 21.0.9-amzn
               |     | 17.0.17      | amzn    |            | 17.0.17-amzn
               |     | 11.0.29      | amzn    |            | 11.0.29-amzn
               |     | 8.0.472      | amzn    |            | 8.0.472-amzn
 Temurin       |     | 25           | tem     |            | 25-tem
               |     | 24.0.2       | tem     |            | 24.0.2-tem
               |     | 23.0.2       | tem     |            | 23.0.2-tem
               |     | 21.0.8       | tem     |            | 21.0.8-tem
               |     | 17.0.17      | tem     |            | 17.0.17-tem
               |     | 11.0.28      | tem     |            | 11.0.28-tem
               |     | 8.0.462      | tem     |            | 8.0.462-tem

インストール済みSDKの確認

すでにインストール済みのSDKを確認したい場合は、sdk list の出力で installed と表示されている行を探すか、より簡潔に sdk current コマンドを使用します。

sdk current

このコマンドは、現在アクティブになっているSDKのバージョンを表示します。

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

================================================================================
Installed SDKs
================================================================================
java
* 17.0.9-tem
maven
* 3.8.6
gradle
* 8.5
================================================================================

2. SDKをインストール/アンインストールする (install, uninstall)

目的のSDKが見つかったら、次は実際にインストールしてみましょう。SDKMANを使えば、SDKのインストールも簡単です。


最新安定版をインストール

特定のSDKの最新安定版をインストールするには、sdk install <sdk_name> を実行します。例えば、最新のJavaをインストールしたい場合は、以下のようになります。

sdk install java

これにより、SDKMANが自動的に最新の安定版Javaをダウンロードし、インストールしてくれます。

ただし、環境によっては sdk install <sdk_name> で最新安定版をインストールしようとした際に、以下のようなエラーが発生する場合があります。

ubuntu @my-dev-vm:~$ sdk install java

Stop! java 25.0.1-tem is not available. Possible causes:
 * 25.0.1-tem is an invalid version
 * java binaries are incompatible with your platform
 * java has not been released yet

Tip: see all available versions for your platform:

  $ sdk list java

これは、お使いのプラットフォームとSDKのバイナリが互換性がない場合や、指定したバージョンが利用できない場合に発生します。この場合は、sdk list <sdk_name> コマンドで自身のプラットフォームで利用可能なバージョンを確認し、バージョンを指定してインストールする必要があります。

例えば、sdk list java25-tem が利用可能と表示された場合、以下のようにバージョンを指定してインストールします。

sdk install java 25-tem
ubuntu @my-dev-vm:~$ sdk install java 25-tem

Downloading: java 25-tem

In progress...

################################################################################################################# 100.0%

Repackaging Java 25-tem...

Done repackaging...

Installing: java 25-tem
Done installing!


Setting java 25-tem as default.

このように、sdk list <sdk_name> で表示される Identifier を正確に指定することが重要です。

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

Downloading: java 25-tem

In progress...

Installing: java 25-tem
Done installing!

Setting java 25-tem as default.

バージョンを指定してインストール

「プロジェクトでJava 17を使いたい」「Maven 3.9.11が必要だ」といった場合は、バージョンを指定してインストールできます。

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 list maven などで表示されるバージョン文字列をコピー&ペーストするのがおすすめです。


不要になったバージョンを削除

開発を進めていると、古いSDKバージョンが不要になることもあります。そんな時は sdk uninstall <sdk_name> <version> で簡単に削除できます。

sdk uninstall java 17.0.12-oracle

以下は sdk uninstall java 17.0.12-oracle コマンドの実行結果の例です。

Uninstalling java 17.0.12-oracle...
Successfully uninstalled java 17.0.12-oracle

これにより、ディスクスペースを節約し、環境をクリーンに保つことができます。


3. SDKのバージョンを切り替える (use, default, current)

SDKMANの主要な機能の一つが、SDKバージョンの柔軟な切り替えです。プロジェクトやタスクに応じて、最適なSDKバージョンを瞬時に適用できます。


現在のシェルだけで一時的に切り替える (use)

「このターミナルセッションだけJava 21を使いたい」といった一時的な切り替えには sdk use <sdk_name> <version> が便利です。

sdk use java 21.0.9-graal

以下は sdk use java 21.0.9-graal コマンドの実行結果の例です。

Using java 21.0.9-graal in this shell.

このコマンドは、現在のシェルセッションにのみ影響し、新しいシェルを開けば元のデフォルトバージョンに戻ります。ちょっとしたテストや、特定のプロジェクトでのみ一時的に異なるバージョンを使いたい場合に最適です。


デフォルトバージョンを恒久的に設定する (default)

システム全体、または新しいシェルセッションで常に特定のSDKバージョンを使いたい場合は sdk default <sdk_name> <version> を使用します。

sdk default java 17.0.17-tem

以下は sdk default java 17.0.17-tem コマンドの実行結果の例です。

Default java version set to 17.0.17-tem

これにより、以降に開くすべてのシェルで、指定したバージョンがデフォルトとして適用されます。


現在使用中のバージョンを確認する (current)

現在どのSDKバージョンがアクティブになっているかを確認するには、sdk current <sdk_name> を実行します。

sdk current java

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

Using java version 17.0.17-tem

これは、特に複数のSDKバージョンを頻繁に切り替える際に、現在の環境を把握するために役立ちます。


JAVA_HOMEの自動管理

Java開発者にとって、JAVA_HOME環境変数の管理は課題の一つでした。SDKの切り替え時に手動での設定変更や、設定ミスによるビルド失敗が発生することがあります。SDKMAN!は、このJAVA_HOMEの管理を自動化します。

SDKMAN!でSDKを切り替えると、自動的にJAVA_HOMEが適切なパスに設定されます。これにより、あなたは環境変数のことを意識することなく、開発に集中できます。

# Java 17に切り替えた後
echo $JAVA_HOME
# 出力例: /Users/yourname/.sdkman/candidates/java/17.0.17-tem

これにより、環境変数を意識することなく開発に集中できます。

さらに、sdk env コマンドと組み合わせることで、プロジェクトディレクトリに移動するだけで自動的に適切な JAVA_HOME が設定されるようになり、よりシームレスな開発体験が実現します。


4. プロジェクトごとのSDK管理 (sdk env)

プロジェクトごとに特定のSDKバージョンを使用したい場合、.sdkmanrc ファイルを活用できます。このファイルはプロジェクトのベースディレクトリに配置します。


.sdkmanrc ファイルの初期化

現在のディレクトリに .sdkmanrc ファイルを自動生成するには、以下のコマンドを実行します。

sdk env init

生成されたファイルには、現在使用中のJDKバージョンが事前に入力されていますが、必要に応じて他のSDKのキーと値のペアを追加できます。

# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=21.0.4-tem

.sdkmanrc の設定を適用する

.sdkmanrc ファイルに記述された設定を現在のシェルに適用するには、以下のコマンドを実行します。

sdk env

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

Using java version 21.0.8-tem in this shell.

これにより、現在のシェルで指定されたSDKバージョンが使用されるようになります。


.sdkmanrc の設定をクリアする

プロジェクトを離れる際に、SDKの設定をデフォルトバージョンに戻したい場合は、以下のコマンドを使用します。

sdk env clear

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

SDKMAN environment cleared.

不足しているSDKをインストールする

新しいプロジェクトをチェックアウトした際に、.sdkmanrc ファイルで指定されているSDKが不足している場合があります。その場合は、以下のコマンドで不足しているSDKをインストールできます。

sdk env install

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

Installing java 21.0.8-tem...
Done installing!

ディレクトリ移動時の自動切り替え

ディレクトリに cd する際にSDKバージョンを自動的に切り替えたい場合は、SDKMANの設定ファイル (~/.sdkman/etc/config) で sdkman_auto_env=true を設定します。これにより、ディレクトリを離れる際にプロジェクト固有のSDKがデフォルトバージョンにリセットされます。


5. その他の便利なコマンド

SDKMAN!には、上記以外にも開発環境管理に役立つ様々なコマンドがあります。


SDKMAN!のバージョン表示 (sdk version)

SDKMAN!自身のスクリプトとネイティブのバージョンを表示します。

sdk version

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

SDKMAN!
script: 5.20.0
native: 0.7.14 (linux aarch64)

オフラインモードの切り替え (sdk offline)

インターネット接続がない環境でSDKMAN!を使用するためのオフラインモードを有効/無効にします。

sdk offline enable

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

Offline mode enabled.
sdk offline disable

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

Offline mode disabled.

オフラインモードでは、sdk list コマンドはインストール済みのSDKバージョンのみを表示します。


SDKMAN!自体の更新 (sdk selfupdate)

SDKMAN!の新しいバージョンが利用可能な場合に、SDKMAN自体を更新します。強制的に再インストールすることも可能です。

sdk selfupdate

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

No update available at this time.
sdk selfupdate force

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

Forcing selfupdate...
SDKMAN is up to date.

候補の更新 (sdk update)

新しいSDK候補や削除された候補をSDKMAN!が認識するために、定期的にキャッシュを更新する必要があります。

sdk update

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

Updating SDKMAN...
Installing script cli archive...
...
Successfully upgraded SDKMAN!

Open a new terminal to start using SDKMAN 5.20.0.

To join our BETA channel, simply follow the instructions on:

   http://sdkman.io/install

Enjoy!!!

キャッシュのクリア (sdk flush)

SDKMAN!のローカル状態をクリアします。~/.sdkman/tmp などのディレクトリを手動で削除するのではなく、このコマンドを使用してください。

sdk flush

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

0 archive(s) flushed, freeing 4.0K /home/ubuntu/.sdkman/tmp.
1 archive(s) flushed, freeing 4.0K /home/ubuntu/.sdkman/var/metadata.

SDKのホームディレクトリ表示 (sdk home)

特定のSDKの絶対パスを表示します。スクリプトなどでSDKのパスが必要な場合に便利です。

sdk home java 25-tem

以下は sdk home java 21.0.4-tem コマンドの実行結果の例です。

/home/ubuntu/.sdkman/candidates/java/25-tem

ヘルプの表示 (sdk help)

SDKMAN!の基本的なヘルプ情報を表示します。特定のサブコマンドのヘルプも参照できます。

sdk help

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

NAME
    _sdk_ - The command line interface (CLI) for SDKMAN!

SYNOPSIS
    _sdk <subcommand> [candidate] [version]_

DESCRIPTION
    SDKMAN! is a tool for managing parallel versions of multiple JVM related
    Software Development Kits on most Unix based systems. It provides a
    convenient Command Line Interface (CLI) and API for installing, switching,
    removing and listing Candidates.

SUBCOMMANDS & QUALIFIERS
    help         _[subcommand]_
    install      _<candidate> [version] [path]_
    uninstall    _<candidate> <version>_
    list         _[candidate]_
  ...
sdk help install

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

Usage: sdk install <candidate> [version]

Installs a candidate version. If no version is provided, the latest stable version is installed.

設定の編集 (sdk config)

SDKMAN!の設定ファイル (~/.sdkman/etc/config) をシステムエディタで開きます。

sdk config

まとめ:コマンドを使いこなし、バージョン管理を自在に

今回は、SDKMANの基本的なコマンドである listinstalluninstallusedefaultcurrent について詳しく解説しました。
これらのコマンドをマスターすることで、あなたはJava開発環境のバージョン管理から解放され、より本質的な開発作業に集中できるようになるでしょう。

特に usedefault の使い分けは、SDKMANを効果的に活用する上で非常に重要です。
一時的な切り替えと恒久的な設定を意識することで、あなたの開発ワークフローは格段にスムーズになります。

あなたのチームではどんなバージョン管理ツールを使っていますか?他に便利なカスタマイズがあればぜひコメントで教えてください!


免責事項

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


SNSでもご購読できます。

コメントを残す

*