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 風のキーバインドに準拠している。
主要なショートカット
| 操作 | 効果 |
|---|---|
| Tab | Java 識別子または jshell コマンドの補完 |
| Shift+Tab → v | 式を変数宣言に変換 |
| Shift+Tab → m | 文をメソッド宣言に変換 |
| Shift+Tab → i | 必要な import 文を自動追加 |
| Ctrl+L | 画面をクリアしスニペットを再表示 |
| Ctrl+U | 現在行を完全に削除 |
カーソル移動
例:未実行のスニペット int num = 100 を入力中に以下の操作が可能。
| 操作 | 効果 |
|---|---|
| ← / Ctrl+B | 1文字戻る |
| → / Ctrl+F | 1文字進む |
| 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 メソッドといったボイラープレートを省略し、本質的なロジックのみを対話的に試すことができる。