Java開発が爆速に!超便利なJShellの使い方
はじめに
JShellは、Java 9以降で導入されたREPL(Read-Eval-Print Loop)環境です。コンパイルなしで手軽にJavaのコードを試すことができ、開発やデバッグ、学習に非常に役立ちます。
本記事では、MacでJShellを使う方法と、実際に試せるサンプルコードを紹介します。
MacでJShellを使う方法
MacでJShellを使うには、以下の手順を実行します。
1. Javaがインストールされているか確認
java -version
Java 9以上がインストールされている場合、以下のようなバージョン情報が表示されます。
openjdk version "14.0.2" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.2+12)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 14.0.2+12, mixed mode, sharing)
もしJavaがインストールされていない場合は、brewなどでインストールしておきます。
brew install openjdk
2. JShellを起動
Javaがインストールされている場合、以下のコマンドでJShellを起動できます。
jshell
起動すると、以下のようなプロンプトが表示されます。
| JShellへようこそ -- バージョン14.0.2
| 概要については、次を入力してください: /help intro
jshell>
これでJShellの準備が完了です。 終了する場合は
/exit
を入力するか、または control
+
d
でJShellを修了できます。
String.valueOf の挙動を確認する
JShellを使うと、メソッドの動作をすぐに確認できます。ここでは
String.valueOf
の挙動をチェックしてみます。
> String.valueOf(null)
jshell| 例外java.lang.NullPointerException
| at String.<init> (String.java:269)
| at String.valueOf (String.java:3402)
| at (#1:1)
null
を渡すと NullPointerException
になります。
> String.valueOf("Hello")
jshell1 ==> "Hello"
$
> String.valueOf(123)
jshell2 ==> "123"
$
> String.valueOf(3.14)
jshell3 ==> "3.14" $
文字列や数値を渡すと、それに対応する String
型の値が返ってきます。
Errorが発生する事例
JShellでは、即座にエラーの検証もできます。 例えば、未定義の変数を使おうとするとエラーになります。
> System.out.println(undefinedVar);
jshell| Error:
| cannot find symbol
| symbol: variable undefinedVar
| System.out.println(undefinedVar);
また、型不一致のケースもエラーになります。
> int num = "text";
jshell| Error:
| incompatible types: java.lang.String cannot be converted to int
private staticなメソッドの挙動を確認する
次に、private static
なメソッドがインスタンス間で共有されるかを試してみましょう。
検証コード
class Test {
private static int counter = 0;
static void increment() { counter++; }
static int getCounter() { return counter; }
}
インスタンスを複数作成し、カウンターが共有されるか確認します。
> Test t1 = new Test();
jshell> Test t2 = new Test();
jshell
> t1.increment();
jshell> System.out.println(t2.getCounter());
jshell1
counter
は static
なので、すべてのインスタンスで共有されていることが確認できました。
ただし Testクラスとは別のクラスで
static void increment()
が実装されていた場合、たとえ同じメソッド名でも別クラスのインスタンス間では共有されません。
StringUtils.isEmpty のようなライブラリをJShellで実行する
StringUtils.isEmpty(null)
を jshell
で実行するには、まず StringUtils
クラスを含む
Apache Commons Lang ライブラリを jshell
に追加する必要があります。
1. ライブラリのダウンロード
Apache
Commons Lang から commons-lang3-3.x.x.jar
をダウンロード。
2. jshell
を起動
ターミナル(コマンドプロンプト)で以下のように
jshell
を起動:
jshell --class-path /path/to/commons-lang3-3.x.x.jar
※ /path/to/commons-lang3-3.x.x.jar
は、ダウンロードした JAR のパスに置き換えてください
3.
StringUtils
をインポートして実行
import org.apache.commons.lang3.StringUtils;
System.out.println(StringUtils.isEmpty(null)); // 結果: true
まとめ
JShellを使えば、簡単にJavaの動作検証ができました。わざわざ IntelliJ などのIDEでプロジェクト作成やテストコードを書かずとも、動作検証できて非常に便利です。開発のちょっとした確認や学習に、JShellをぜひ活用してみてください!
関連記事
- AndroidのカメラをUIに表示する【Androidアプリ開発】
- ROOMを使わずにSQLiteを扱う、Androidアプリ開発
- Android で WebSocketサーバー 【Kotlin/アプリ開発】
- 【XYペンプロッター制作①】CNCシールドでステッピングモータを動かすまで
- Xcode で Copilot が使えるようになってた!