【環境構築】fish shellを用いたDebian環境にSDKMANおよびJava(JDK)をインストールする方法
前書き:SDKMANはbash(もしくはzsh)前提
SDKMANは、JDK(Java開発環境)やGroovy、Scala、Gradleなどのバージョン管理ツールです。主に、JVM系のツールを管理します。Rubyのrbenv、Pythonのpyenvと同様の立ち位置のツールであり、CLIから任意のバージョンのソフト(例:Java)をインストール/使用/削除できます。
SDKMANの公式サイトに書かれている通り、SDKMANはbashで実装されています。そのため、Login Shellがbashの場合は問題なく動作しますが、fish環境では実行時にエラーが出てしまいます。
本記事では、fish環境にSDKMANをイントールし、SDKMAN経由でJava(JDK)をインストールする方法を紹介します。
検証環境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
_,met$$$$$gg. nao@debian ,g$$$$$$$$$$$$$$$P. ---------- ,g$$P" """Y$$.". OS: Debian GNU/Linux 10 (buster) x86_64 ,$$P' `$$$. Kernel: 4.19.67 ',$$P ,ggs. `$$b: Uptime: 25 mins `d$$' ,$P"' . $$$ Packages: 4325 (dpkg), 13 (flatpak) $$P d$' , $$P Shell: fish 3.0.2 $$: $$. - ,d$$' Resolution: 2560x1080 $$; Y$b._ _,d$P' DE: Pantheon Y$$. `.`"Y$$$$P"' WM: Mutter(Gala) `$$b "-.__ Terminal: io.elementary.t `Y$$ CPU: AMD Ryzen 7 3800X 8- (16) @ 3.900GHz `Y$$. GPU: NVIDIA NVIDIA Corporation TU107 `$$b. Memory: 3457MiB / 64404MiB `Y$$b. `"Y$b._ |
SDKMANのインストール
まず、SDKMANの依存パッケージをインストールします。SDKMAN公式サイトに依存パッケージ情報(curl, zip/unzip)が記載されていますが、実際は以下のパッケージ5個をインストールしなければいけません。
1 |
$ sudo apt install bash zip unzip curl sed |
次に、SDKMANをインストールします。curlコマンドで、SDKMANをインストールするためのShell Scriptをダウンロードし、その内容をbashで実行します。
1 |
$ curl -s "https://get.sdkman.io" | bash |
上記のコマンドが成功すれば、SDKMANは”$HOME/.sdkman”にインストールされます。
fishとfisherをインストール
この段階でLogin Shellをfish(shell)に変更していない場合、以下の記事を参考に変更してください。また、SDKMANをfishで使うには、fisher(fishプラグインマネージャ)も必要ですので、合わせてインストールしてください。
環境構築:ユーザフレンドリーで補完機能の強力なfishへ移行(Login shellをbashからfishへ移行)
SDKMAN! for fishプラグインのインストール
SDKMANは、bash起動時に設定ファイル(sdkman-init.sh)を読み込みます。この仕組みがfishでは上手く動かないので、別途プラグイン(SDKMAN! for fish)をインストールする事によって、この問題を解決します。
プラグインのインストール手順は、以下の通りです。
1 |
$ fisher add reitzig/sdkman-for-fish@v1.4.0 |
Javaのインストール
ここまでの手順でSDKMANが動作します。ここからは、Javaをインストールする手順を説明します。
まずは、インストールできるJavaのVersionを確認します。前提情報ですが、Javaは複数のベンダが公開しているJDKディストリビューションがあります。いずれのJDKも、マルチプラットフォーム(Win/Mac/Linux)対応であり、OpenJDKをベースにしています。特にこだわりがなければ、リファレンス実装であるJava.netが公開しているJDKを選択しましょう。
以下、OpenJDK(Version13.02)のインストール手順です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
$ sdk selfupdate (注釈):SDKMAN自体を更新 $ sdk list java ================================================================================ Available Java Versions ================================================================================ Vendor | Use | Version | Dist | Status | Identifier -------------------------------------------------------------------------------- AdoptOpenJDK | | 14.0.2.j9 | adpt | | 14.0.2.j9-adpt | | 14.0.2.hs | adpt | | 14.0.2.hs-adpt | | 13.0.2.j9 | adpt | | 13.0.2.j9-adpt | | 13.0.2.hs | adpt | | 13.0.2.hs-adpt | | 12.0.2.j9 | adpt | | 12.0.2.j9-adpt | | 12.0.2.hs | adpt | | 12.0.2.hs-adpt | | 11.0.8.j9 | adpt | | 11.0.8.j9-adpt | | 11.0.8.hs | adpt | | 11.0.8.hs-adpt | | 8.0.265.j9 | adpt | | 8.0.265.j9-adpt | | 8.0.265.hs | adpt | | 8.0.265.hs-adpt Amazon | | 11.0.8 | amzn | | 11.0.8-amzn | | 8.0.265 | amzn | | 8.0.265-amzn Azul Zulu | | 14.0.2 | zulu | | 14.0.2-zulu | | 13.0.4 | zulu | | 13.0.4-zulu | | 13.0.4.fx | zulu | | 13.0.4.fx-zulu | | 12.0.2 | zulu | | 12.0.2-zulu | | 11.0.8 | zulu | | 11.0.8-zulu | | 11.0.8.fx | zulu | | 11.0.8.fx-zulu | | 10.0.2 | zulu | | 10.0.2-zulu | | 9.0.7 | zulu | | 9.0.7-zulu | | 8.0.265 | zulu | | 8.0.265-zulu | | 8.0.265.fx | zulu | | 8.0.265.fx-zulu | | 8.0.232.fx | zulu | | 8.0.232.fx-zulu | | 7.0.262 | zulu | | 7.0.262-zulu | | 6.0.119 | zulu | | 6.0.119-zulu BellSoft | | 14.0.2.fx | librca | | 14.0.2.fx-librca | | 14.0.2 | librca | | 14.0.2-librca | | 13.0.2.fx | librca | | 13.0.2.fx-librca | | 13.0.2 | librca | | 13.0.2-librca | | 12.0.2 | librca | | 12.0.2-librca | | 11.0.8.fx | librca | | 11.0.8.fx-librca | | 11.0.8 | librca | | 11.0.8-librca | | 8.0.265.fx | librca | | 8.0.265.fx-librca | | 8.0.265 | librca | | 8.0.265-librca GraalVM | | 20.2.0.r11 | grl | | 20.2.0.r11-grl | | 20.2.0.r8 | grl | | 20.2.0.r8-grl | | 20.1.0.r11 | grl | | 20.1.0.r11-grl | | 20.1.0.r8 | grl | | 20.1.0.r8-grl | | 20.0.0.r11 | grl | | 20.0.0.r11-grl | | 20.0.0.r8 | grl | | 20.0.0.r8-grl | | 19.3.1.r11 | grl | | 19.3.1.r11-grl | | 19.3.1.r8 | grl | | 19.3.1.r8-grl Java.net | | 16.ea.13 | open | | 16.ea.13-open | | 15.ea.36 | open | | 15.ea.36-open | | 14.0.2 | open | installed | 14.0.2-open | | 13.0.2 | open | | 13.0.2-open | | 12.0.2 | open | | 12.0.2-open | | 11.0.8 | open | | 11.0.8-open | >>> | 10.0.2 | open | installed | 10.0.2-open | | 9.0.4 | open | | 9.0.4-open | | 8.0.265 | open | installed | 8.0.265-open SAP | | 14.0.2 | sapmchn | | 14.0.2-sapmchn | | 13.0.2 | sapmchn | | 13.0.2-sapmchn | | 12.0.2 | sapmchn | | 12.0.2-sapmchn | | 11.0.8 | sapmchn | | 11.0.8-sapmchn ================================================================================ Use the Identifier for installation: $ sdk install java 11.0.3.hs-adpt ================================================================================ $ sdk install java 13.0.2-open (注釈):OpenJDKのインストール Downloading: java 13.0.2-open In progress... ################################################################## 100.0% Repackaging Java 13.0.2-open... Done repackaging... Installing: java 13.0.2-open Done installing! Do you want java 13.0.2-open to be set as default? (Y/n): Y (注釈):インストールしたJDKをデフォルトJDKに変更 Setting java 13.0.2-open as default. |
環境変数JAVA_HOMEの設定
最後に、JDKのインストール先を環境変数JAVA_HOMEに設定します。
SDKMANがインストールするJDKは、”$HOME/.sdkman/candidates/java/”以下にインストールされます。同ディレクトリ内にcurrentというシンボリックリンクがあり、このリンクはデフォルトJDKのディレクトリを指しています。
1 2 3 4 5 6 7 8 9 |
$ ls -al /home/nao/.sdkman/candidates/java/ 合計 24 drwxr-xr-x 6 nao nao 4096 8月 30 12:35 ./ drwxr-xr-x 4 nao nao 4096 8月 13 19:46 ../ drwxr-xr-x 9 nao nao 4096 8月 30 00:15 10.0.2-open/ drwxr-xr-x 8 nao nao 4096 8月 30 12:35 13.0.2-open/ drwxr-xr-x 8 nao nao 4096 8月 13 19:46 14.0.2-open/ drwxr-xr-x 9 nao nao 4096 7月 27 20:49 8.0.265-open/ lrwxrwxrwx 1 nao nao 11 8月 30 12:35 current -> 13.0.2-open/ |
そのため、環境変数JAVA_HOMEには”$HOME/.sdkman/candidates/java/current”を設定します。使用するJDKを変更したとしても、SDKMANがcurrentシンボリックリンクが指すディレクトリを変更してくれるため、環境変数JAVA_HOMEの設定を修正する必要がありません。
以下、fishの設定ファイル($HOME/.config/fish/config.fish)に環境変数JAVA_HOMEを設定する例です。
1 |
$ nvim ~/.config/fish/config.fish (注釈) 使用するエディタは任意 |
1 2 3 |
# 以下の二行を追記 set -x JAVA_HOME $HOME/.sdkman/candidates/java/current/ set -x PATH $PATH $JAVA_HOME/bin |
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。