jshell による対話型 Java 実行環境の活用

jshell は JDK に含まれる REPL(Read-Eval-Print Loop)ツールであり、Java コードを即座に実行して結果を確認できる。変数、メソッド、クラスなどの定義や、式・文・import 宣言などを逐次入力可能であり、これらは「スニペット(snippet)」と呼ばれる。

例:

int value = 42
value * 2

セッションを終了するには以下を入力する:

/exit

スニペット ID の管理

各スニペットには一意の ID が割り当てられる。通常のスニペットは連番(1, 2, 3…)、エラー発生時は接頭辞 e(例: e1)、起動時スニペットは s(例: s1)で始まる。ID の範囲はハイフンで指定可能(例: 2-5 は 2, 3, 4, 5 を意味する)。

特定のスニペットを表示:

/list 3

すべてのスニペット(エラー・起動・上書き含む)を表示:

/list -all

編集機能とショートカット

jshell は行編集機能を備えており、現在入力中のスニペットや履歴から再編集・再実行が可能。操作体系は emacs 風のキーバインドに準拠している。

主要なショートカット

操作効果
TabJava 識別子または jshell コマンドの補完
Shift+Tab → v式を変数宣言に変換
Shift+Tab → m文をメソッド宣言に変換
Shift+Tab → i必要な import 文を自動追加
Ctrl+L画面をクリアしスニペットを再表示
Ctrl+U現在行を完全に削除

カーソル移動

例:未実行のスニペット int num = 100 を入力中に以下の操作が可能。

操作効果
← / Ctrl+B1文字戻る
→ / Ctrl+F1文字進む
Ctrl+A行頭へ移動
Ctrl+E行末へ移動
Alt+B単語単位で後退
Alt+F単語単位で前進

※ Mac では Alt キーの代わりに Command キーを使用可能。

履歴操作

過去のスニペットを参照・再実行するための操作:

操作効果
↑ / Ctrl+P履歴を遡る
↓ / Ctrl+N履歴を進める
Ctrl+R履歴内を逆方向に検索

基本的な編集操作

操作効果
Deleteカーソル位置の文字を削除(OS依存)
Backspaceカーソル前の文字を削除
Ctrl+Kカーソルから行末まで削除
Alt+Dカーソルから単語末まで削除
Ctrl+Wカーソルから直前の空白まで削除
Ctrl+Y直前に削除したテキストをペースト
Alt+C単語の先頭を大文字化
Alt+U単語を大文字化
Alt+L単語を小文字化

過去のスニペットの再評価

直前のスニペットを再実行:

/!

n 個前のスニペットを再実行(例: 4個前):

/-4

複数のスニペットや範囲を指定することも可能:

/3-7 s4 14-16 e2

外部ファイルからのコード読み込み

テキストファイル(例: D:\sample.java)に以下を記述:

System.out.println("Hello from file");
System.out.println("jshell is interactive!");

jshell 内で読み込んで実行:

/open D:/sample.java

これにより、クラスや main メソッドといったボイラープレートを省略し、本質的なロジックのみを対話的に試すことができる。

タグ: jshell Java REPL JDK

6月21日 23:03 投稿