SDKMAN

出典: フリー教科書『ウィキブックス(Wikibooks)』

SDKMANは、ソフトウェア開発における複雑なSDKの管理をシンプルかつ効率的に行うためのツールです。本書では、SDKMANの基本から高度な機能までを包括的に解説します。開発者が異なるプロジェクトで異なるバージョンのSDKを必要とする現代の環境で、SDKの管理は必須です。SDKMANはその必要性に応え、簡単なコマンドでSDKのインストール、切り替え、管理を可能にします。本書は、SDKMANの初心者から上級者まで、幅広い読者層に役立つ情報を提供します。SDKのバージョン管理、プロジェクトへの統合、トラブルシューティングなど、SDKMANの機能や活用法を理解し、開発プロセスをスムーズに進めるための手助けとなるでしょう。

はじめに[編集]

SDKMAN(Software Development Kit Manager)は、ソフトウェア開発者が複数のソフトウェア開発キット(SDK)を管理するためのツールです。JavaGroovyGrailScalaKotlinMavenGradleAntなど、さまざまなプログラミング言語やビルドツールに対応しています。SDKMANを使用すると、複数のバージョンのSDKをシームレスに切り替えることができ、プロジェクトごとに異なるバージョンのSDKを使用することが容易になります。

SDKMANの利点[編集]

SDKMANの主な利点は以下の通りです:

複数のバージョンの管理
SDKMANを使用すると、複数のバージョンのSDKを簡単に管理できます。これにより、プロジェクトごとに異なるSDKバージョンを使用できます。
簡単な切り替え
SDKMANを介して、簡単に異なるバージョンのSDKに切り替えることができます。プロジェクトの要件に合わせて、必要なバージョンを選択できます。
環境の独立性
SDKMANはユーザーのホームディレクトリにSDKをインストールするため、システム全体に影響を与えることなく、個々のユーザーがSDKを管理できます。
プロジェクトの依存性の解決
プロジェクトごとに必要なSDKのバージョンを管理することで、プロジェクトの依存性の問題を回避できます。
複数OSのサポート
SDKMANは主要なオペレーティングシステム(Windows、macOS、Linux)をサポートしています。

SDKMANのインストール方法[編集]

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の基本[編集]

SDKMANの基本的な機能について理解することは、SDKの効果的な管理と利用に不可欠です。このセクションでは、SDKMANのコマンドラインインターフェース(CLI)の概要から、SDKのインストール、バージョン管理、およびアンインストールまでを解説します。

SDKMANのコマンドラインインターフェース(CLI)の概要[編集]

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のインストールは、以下の手順に従います:

  • sdk listコマンドで利用可能なSDKの一覧を確認します。
  • sdk install [SDK_NAME]コマンドを使用して、インストールしたいSDKを指定します。

インストールが完了すると、sdk use [SDK_NAME] [VERSION]コマンドを使用して、特定のバージョンのSDKを有効にします。

SDKMANを使ってインストールされたSDKは、ユーザーのホームディレクトリ内に格納されます。

SDKのバージョン管理[編集]

SDKMANを使用すると、複数のバージョンのSDKを簡単に管理できます。特定のバージョンのSDKを使用するには、sdk use [SDK_NAME] [VERSION]コマンドを使用します。必要に応じて、プロジェクトごとに異なるバージョンのSDKを使用することができます。

SDKのアンインストール[編集]

不要なSDKをアンインストールするには、sdk uninstall [SDK_NAME] [VERSION]コマンドを使用します。指定したバージョンのSDKが削除されます。

SDKの管理[編集]

SDKMANを使用すると、複数のSDKを効率的に管理できます。このセクションでは、インストール可能なSDKの一覧の取得方法、特定のSDKのバージョン一覧の表示方法、およびインストール済みSDKの一覧の取得方法について解説します。

インストール可能なSDKの一覧[編集]

SDKMANを使用してインストール可能なSDKの一覧を取得するには、以下のコマンドを使用します:

sdk list

このコマンドを実行すると、利用可能なすべてのSDKの一覧が表示されます。Java、Groovy、Scala、Maven、Gradleなど、多くのSDKが含まれています。表示された一覧から、インストールしたいSDKの名前を選択してインストールすることができます。

SDKMANでインストール可能なSDK[編集]

以下は、SDKMANでインストール可能なSDKの一覧を表組みにしたものです:

SDKMANでインストール可能なSDK
SDK 分類 説明
Apache ActiveMQ (Classic) メッセージング Apache ActiveMQは、メッセージブローカーシステムであり、分散メッセージングのためのオープンソースのJavaメッセージングサービスです。Classicバージョンは5.17.1です。
Ant ビルド Apache Antは、Javaプログラムのビルドを自動化するためのツールです。
AsciidoctorJ ドキュメント生成 AsciidoctorJは、AsciidoctorのJava実装であり、AsciiDoc形式のドキュメントを処理してHTML、PDF、EPUB、DocBookなどの形式に変換します。
Ballerina プログラミング言語 Ballerinaは、クラウドネイティブアプリケーションのためのプログラミング言語およびランタイムです。swan-lake-p3が利用可能です。
Concurnas プログラミング言語 Concurnasは、JVM上で並行プログラミングをサポートするプログラミング言語です。
CXF フレームワーク Apache CXFは、JavaプログラムからWebサービスを構築および消費するためのオープンソースフレームワークです。
Detekt 静的解析 Detektは、Kotlinコードの静的解析を行うツールです。コード品質を向上させ、バグやセキュリティの問題を見つけるのに役立ちます。
Flink データ処理 Apache Flinkは、大規模なストリームおよびバッチデータ処理に使用されるオープンソースの分散処理エンジンです。
Gaiden プログラミング言語 Gaidenは、関数型プログラミング言語であり、Clojureの影響を受けています。
Graal Cloud Native 実行環境 Graal Cloud Nativeは、GraalVMを使用してクラウドネイティブアプリケーションを構築および実行するためのプラットフォームです。
Gradle ビルド Gradleは、プロジェクトのビルド自動化および依存関係管理のためのビルドツールです。
Grails フレームワーク Grailsは、Javaプラットフォーム向けのWebアプリケーションフレームワークです。
Groovy プログラミング言語 Groovyは、Javaプログラミング言語の機能を拡張し、シンプルな構文で記述された動的なプログラミング言語です。
GroovyServ ツール GroovyServは、Groovyスクリプトを高速に実行するためのサーバーです。
Infrastructor ツール Infrastructorは、インフラストラクチャのコードを記述するためのDSL(Domain-Specific Language)です。
Java プログラミング言語 Javaは、オブジェクト指向プログラミング言語であり、広く使用されているプログラミング言語の1つです。
JBake ツール JBakeは、Markdownファイルから静的Webサイトを生成するためのツールです。
JBang ツール JBangは、Javaベースのスクリプトを作成し、実行するためのツールです。
Jikkou ツール Jikkouは、GitOpsパイプラインを構築するためのフレームワークです。
Apache JMeter テスト Apache JMeterは、負荷テスト、機能テスト、パフォーマンステストを行うためのJavaベースのオープンソースツールです。
Joern 解析 Joernは、静的解析ツールであり、ソースコードを分析してセキュリティの問題を特定します。
Karaf サーバー Apache Karafは、Osgi(Open Service Gateway Initiative)ランタイムを提供するカーネルです。
Kotlin プログラミング言語 Kotlinは、静的型付けのプログラミング言語であり、Java Virtual Machine(JVM)およびJavaScriptで実行できます。
Layrry ツール Layrryは、Javaプラットフォーム向けの軽量なモジュール化ツールです。
Leiningen ビルド Leiningenは、Clojureプロジェクトのためのビルドツールです。
Maven ビルド Mavenは、Javaプロジェクトのビルド自動化、依存関係管理、およびプロジェクト管理のためのツールです。
Micronaut フレームワーク Micronautは、軽量でリアクティブなマイクロサービスアプリケーションを構築するためのフレームワークです。
Mule Flow Diagrams ツール Mule Flow Diagramsは、Muleアプリケーションのフローダイアグラムを作成するためのツールです。
MyBatis Migrations データベース MyBatis Migrationsは、データベースマイグレーションのためのツールです。
Neo4j-Migrations データベース Neo4j-Migrationsは、Neo4jグラフデータベースのマイグレーションを管理するためのツールです。
Pierrot ツール Pierrotは、Javaプロジェクトのビルドスクリプトを管理するためのツールです。
Pomchecker ツール Pomcheckerは、Mavenプロジェクトのpom.xmlファイルを検証するためのツールです。
Scala プログラミング言語 Scalaは、オブジェクト指向および関数型プログラミング言語であり、JVM上で実行できます。
Spark データ処理 Apache Sparkは、大規模なデータ処理タスクを処理するためのクラスターコンピューティングフレームワークです。
Spring Boot フレームワーク Spring Bootは、Javaアプリケーションの簡素化された、生産的な開発を可能にするフレームワークです。
Apache Tomcat サーバー Apache Tomcatは、Java ServletおよびJavaServer Pages(JSP)の実装であり、Java EE仕様をサポートするWebコンテナです。
Vert.x フレームワーク Vert.xは、レアクティブおよびポリグロットなアプリケーションを構築するためのツールキットです。
VisualVM ツール VisualVMは、Java仮想マシン上で実行されるアプリケーションをモニタリングおよびプロファイリングするためのツールです。
この表には、ビルドツール、フレームワーク、言語、ランタイムなどが含まれています。
それぞれが異なる目的や用途に適しています。

