1. Introduction
JDK9のリリースまで残すところあと半年ちょっとになりました。
JDK9の新機能、 Project Jigsaw
によるモジュール化が取り上げれることが多いですが、
Javaの REPL
、 jshell が搭載されたのが気になりました。
今回はjshellを触るまでの環境構築と事項してみた所感を書いていきます。
- 筆者環境はMac OS Xです
1.1 REPL??
読んで字のごとく、
- R : Read 読んで
- E : Eval 評価して
- P : Print 出力して
- L : Loop 繰り返す
一行書いて実行、一行書いて実行、一行書いて... を繰り返せます。
1.2 jshell??
他言語ではこのREPLという仕組みが一般的で、
RubyやScalaには標準で付属しています。
いよいよJavaにもこのREPLが導入されました。
そもそもJavaには言語の完成度は置いておいて、実行までの手順の複雑さ がありました。
北米の情報系の大学でも、入学試験でJavaではなくPythonが用いられることが多く、理由の一つに 実行までの煩わしさ が含まれているそうです。
Java言語が容易に実行できる環境 (=jshell) が普及すればJavaももっと普及するんですかね。(どうですかね?)
2. Download
- こちらから Open JDK9 Early Access Releases が入手できます
- ダウンロードしたらインストーラーを起動してインストール
これで完了です
3. Hello World
とりあえずHello World出してみます。
3.1 Start-up jshell !!
インストールが完了したら
/Library/Java/JavaVirtualMachines/
配下にインストール済みのJDKの一覧があるので
jdk-9.jdk
があるのを確認します。
jdk9配下に、
jdk-9.jdk/Contents/Home/bin/
binの配下に、
無事起動しました!!!!
以前試したときは英語でしたが、日本語でwelcomeメッセージが表示されました!!
3.2 Hello World
Hello Worldしてみます!
3.2.1 そのまま
一番シンプルな方法です、タブ補完が効くのでスイスイ入力できました。
ちなみにセミコロン無しで実行できました。
3.2.2 変数
一度変数に格納してから出力しました。
2行目では変数名のタブ補完が効いたのが快適でした。
3.2.3 /open
後述しますが、オプションコマンドの /open を使うことで外部ファイルを読み込んで実行できます。
System.out.println("Hello World")
ファイルを読み込めるのであれば、スクリプトとして実行できるかな?とおもったのですが。
読み込んだファイルを一行ずつ評価してるようなので、以下のjavaファイルでは何も実行されませんでした。
class Hello {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
というか、一行ずつ読まれてるんなら読み込むファイルはテキストファイルでもいいのか?
と、思ったので適当な拡張子で読み込んでみました。
System.out.println("Hello World")
読めました。
読み込んだ先のファイルを一行ずつ実行するみたいですね。拡張子は.java
じゃなくても良さそうです。
4. もうちょっと触ってみる
単純に一行ずつコードを試して見る。以外の使い方ができそうなので少しだけ見てみました。
4.1 コマンド
Welcomeメッセージで表示される /help
コマンドで使用可能なコマンドの一覧が確認できます。
コマンド | 説明 |
---|---|
/list | 入力したソースをリストします |
/edit | 名前またはIDで参照されるソース・エントリを編集します |
/drop | 名前またはIDで参照されるソース・エントリを削除します |
/save | ファイルにスニペット・ソースを保存します |
/open | ソースの入力としてファイルを開きます |
/vars | 宣言された変数およびその値をリストします |
/methods | 宣言されたメソッドおよびその署名をリストします |
/types | 宣言された型をリストします |
/imports | インポートされたアイテムをリストします |
/exit | exit jshell |
/reset | reset jshell |
/reload | リセットして関連する履歴をリプレイします |
/classpath | クラスパスにパスを追加します |
/history | 入力した内容の履歴 |
/help | jshellに関する情報を取得します |
/set | jshell構成情報を設定します |
/retain | 後続のセッションに対してjshell構成情報を保持します |
/? | jshellに関する情報を取得します |
/! | 最後のスニペットを再実行します |
/< id > | IDでスニペットを再実行します |
/-< n > | n回前のスニペットを再実行します |
いろいろありますね。
なんかいろんなことできそうですが、余裕があれば別記事でまとめたいと思います。
別件ですが、/help
を見るまでjshellの終了のさせ方がわからずパニックになりました。
/exit
で終了できますが、コマンドが全部/
から始まるとは..
4.2 クラス作ってみる
一行ずつ実行してもいいですが、クラスを宣言して呼び出す。といった使い方もしてみます。
{}
中括弧を閉じるまで入力が続きます。
引数を受け取って、出力するだけの簡単なクラスです。
無事に呼び出せました!!
さっきのコマンド /types
で作成したクラスも確認できます。
5. 所感
今回はjshellの触りだけ体験してみました!!
正直な感想は、**「業務レベルで使用することはあるのか?」**です。
- タブ補完でコードを入力していくことができるが、IntelliJ IDEAなどの強力なIDEの補完にはもちろん及ばない。やや入力がストレス。
- 実行時まで構文エラーに気付けない => Javaでやらなくて良くない?
と、思いました。Paiza ioのようなオンライン実行環境ありますし。
ただ、**Javaを新しく始める。**といったような場合には、今までのように
- JDKインストール
- Eclipseインストール
- パッケージ作成
- クラス作成
- Hello World
といった煩わしい手順を踏まずに、
- JDKインストール
- jshell起動
- Hello World
というように非常に容易にJavaコードの実行ができます。
これは**Javaの入門書が9以降大幅な書き換えが行われるのか?**と、思えるレベルのインパクトを感じました。
また、コマンドもあまり触ってないので今回触ってないもっと便利な使い方も確実に存在します。
もうちょっと触ってみて、まだ便利そうな使い方があればまた記事にしてみたいと思います!
コメントでもご指摘などいただけると幸いです!
最後までご覧いただきありがとうございました!