うさぎ好きエンジニアの備忘録

うさぎたちに日々癒されているエンジニアが業務で直面したもの & 個人的な学習メモを残していきます。

jshellを使って対話的にJavaのコードを実行する

JDK9から搭載された機能であるjshellを実際に使って、以下についてまとめてみました。

  • jshellについて
  • 環境構築
  • 基本的な使い方

jshellとは?

  • jshell = Java Shell

  • jshellはREPLであり、「一行書いて実行、一行書いて実行...」を繰り返す

    REPL = Read / Evaluate / Print / Loop

  • PythonRubyみたいな感じで対話的にコードを実行することができる

jshellの実行環境構築

SDKMANのインストール

今回はSDKMANを使って実行環境を整備する。

sdkman.io

インストール自体は公式で紹介してくれているのでそこを見れば大丈夫。今回はmacOSでjshellを使いたいので以下のような感じでインストールを進める。

$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"

sdkman.io

現時点だと5.9.0がインストールされた。

$ sdk version

SDKMAN 5.9.0+555

Java11のインストール

Java9からjshellは搭載されているが、今回はJava11を使っていく。SDKMANがインストールされている状態なら以下のコマンドでインストールできる。

$ sdk install java 11.0.10.hs-adpt

インストールが完了したらバージョンを確認しておく。

$ java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)

もし過去にSDKMANでJavaをインストールしてる場合、Do you want java 11.0.10.hs-adpt to be set as default? (Y/n):と聞かれるので、そこは各自で選択する感じで。

後からバージョンを変更したりしたい場合はsdk use java <VERSION>で切り替えられる。

jshellを使ってみる

ここまでできていればターミナルでjshellを実行すれば起動するはず。

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

jshell>

こんな感じで実行できる。(ちなみにセミコロン付けずに実行できる)

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

ちなみにファイルを事前に用意しておき、/openで記載されている内容を実行することも可能。

$ cat sample.java
System.out.println("Hello, World")
jshell> /open sample.java
Hello, World