SDKMANは、ソフトウェア開発における複雑なSDKの管理をシンプルかつ効率的に行うためのツールです。本書では、SDKMANの基本から高度な機能までを包括的に解説します。開発者が異なるプロジェクトで異なるバージョンのSDKを必要とする現代の環境で、SDKの管理は必須です。SDKMANはその必要性に応え、簡単なコマンドでSDKのインストール、切り替え、管理を可能にします。本書は、SDKMANの初心者から上級者まで、幅広い読者層に役立つ情報を提供します。SDKのバージョン管理、プロジェクトへの統合、トラブルシューティングなど、SDKMANの機能や活用法を理解し、開発プロセスをスムーズに進めるための手助けとなるでしょう。
SDKMAN（Software Development Kit Manager）は、ソフトウェア開発者が複数のソフトウェア開発キット（SDK）を管理するためのツールです。Java、Groovy、Grail、Scala、Kotlin、Maven、Gradle、Antなど、さまざまなプログラミング言語やビルドツールに対応しています。SDKMANを使用すると、複数のバージョンのSDKをシームレスに切り替えることができ、プロジェクトごとに異なるバージョンのSDKを使用することが容易になります。
SDKMANの主な利点は以下の通りです：
複数のバージョンの管理: SDKMANを使用すると、複数のバージョンのSDKを簡単に管理できます。これにより、プロジェクトごとに異なるSDKバージョンを使用できます。
簡単な切り替え: SDKMANを介して、簡単に異なるバージョンのSDKに切り替えることができます。プロジェクトの要件に合わせて、必要なバージョンを選択できます。
環境の独立性: SDKMANはユーザーのホームディレクトリにSDKをインストールするため、システム全体に影響を与えることなく、個々のユーザーがSDKを管理できます。
プロジェクトの依存性の解決: プロジェクトごとに必要なSDKのバージョンを管理することで、プロジェクトの依存性の問題を回避できます。
複数OSのサポート: SDKMANは主要なオペレーティングシステム（Windows、macOS、Linux）をサポートしています。
SDKMANをインストールするには、次の手順に従います：
前提条件の確認: SDKMANをインストールするためには、curlとzipがシステムにインストールされている必要があります。これらのツールがインストールされていることを確認してください。
インストールスクリプトの実行: ターミナルを開き、次のコマンドを実行してSDKMANのインストールスクリプトをダウンロードし即時実行します。
curl -s "https://get.sdkman.io" | bash
SDKMANの初期化: インストールスクリプトが正常に実行されたら、SDKMANを初期化します。次のコマンドを実行します。
source "$HOME/.sdkman/bin/sdkman-init.sh"
これにより、SDKMANが現在のシェルセッションで有効になります。
SDKMANのバージョンの確認: SDKMANが正しくインストールされたかどうかを確認するには、次のコマンドを実行してバージョンを確認します。
sdk version
正常にインストールされていれば、SDKMANのバージョンが表示されます。
SDKMANが正常にインストールされたら、SDKのインストールや管理が可能になります。
SDKMANの基本的な機能について理解することは、SDKの効果的な管理と利用に不可欠です。このセクションでは、SDKMANのコマンドラインインターフェース（CLI）の概要から、SDKのインストール、バージョン管理、およびアンインストールまでを解説します。
SDKMANは主にコマンドラインインターフェース（CLI）を介して操作されます。CLIを使うことで、ターミナルから簡単にSDKの管理を行うことができます。主要なCLIコマンドは以下の通りです：
sdk list: インストール可能なSDKの一覧を表示します。
sdk install [SDK_NAME]: 指定したSDKをインストールします。[SDK_NAME]には、Java、Groovy、GradleなどのSDK名が入ります。
sdk use [SDK_NAME] [VERSION]: 指定したバージョンのSDKを有効化します。
sdk current: 現在のSDKのバージョンを表示します。
sdk default [SDK_NAME] [VERSION]: デフォルトのSDKとバージョンを設定します。
sdk list [SDK_NAME]: 指定したSDKのインストールされているバージョンの一覧を表示します。
sdk uninstall [SDK_NAME] [VERSION]: 指定したバージョンのSDKをアンインストールします。
これらのコマンドを使うことで、SDKのインストールや切り替え、バージョンの管理を容易に行うことができます。
SDKのインストールは、以下の手順に従います：
sdk listコマンドで利用可能なSDKの一覧を確認します。
sdk install [SDK_NAME]コマンドを使用して、インストールしたいSDKを指定します。
インストールが完了すると、sdk use [SDK_NAME] [VERSION]コマンドを使用して、特定のバージョンのSDKを有効にします。
SDKMANを使ってインストールされたSDKは、ユーザーのホームディレクトリ内に格納されます。
SDKMANを使用すると、複数のバージョンのSDKを簡単に管理できます。特定のバージョンのSDKを使用するには、sdk use [SDK_NAME] [VERSION]コマンドを使用します。必要に応じて、プロジェクトごとに異なるバージョンのSDKを使用することができます。
不要なSDKをアンインストールするには、sdk uninstall [SDK_NAME] [VERSION]コマンドを使用します。指定したバージョンのSDKが削除されます。
SDKMANを使用すると、複数のSDKを効率的に管理できます。このセクションでは、インストール可能なSDKの一覧の取得方法、特定のSDKのバージョン一覧の表示方法、およびインストール済みSDKの一覧の取得方法について解説します。
SDKMANを使用してインストール可能なSDKの一覧を取得するには、以下のコマンドを使用します：
sdk list
このコマンドを実行すると、利用可能なすべてのSDKの一覧が表示されます。Java、Groovy、Scala、Maven、Gradleなど、多くのSDKが含まれています。表示された一覧から、インストールしたいSDKの名前を選択してインストールすることができます。
 
