今月から、Java SE 9で導入されるProject Kullaについて紹介していきます。Project KullaはOpenJDKのサブプロジェクトで、JShellというツールの仕様策定、実装を行っています。Project KullaのリードはOracleのRobert Field氏、また日本からは吉田真也氏がコミッタとして参加しています。

 JShellはいわゆるREPL(Read-Eval-Print Loop)ツールで、Javaのコードをインタラクティブに入力し、その場で実行できるツールです。

 Java SE 9は2017年7月にリリース予定ですが、既にEarly Accessは公開されています。本記事でも、Java SE 9のEarly Accessを使用していきます。Early Accessのビルドは毎週行われており、本記事ではBuild 153を使用しました。

JShellとは

 前述したようにJShellは、JavaのREPLツールです。REPLツールは入力をその場で評価、実行を行い、結果を出力することを繰り返すツールです。多くの言語でREPLツールは提供されており、JVM言語であるScalaやGroovyでも提供されています。Java SE 9で、やっとJavaでもREPLが使えるようになるわけです。

 こういうツールは、試してみるのが一番です。早速やってみましょう。

 JShellはJDKだけの機能で、 JDKをインストールしたディレクトリーのbinディレクトリーに配置されています。必要に応じて、パスを通しておいてください。パスが通っていれば、jshellで起動します。

C:> jshell
|  JShellへようこそ -- バージョン9-ea
|  概要については、次を入力してください: /help intro
|

jshell>

 JShellを起動すると、プロンプトが表示されるので、ここにJavaのコードを入力していきます。

 やはり、はじめは"Hello, World!"でしょうか。Javaで"Hello, World!"を表示させるには、クラスを作成して、mainメソッドを実装する必要があります。しかし、JShellではその必要はありません。

jshell> System.out.println("Hello, World!")
Hello, World!

jshell>

 上図では分かりにくいですが、printlnメソッドのコールを記述した後に、[Enter]キーを入力して改行しています。改行すると、JShellはその行を評価し、実行します。

 つまり、JShellでは、このようにJavaのクラスやメソッドを定義しなくても、式や文を記述することができます。また、行末のセミコロンも省略することができます。

 さらに書いていきましょう。

jshell> int x = 10
x ==> 10

jshell> x++
$5 ==> 10

jshell> System.out.println(x)
11

jshell>

 1行目で変数xを定義し、次の行でインクリメントしています。入力した変数は保持されていて、次行以降でも使用可能です。ここでも、変数xの値がインクリメントして11になっていることが分かります。

 ここまでで示したように、JShellでは簡単にコードを試せます。JShellで扱うコードは、Javaのコードの断片という意味でスニペットと呼ばれます。

 JShellを終了させるには[Ctrl]+[D]を入力します。また、"/exit"でも終了できます。