虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

Java Early-Access Buildsを実行する

こんにちは。虎の穴ラボのH.Kです。
今回はJava(JDK)のEarly-Access Buildsを実行する方法について、解説していきたいと思います。

記事を書くきっかけ

2020年3月にJava 14がリリースされ、9月にはJava 15がリリース予定です。
次々とversionが上がっていくJavaに追随していくため、リリースに先行して、Early Access版を試したいという思いが強くなっていきました。
ただ、Early Access版については、インストーラが用意されておらず、普段EclipseやIntelliJ IDEAなどIDEに頼っていると実行するのに悩むこともあるかと思います。
その障壁を越えるための記事になればいいなと思い、記事にしました。

実行環境など

  • macOS Catalina
    • Homebrew
      • macOS用のパッケージマネージャーです。JDKのインストール以外にもたくさんのパッケージを管理できます。
    • SDKMAN!
      • 以前はGVM*1と呼ばれていたSDKのパッケージマネージャーです。Java関係のパッケージであれば網羅的に管理できます。
  • Windows 10

Windowsに関しては真心込めて、全て手動でダウンロードから設定まで実施します。(そんなに手順多くないですが。)
ダウンロードとか設定とか手で管理したくないという方はWSL(Windows Subsystem for Linux)*2や、Cygwinを導入することで、SDKMAN!が使えるようになります。WSLやCygwin導入後、macOS版のSDKMAN!の記載を参考に実施してみてください。
macOSではHomebrewSDKMAN!という2つのパッケージマネージャを使って実行環境を整えます。

試してみるJDKは以下のものになります。(2020年5月時点のEarly Access版)

  • JDK 15 Early-Access Builds

jdk.java.net

最新のEarly accessについてはjava.netの記載を確認してください。

macOS

Homebrew

Homebrewを使った環境構築方法は以下のようになります。

brew.sh

Homebrewのインストール方法については多くの記事があるので、ここでは割愛します。
以下のコマンドでOpenJDKのEarly-Access版がインストールされます。
Early-Access版ではなく最新版のJDKが欲しい場合はjava-betajavaにして実行してください。

$ brew cask install java-beta

あとはJAVA_HOMEを設定するだけ。

$ export JAVA_HOME=`/usr/libexec/java_home -v 15`
$ export PATH=$JAVA_HOME/bin:$PATH

なお、恒久的に使う場合は、~/.bash_profileに書き込みを行います。
viなどで直接編集するか、以下のコマンドを実行します。

$ echo "export JAVA_HOME='/usr/libexec/java_home -v 15'" >> .bash_profile
$ echo 'export PATH=$JAVA_HOME/bin:$PATH' >> .bash_profile

ちゃんと設定できているか確認します。

$ java -version

SDKMAN!

続いて、SDKMAN!を使った環境構築方法です。

sdkman.io

まずはSDKMAN!をインストールします。

$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"

欲しいJDKのバージョンを確認します。

$ sdk list java

今回はJDK15のEarly-Access版が欲しいので以下のJDKが対象となります。

Vendor Use Version Dist Status Identifier
Java.net 15.ea.22 open 15.ea.22-open

あとはIdentifierを使ってインストールするだけです。
Early-Access版ではなく最新版が欲しい場合は15.ea.22-openなしで実行してください。

$ sdk install java 15.ea.22-open

最後にパスの設定を行います。

$ export JAVA_HOME=$HOME/.sdkman/candidates/java/current
$ export PATH=$JAVA_HOME/bin:$PATH

なお、恒久的に使う場合は、~/.bash_profileに書き込みを行います。
viなどで直接編集するか、以下のコマンドを実行します。

$ echo 'export JAVA_HOME=$HOME/.sdkman/candidates/java/current' >> .bash_profile
$ echo 'export PATH=$JAVA_HOME/bin:$PATH' >> .bash_profile

ちゃんと設定できているか確認します。

$ java -version

Windows

JDK 15 Early-Access Buildsにアクセスし、バイナリファイルをダウンロードします。
Windows用のファイルを選択します。

f:id:toranoana-lab:20200510155641p:plain
ダウンロード画面

ダウンロードしたらzipファイルを適当なパスに展開します。
今回は深く考えず、Dドライブ直下に展開しています。

展開が完了したらパスを通します。
Dドライブ直下に展開した場合、以下のように設定します。
(Pathは追記する形になると思います。)

JAVA_HOME:D:\jdk-15
Path:D:\jdk-15\bin

ちゃんと設定できているか確認します。

$ java -version

おまけ:Java 15を試す

せっかく環境を作ったのですから新機能を試したいですよね? 手軽に試せるJava 15からの機能にText Blocksがあります。*3

Text Blocksの詳細はこちらをご覧ください。 openjdk.java.net

これをjshellから実行して動作確認してみます。
(記事のサンプルはWindowsで実行しています。)
Text Blocksは改行必須であり、jshellで対話形式で実行するとエラーになるので、以下のコードを書いたファイル(今回はDドライブ直下にtest.txtという形式で作成)を用意し、ファイルから実行します。

String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;
System.out.println(html);
/ex

/exはjshellを抜けるコマンドです。(/exitの略)
今回はこのテキストを実行したあと、jshellを開いたままにせずに閉じるために入れています。

これをjshellで実行します。

$ jshell "D:\test.txt"

実行結果はこんな感じになります。

f:id:toranoana-lab:20200510162731p:plain
Text Blocksの実行結果

元の文字列と比較するとスペースがいい感じにトリムされているのが見て取れますね。

まとめ

どの方法であっても、そこまで多くのステップをかけずに最新のJDKを試せます。
特にパッケージマネージャを使ったやり方ですと、様々なバージョンのJDKを切り替えることができ、
実際の開発と実験的な試用とで使い分けてみたり、ちょっとだけ最新バージョンを試してみたりとJavaライフの幅が広がると思います。

P.S.

虎の穴ラボでの開発に少しでも興味を持っていただけた方は、採用説明会やカジュアル面談という場でもっと深くお話しすることもできます。ぜひお気軽に申し込みいただければ幸いです。
カジュアル面談では虎の穴ラボのエンジニアが、開発プロセスの内容であったり、「今期何見ました?」といったオタクトークから業務の話まで何でもお応えします。

カジュアル面談や採用情報はこちらをご確認ください。
yumenosora.co.jp

※現在はオンラインカジュアル面談のみ受け付けております。(2020/5/8時点)
現在行っているオンラインによるWeb面談についてはこちらの記事をご参照ください。
toranoana-lab.hatenablog.com

先日のブログでフルリモートワークに移行したお話を掲載させていただきましたが、
5月27日に「【オンライン開催】リモートワークノウハウLT【とらのあなLT】」を開催します。
今回はリモートワークに的を絞った内容となります。人数制限はございませんのでぜひご参加ください!

yumenosora.connpass.com

*1:Go言語のパッケージマネージャーと名前が被っていたため変更

*2:PowerShellでもSDKMAN!は使えるんですが、WSLを有効にしないとbashが使えない・・・

*3:Java 14でもプレビュー機能として入っていましたが。