以下は、SDKMANでインストール可能なSDKの一覧を表組みにしたものです：
この表には、ビルドツール、フレームワーク、言語、ランタイムなどが含まれています。
それぞれが異なる目的や用途に適しています。
特定のSDKのバージョン一覧を表示するには、以下のコマンドを使用します：
sdk list [SDK_NAME]
[SDK_NAME]には、インストールしたいSDKの名前を指定します。例えば、Javaの場合は、次のようにコマンドを入力します：
sdk list java
指定したSDK（ここではJava）の利用可能なバージョンが一覧表示されます。特定のバージョンをインストールしたい場合は、そのバージョンを選択してインストールします。
インストール済みのSDKの一覧を取得するには、以下のコマンドを使用します：
sdk list installed
これにより、ユーザーがすでにインストールしているすべてのSDKが表示されます。インストールされているSDKの一覧を確認することで、現在の環境にどのSDKが利用可能かを把握することができます。
SDKMAN自体も定期的にアップデートされます。新しい機能や改善点がリリースされるたびに、SDKMANを最新の状態に保つことが重要です。SDKMANをアップデートするには、以下のコマンドを使用します：
 
sdk selfupdate
このコマンドを実行すると、SDKMANの最新バージョンがダウンロードされ、自動的にアップデートが行われます。
SDKMANを使用する際には、特定のSDKを有効化して使用する必要があります。このセクションでは、SDKの有効化方法、無効化方法、およびグローバルSDKとローカルSDKの切り替え方法について説明します。
特定のSDKを使用するには、以下のコマンドを使用してSDKを有効化します：
 
sdk use [SDK_NAME] [VERSION]
[SDK_NAME]には使用したいSDKの名前、[VERSION]には使用したいSDKのバージョンを指定します。例えば、Javaのバージョン11を有効にするには、次のようにコマンドを入力します：
 
sdk use java 11.0.12-open
指定したSDKとバージョンが有効化され、現在のシェルセッションで使用可能になります。
特定のSDKを無効にするには、以下のコマンドを使用します：
 
sdk unset [SDK_NAME]
このコマンドを使用すると、指定したSDKが無効化され、デフォルトのSDKが有効化されます。
SDKMANでは、グローバルなSDKとローカルなSDKを切り替えることができます。グローバルSDKは、全体のシステムで使用されるデフォルトのSDKです。一方、ローカルSDKは、特定のプロジェクト内でのみ有効なSDKです。
sdk default [SDK_NAME] [VERSION]
このコマンドを使用して、デフォルトのSDKを指定のSDKとバージョンに設定します。
sdk use java 17.0.10-tem 
プロジェクトディレクトリ内で、.sdkmanrcというファイルを作成し、そこに設定を記述します。
java=17.0.10-tem
これにより、プロジェクト内でTemurin JDK 17.0.10が使用されるようになります。
Corretto: Amazonが提供するOpenJDKのバージョンです。Amazon Correttoは、Javaアプリケーションの開発と実行に使用できます。
Dragonwell: Alibabaが提供するOpenJDKのバージョンです。Dragonwellは、Alibabaの内部で開発および使用されているJDKのオープンソースバージョンです。
Gluon: Gluonは、Javaアプリケーションの開発ツールやフレームワークを提供する企業であり、JDKのカスタムバージョンを提供しています。
GraalVM CE: Oracleが開発しているGraalVMのCommunity Edition（CE）のバージョンです。GraalVMは、多言語ランタイムおよび開発ツールのプラットフォームです。
GraalVM Oracle: Oracleが提供するGraalVMの商用版です。Enterprise Editionとも呼ばれます。
Java.net: オープンソースコミュニティによって提供されるOpenJDKのバージョンです。
JetBrains: JetBrainsは、IDEであるIntelliJ IDEAの開発者であり、JBR（JetBrains Runtime）として知られるカスタムJDKのバージョンを提供しています。
Liberica: BellSoftが提供するOpenJDKのバージョンです。Liberica JDKは、商用サポートを含む様々なエディションで提供されています。
Liberica NIK: ニッポン情報株式会社（NIK）が提供するLiberica JDKのバージョンです。
Mandrel: Red Hatが提供するGraalVMのNative Imageのサブセットです。主にQuarkusアプリケーションの実行に使用されます。
Microsoft: Microsoftが提供するOpenJDKのバージョンです。AzureなどのクラウドサービスでのJavaアプリケーションの実行に使用されます。
Oracle: Oracleが提供するJava SE Development Kit（JDK）のバージョンです。Oracle JDKは、Javaの公式実装の1つです。
SapMachine: SAPが提供するOpenJDKのバージョンです。主にSAPアプリケーションの実行に使用されます。
Semeru: Huaweiが提供するOpenJDKのバージョンです。
Temurin: AdoptOpenJDKがTemurinに改名した後、Eclipse Adoptiumプロジェクトとして提供しているOpenJDKのバージョンです。
Tencent: Tencentが提供するOpenJDKのバージョンです。
Trava: Twitterが提供するOpenJDKのバージョンです。
Zulu: Azul Systemsが提供するOpenJDKのバージョンです。Zuluは、商用サポートを含む様々なエディションで提供されています。
これらのベンダーは、OpenJDKのカスタムバージョンを提供し、それぞれ異なる機能やサポートを提供しています。開発者は、自分のプロジェクトのニーズに合ったJDKを選択することができます。
SDKMANを使用してさまざまなSDKを管理できます。代表的なSDKの使用例を以下に示します：
Java:
sdk use java [VERSION]
Gradle:
sdk use gradle [VERSION]
Maven:
 
必要に応じて、使用したいSDKとバージョンを指定してコマンドを実行します。SDKMANを介して、プロジェクトごとに異なるSDKを簡単に切り替えることができます。