特定のSDKのバージョン一覧[編集]

特定のSDKのバージョン一覧を表示するには、以下のコマンドを使用します:

sdk list [SDK_NAME]

[SDK_NAME]には、インストールしたいSDKの名前を指定します。例えば、Javaの場合は、次のようにコマンドを入力します:

sdk list java

指定したSDK(ここではJava)の利用可能なバージョンが一覧表示されます。特定のバージョンをインストールしたい場合は、そのバージョンを選択してインストールします。

インストール済みSDKの一覧[編集]

インストール済みのSDKの一覧を取得するには、以下のコマンドを使用します:

sdk list installed

これにより、ユーザーがすでにインストールしているすべてのSDKが表示されます。インストールされているSDKの一覧を確認することで、現在の環境にどのSDKが利用可能かを把握することができます。

SDKのアップデート[編集]

SDKMAN自体も定期的にアップデートされます。新しい機能や改善点がリリースされるたびに、SDKMANを最新の状態に保つことが重要です。SDKMANをアップデートするには、以下のコマンドを使用します:

sdk selfupdate

このコマンドを実行すると、SDKMANの最新バージョンがダウンロードされ、自動的にアップデートが行われます。

SDKの使用[編集]

SDKMANを使用する際には、特定のSDKを有効化して使用する必要があります。このセクションでは、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を無効にするには、以下のコマンドを使用します:

sdk unset [SDK_NAME]

このコマンドを使用すると、指定したSDKが無効化され、デフォルトのSDKが有効化されます。

グローバルSDKとローカルSDKの切り替え[編集]

SDKMANでは、グローバルなSDKとローカルなSDKを切り替えることができます。グローバルSDKは、全体のシステムで使用されるデフォルトのSDKです。一方、ローカルSDKは、特定のプロジェクト内でのみ有効なSDKです。

  1. グローバルSDKの切り替え:
    sdk default [SDK_NAME] [VERSION]
    
    このコマンドを使用して、デフォルトのSDKを指定のSDKとバージョンに設定します。
  2. ローカルSDKの切り替え:
    sdk use java 17.0.10-tem
    
  3. プロジェクトのSDKの自動切り替え:
    プロジェクトディレクトリ内で、.sdkmanrcというファイルを作成し、そこに設定を記述します。
    例えば、Temurin JDK 17.0.10 を使用する場合は、.sdkmanrcファイルに次の行を追加します:
    java=17.0.10-tem
    
    これにより、プロジェクト内でTemurin JDK 17.0.10が使用されるようになります。

