SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Java 9で「変わること」と、Javaのこれまで

手軽にJavaの実行結果が確認できるJava 9の新しいツール「JShell」

Java 9で「変わること」と、Javaのこれまで 第4回

コマンドの説明

 続いて、JShellで利用可能なコマンドを紹介します。

 コマンドとは、JShellを起動した後に指定できる"/(スラッシュ)"で始まる命令です。主に、JShell内で実行を助けるためのコマンドと、Javaの実行時に指定できるオプションと同様の意味を持つコマンドに分けられます。

 すべてのコマンドやその説明は/helpコマンドで確認可能です。ここではよく利用するコマンドについて説明します。

/imports

 現在インポートされている内容が表示できます。初期状態でインポートされているパッケージを変更したい場合には、後述するJShellを起動する際のオプションで可能です。

リスト8 JShell内でのコードヘルプ機能の実行例
jshell> /imports
|    import java.io.*
|    import java.math.*
|    import java.net.*
: 以下省略

/list [<name or id>|-all|-start]

 今まで入力したコードの一覧を表示します。引数に何も指定しない場合には起動してからのコードがリスト9の通り表示されます。また、引数にname(クラス名や変数名など)もしくはid(/listコマンド等で表示される番号)を指定すると、その特定のコードを表示し、-startでは起動時に実行されたコードを、-allでは-startで表示する内容に加えてエラーとなった入力も含めて表示します。

リスト9 /listコマンドの実行例
jshell> /list
   1 : import java.util.Base64.*;
   2 : Base64.getEncoder();
   3 : $2.encodeToString("hello world".getBytes());
   4 : Base64.getDecoder();
   5 : $4.decode($3.getBytes());
   6 : new String($5);

/edit <name or id>

 過去に入力したコードの内容を変更するコマンドです。このコマンドを実行すると図1のようなテキストエディタが開かれます。そこに入力したコードが表示されているので、そのコードを変更できます。

 JShellではクラス定義などの複数行のコードをコピー&ペーストした場合、思うように動作しません。そこでclass A{}のように入力後このコマンドを使用し、テキストエディタにコピペして定義し直すといった使い方も可能です。

図1 /editコマンドを実行したときに立ち上がるエディタ
図1 /editコマンドを実行したときに立ち上がるエディタ

/<id>

 指定したidのコードを再実行します。変数の値を変えて、再度実行する場合になどに便利なコマンドです。

/!

 最後に実行したコードを再実行します。

/drop <name or id>

 指定したコードを削除します。例えば変数を定義したコードを削除すると、その変数が削除されます。また、クラスを定義したコードを削除すると、そのクラスは未定義状態に戻ります。

/vars [<name or id>|-all|-start]

 宣言済みの変数とその値を表示します。オプションを指定すれば特定の変数のみを表示することができます。変数名を忘れてしまった場合や、変数の中身を確認する際に利用します。

 同様に、/typesでは宣言済みの型(クラス)の表示ができ、/methodsで宣言済みのメソッドの表示が行えます。

/open <file>

 指定したファイルから読み込んでコードを実行します。

/save [-all|-history|-start] <file>

 実行したコードを指定したファイルに保存します。ただし、$1や$2などの自動で作成される変数を利用した場合にはそのまま、その変数名でファイルに保存されます。したがって、再度、/openコマンドを使って実行する前に/resetコマンドを使って状態をリセットしてから実行しないと、想定とは異なる変数が利用されますのでご注意ください。

/env [-class-path <path>] [-module-path <path>] [-add-modules <modules>]

 javaコマンドの引数と同様にクラスパスの指定や、モジュールパスなどの指定を行います。複数のjarファイルをクラスパスに指定する場合は、リスト10のように複数のファイルを指定します。必要になった時点で、追加のjarファイルなどを指定することはできません。/envコマンドを使って状態を変更すると、これまで実行した内容によっては依存しているコードにエラーが生じるため、以前の状態をクリアした上で再度-class-pathなどの設定を行う場合には、/resetコマンドを利用します。

リスト10 JShell内でのコードヘルプ機能の実行例
/env -class-path commons-lang3-3.7.jar:gson-2.6.2.jar
//  以下のように複数行に分けて記述することはできません
/env -class-path commons-lang3-3.7.jar
/env -class-path gson-2.6.2.jar

JShellを起動する際のオプション指定

 また、JShellは起動時にリスト11のオプションを指定することで、利用者が使いやすいようにカスタマイズが可能です。例えば、クラスパスなどは起動時に指定ができます。また、importされているパッケージなども変更が可能です。

リスト11 JShell内でのコードヘルプ機能の実行例
jshell [OPTIONS] [実行するコードを記述したファイルを指定]

 「実行するコードを示したファイル」は複数指定が可能です。起動後に/openコマンドでファイルを指定する場合と同じ動作になります。したがって実行後にJShellを終了させたい場合には、ファイルの最後で/exitコマンドを実行してください。

 よく利用するOPTIONSには、以下のものがあります。

--class-path <path>/--module-path <path>/--add-modules <module>(,<module>,,,)

 これらの指定はjavaコマンドを起動する際のオプションと同様です。こちらの指定を使うことで、起動時にクラスパスやモジュールパスなどを指定できます。

--startup <file>

 起動直後に自動的に実行するコードがある場合は、ここで指定します。毎回、事前準備のために同じようなコードを記述するケースがあると思います。それらのコードはこの指定を使って実行すると便利です。例えば、リスト12のように必要なクラスのimport指定やメソッドの定義などをしておくと、長いコードを記述する必要がなくなるのでより便利になります。

リスト12 startup時に実行するコード例(startup.jsh)
import java.util.*;
import java.io.*;
import java.math.*;
import java.net.*;
import java.util.concurrent.*;
import java.util.prefs.*;
import java.util.regex.*;
import org.apache.commons.lang3.*;

void printf(String format, Object... args) { System.out.printf(format, args); }
int strlen(String str){
    return StringUtils.length(str);
}
String[] split(String str,String separator){
    return StringUtils.split(str,separator);
}

次のページ
JShellをもっと便利にするツール

この記事は参考になりましたか?

Java 9で「変わること」と、Javaのこれまで連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10619 2018/01/24 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー