RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

Java 18 インストールと新機能紹介【最新版】

2022/03/22 に Java 18が公式にリリースされたので今回は新しく追加された機能からいくつかをピックアップして紹介していこうかと思います。
また、本記事ではJava18のインストール方法についても書いていきます。

Javaとは

Javaは1995年にリリースされた歴史の長いプログラミング言語で、現在までで 18 ものバージョンがリリースされています。
新機能のリリースサイクルは半年に1回で3月と9月に発表されます。
毎回のリリースで様々な新機能が発表されています、例えば

などなど色々あります。
適当にピックアップしましたが、他にも色々とリリースしています。
気になる方は公式サイトを見てみてください。(目次のProjectsに各バージョンのリリース情報が載ってます。)

リリースごとに進化を遂げて来たJavaですが、今回のリリースでも色々と面白い機能が追加されています。
この後それらの紹介をしていきますが、まずはローカルでJava18を使えるようにするためのインストール方法について説明したいと思います!

なお、今回は windows10 を用いて環境構築を行います。

Java 18のインストール方法

インストールの流れは以下です。

まずダウンロードページに移動します。

https://www.oracle.com/java/technologies/downloads/

今回はwindowsにJava18をインストールするので、Java18タブ > Windowsタブ > x64 Installerをダウンロードします。

java ダウンロードページ

次にインストーラを起動します。
以下のようなインストールウィザードが表示されるので「次へ」を押下します。

インストールウィザード

Javaのインストール先を聞かれます。
インストール先を変更したい場合は「変更...」でフォルダを指定した後「次へ」を押下します。

インストール先を選択

以下の画面が出たらインストール完了です。

インストール完了

Javaコマンドを使えるようにするためには環境変数の設定が必要になります。
インストールの初期設定では、Javaコマンドが格納されているbinフォルダへのシンボリックリンクのPathが自動で環境変数に設定されています。

もしシンボリックリンクではなく、jdkのbinフォルダに直接指定したい場合は他記事にて詳しい内容が紹介されていますので、別途お調べになっていただけますと幸いです。

インストール方法についてのご紹介は以上になります。

Java 18の機能紹介

以下が今回追加された機能の一覧です。

  • 400: ★ UTF-8 by Default
  • 408: ★ Simple Web Server
  • 413: Code Snippets in Java API Documentation
  • 416: Reimplement Core Reflection with Method Handles
  • 417: Vector API (Third Incubator)
  • 418: Internet-Address Resolution SPI
  • 419: Foreign Function & Memory API (Second Incubator)
  • 420: Pattern Matching for switch (Second Preview)
  • 421: Deprecate Finalization for Removal

openJDK JDK18: https://openjdk.java.net/projects/jdk/18/

今回はこの中から★の機能をピックアップして紹介していきます。

400: UTF-8 by Default

Summary

Specify UTF-8 as the default charset of the standard Java APIs. 
With this change, APIs that depend upon the default charset will behave consistently across all implementations, operating systems, locales, and configurations.

上記の通り、Javaの標準APIのデフォルトの文字コードUTF-8に統一されます。
これによってデフォルトの文字コードに依存する標準APIが全て実行環境で一貫した動作をするようになります。(引数として文字コードを指定した場合は従来通りの動きをします。)
「デフォルトの文字コードというのはアプリケーション実行環境(OSとかユーザー設定とか)に依存していて、これが統一されることでOSが変わると文字化けが発生するみたいな悩みが解消されることになります。

例えば、今までだとOS間で以下のような文字化けが発生していました。

java.io.FileWriter を用いて文字コードを指定せず書き込みを行った場合

// (macOS)で書き込み
FileWriter writer = new java.io.FileWriter("hello.txt");
writer.write("こんにちは");
writer.close();

java.io.FileReader(“hello.txt”) -> “こんにちは” (macOS)
// windowsで文字化け発生
java.io.FileReader(“hello.txt”) -> “縺ォ縺。縺ッ” (Windows (ja-JP))

こういった問題が今回の修正によって減ることになります。

ちなみに、以下のコマンドで現在のデフォルトの文字コードを調べることができます。
気になる方はぜひコマンドを叩いてみて下さい。

$ java -XshowSettings:properties -version 2>&1 | grep file.encoding

以下にJava8 と Java18 での表示の違いを載せておきます。

Java 8
windowsだと以下のように表示されます。
file.encoding = MS932 となっている箇所が文字コードです。
MS932なのでUTF-8で書き込まれた文字はしっかり文字化けします。

$ java -XshowSettings:properties -version 2>&1 | grep file.encoding
    file.encoding = MS932
    file.encoding.pkg = sun.io

Java 18
ちゃんとUTF-8になっていますね!

$ java -XshowSettings:properties -version 2>&1 | grep file.encoding
    file.encoding = UTF-8

ただJDK 18以前との互換性は気になるところで、アプリケーションに与える影響は大きそうです。
公式サイトにも以下のように記載されています。
一応困ったらすぐに、前のバージョンと同じ状態に戻すことは可能になるそうです。

We recognize that this change could have a widespread compatibility impact on programs that migrate to JDK 18. 
For this reason, it will always be possible to recover the pre-JDK 18 behavior, where the default charset is environment-dependent.

408: Simple Web Server

Summary
Provide a command-line tool to start a minimal web server that serves static files only. 
No CGI or servlet-like functionality is available. 
This tool will be useful for prototyping, ad-hoc coding, and testing purposes, particularly in educational contexts.

コマンドを叩くだけで簡易的なwebサーバを立てられるようになりました。
簡易的なサーバなので出来ることとしては、静的ファイル(htmlファイル、画像ファイルとか)をレスポンスとして返すことくらいになります。
HTTPメソッドもGETとHEADのみを受け付ける仕様になっています。
なので、この機能の目的としてはプロトタイプの作成であったり、簡単なテスト、教育用といったものが上げられています。

では使い方を見ていきましょう。
まず、静的ファイルとして簡単なhtmlファイルを用意したいと思います。

index.html

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>Java 18 インストールと新機能紹介【最新版】</title>
</head>
<body>
  <h1>Hello Java 18!</h1>
</body>
</html>

こちら作成後ローカルの /c/java18-test/index.html にファイルを配置します。

次に、webサーバーを立ち上げていきます。
まず、インストールしたjdkのフォルダに移動します。
インストール時に指定したフォルダの中にbinフォルダがあるのでそこに入ります。

# binに移動
$ cd /c/Program Files/Java/jdk-18/bin

binフォルダの中に jwebserver.exe という実行ファイルがあるので、起動することでサーバーを立ち上げることができます。
以下のようにコマンドを叩きます。
なお、今回 -d オプションによってhtmlファイルを配置したディレクトリを指定しています。

# サーバー立ち上げ
$ ./jwebserver -d /c/java18-test
Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
Serving C:\Program Files\Java\jdk-18\bin and subdirectories on 127.0.0.1 port 8000
URL http://127.0.0.1:8000/

http://127.0.0.1:8000/ にブラウザからアクセスすると以下のように表示され、先ほど配置したindex.htmlが表示されているのが分かります。 こんな感じで簡単にwebサーバーを立ち上げられました。

jwebserver

最後に

今回はJavaのインストール方法と最新機能を紹介しました。
これからも半年毎にリリースが入りますので、引き続き注目していきたいと思います。

参考文献


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.