JDK Vendor[編集]

  1. Corretto: Amazonが提供するOpenJDKのバージョンです。Amazon Correttoは、Javaアプリケーションの開発と実行に使用できます。
  2. Dragonwell: Alibabaが提供するOpenJDKのバージョンです。Dragonwellは、Alibabaの内部で開発および使用されているJDKのオープンソースバージョンです。
  3. Gluon: Gluonは、Javaアプリケーションの開発ツールやフレームワークを提供する企業であり、JDKのカスタムバージョンを提供しています。
  4. GraalVM CE: Oracleが開発しているGraalVMのCommunity Edition(CE)のバージョンです。GraalVMは、多言語ランタイムおよび開発ツールのプラットフォームです。
  5. GraalVM Oracle: Oracleが提供するGraalVMの商用版です。Enterprise Editionとも呼ばれます。
  6. Java.net: オープンソースコミュニティによって提供されるOpenJDKのバージョンです。
  7. JetBrains: JetBrainsは、IDEであるIntelliJ IDEAの開発者であり、JBR(JetBrains Runtime)として知られるカスタムJDKのバージョンを提供しています。
  8. Liberica: BellSoftが提供するOpenJDKのバージョンです。Liberica JDKは、商用サポートを含む様々なエディションで提供されています。
  9. Liberica NIK: ニッポン情報株式会社(NIK)が提供するLiberica JDKのバージョンです。
  10. Mandrel: Red Hatが提供するGraalVMのNative Imageのサブセットです。主にQuarkusアプリケーションの実行に使用されます。
  11. Microsoft: Microsoftが提供するOpenJDKのバージョンです。AzureなどのクラウドサービスでのJavaアプリケーションの実行に使用されます。
  12. Oracle: Oracleが提供するJava SE Development Kit(JDK)のバージョンです。Oracle JDKは、Javaの公式実装の1つです。
  13. SapMachine: SAPが提供するOpenJDKのバージョンです。主にSAPアプリケーションの実行に使用されます。
  14. Semeru: Huaweiが提供するOpenJDKのバージョンです。
  15. Temurin: AdoptOpenJDKがTemurinに改名した後、Eclipse Adoptiumプロジェクトとして提供しているOpenJDKのバージョンです。
  16. Tencent: Tencentが提供するOpenJDKのバージョンです。
  17. Trava: Twitterが提供するOpenJDKのバージョンです。
  18. Zulu: Azul Systemsが提供するOpenJDKのバージョンです。Zuluは、商用サポートを含む様々なエディションで提供されています。

これらのベンダーは、OpenJDKのカスタムバージョンを提供し、それぞれ異なる機能やサポートを提供しています。開発者は、自分のプロジェクトのニーズに合ったJDKを選択することができます。

SDKの使用例(例:Java、Gradle、Mavenなど)[編集]

SDKMANを使用してさまざまなSDKを管理できます。代表的なSDKの使用例を以下に示します:

Java
sdk use java [VERSION]
Gradle
sdk use gradle [VERSION]
Maven

必要に応じて、使用したいSDKとバージョンを指定してコマンドを実行します。SDKMANを介して、プロジェクトごとに異なるSDKを簡単に切り替えることができます。

SDKMANの設定[編集]

デフォルトのSDKの設定[編集]

プロキシの設定[編集]

環境変数とSDKMAN[編集]

SDKMANとプロジェクト[編集]

SDKMANを使用したプロジェクトのセットアップ[編集]

プロジェクトのSDKのバージョン管理[編集]

SDKMANの拡張[編集]

SDKMANのプラグインシステム[編集]

カスタムSDKの追加[編集]

SDKMANのAPIの利用[編集]

トラブルシューティング[編集]

よくある問題と解決策[編集]

バグ報告とフィードバックの提供方法[編集]

ベストプラクティス[編集]

SDKの適切な管理方法[編集]

SDKMANの効果的な使用方法[編集]

インストールされたSDKの最適な活用方法[編集]

参考資料[編集]

SDKMANの公式ドキュメントへのリンク[編集]

関連するリソースやブログポストのリンク[編集]