SHOEISHA iD

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

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

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

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

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

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

JShellをもっと便利にするツール

 JShellはツールとしての利用だけではなく、jdk.jshellというパッケージ名でAPIとしても提供されています。

 今回はこれらのAPIの利用方法を紹介しませんが、APIを使ってJShellを拡張したプロジェクトがGitHubにありました。ここではそれらを紹介します。

 これらのプロジェクトをそのまま使っても便利ですが、自分でJShellを拡張したい場合にも、大変参考になるプロジェクトだと思います。

Apache Mavenのアーティファクト情報でライブラリを追加できるJShell拡張

 コードのビルドでApache Maven(以下、Maven)やGradleを使うことに慣れてしまうと、必要なライブラリをダウンロードしてjarファイルを配置すること自体が面倒になるケースがあります。

 また、最近のプロジェクトでは、 MavenやGradle以外の方法ではビルド済みのjarファイルをどうやってダウンロードすればいいのかわからないプロジェクトも増えています。

 「Try artifact」は、Mavenが使っているアーティファクト情報を利用し、必要なライブラリをコマンドから追加できるため、こうした問題を簡単に解決できます。

 実際にMySQLのJDBCドライバを取得し、取得したコードを使う実行例がリスト13です。

リスト13 Try artifactの実行例
java -jar try-artifact-0.2.1.jar
|  Welcome to JShell -- Version (version info not available)
|  Type /help for help

-> /resolve mysql:mysql-connector-java:jar:5.1.6   // (1)
|  Path /Users/musvia/.m2/repository/mysql/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar added to classpath

-> Iterator<java.sql.Driver> i  = ServiceLoader.load(java.sql.Driver.class).iterator(); // (2)
|  Added variable i of type Iterator<java.sql.Driver> with initial value java.util.ServiceLoader$3@3159c4b8

-> i.next();
|  Expression value is: com.mysql.jdbc.Driver@3b084709
|    assigned to temporary variable $2 of type java.sql.Driver

 (1)ではMySQLのJDBCドライバのアーティファクト情報を指定しています。追加したいライブラリを取得する指定方法が不明の場合、Maven Repositoryなどから調べることができます。そして、(2)のように追加したライブラリをインポートすることなく、すぐに利用することができます。

JavaFXのコードを簡単に確認できるようにするJShell拡張

 JavaFXでのコードをJShellで確認したい場合、そのままではjava.lang.ExceptionInInitializerErrorエラーが発生してしまい実行ができません。

 この問題を解決し、簡単にJavaFXのコードを確認できるようしたJShellが「JavaFXSupportsForJShell」です。

 こちらのプロジェクトはコンパイル済みjarファイルを公開していないため、自分でソースを取得してビルドする必要があります。

 実際に確認するにはリスト14のように空のJavaFXのウィンドウを作成し、そこに自分で確認したいGUI操作を記述します。そのため、GUIコンポーネントなどの動作を比較的容易に確認できます。

 また同様の手法で、自分で作成したJavaFXアプリをJShellを通じて簡単に確認できるのではないかと思います。

リスト14 JavaFXの空のウィンドウを作成するコード(javafx.jsh)
VBox root = new VBox(10);
Scene scene = new Scene(root,640,480);
Stage stage = new Stage();
stage.setWidth(640);
stage.setHeight(480);
stage.setTitle("JavaFx JShell")
stage.setScene(scene);
stage.show();

// ここからJShell上で実際に確認をする
// Button b = new Button("test");
// root.getChildren().add(b);
// import javafx.scene.control.Alert.AlertType;
// b.setOnAction(s -> {
//  Alert al = new Alert(AlertType.INFORMATION);
//  al.show();
// });

 このスクリプトを実行した結果が図2です。UIコンポーネントの見た目などを確認したい場合には便利なツールといえるでしょう。

図2 JavaFXSupportsForJShellを使ったJavaFxのコードの実行結果
図2 JavaFXSupportsForJShellを使ったJavaFxのコードの実行結果

最後に

 今回はJShellを紹介しました。既存のJavaの開発者にとって、JShellは必ずしも満足できるものではないかもしれません。しかし、初心者にとってはJavaの学習コストが下がるなどのメリットがあるでしょう。また、JShellは拡張することもできるため、利用したいプロジェクトに即したカスタマイズをすることが可能です。

 次回からはReactive Streamsなど、Java 9におけるAPIの変更点を中心に紹介します。

参考資料

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー