しゃのんあどべんとかれんだー 9日目 (Java にも REPL がくるー?) 匿名 匿名 この記事は [Shanon Advent Calendar 2015](http://qiita.com/advent-calendar/2015/shanon) の 9 日目の記事です。 ![Duke](http://3.bp.blogspot.com/-ZV5A1Oap8DM/VopwX9CS-BI/AAAAAAAAAVA/XuxgVxuJaWE/s1600/duke.png) さてさて、今回も私 munepom (`@__munepom__`) がお送りします。 眠い、どうしよう。。。1時間で書けるネタが。。。あ、ありました。 Java で REPL (Read Evaluate Print Loop) ができるようになる方法についてのおはなしです。 # !!! Warning !!! 2015年12月25日の段階では、JDK 9 ea に jshell が同梱されていますので、そちらを使うのが良さそうです。 (@bitter_fox さん、ありがとうございます!) # Java で REPL ??? そう、Java は REPL (対話側評価環境) が無いんですよね。。。 ちょっと動作を確認したい際に REPL は役に立つのですが、それが無いのはちとつらいこともあります。 # そこで、Java 9 ですよ! ... 正式リリースは先の話ですが、Java 9 で、Java + REPL = JShell 的な機能ができるようです! [Kulla](http://openjdk.java.net/projects/kulla/) という Open JDK のプロジェクトにて、REPL 機能が大絶賛開発中のようです。 とりあえず [JDK 9 Early Access](https://jdk9.java.net/) から JDK 9 評価版をダウンロードできるので、試してみましょう! # JShell を試すための準備をする Kulla のコミッターである @bitter_fox さんのブログを参考に、試してみました! (ありがとうございます) 1. まずは、ご自身の環境に合った [JDK 9 ea](https://jdk9.java.net/download/) をダウンロードしてください。 2. ダウンロードしたら、展開して適当なパスに置きます。 3. Kulla のナイトリービルドをダウンロードします。 [langtools-1.9-linux-x86_64-kulla-dev](https://adopt-openjdk.ci.cloudbees.com/view/OpenJDK/job/langtools-1.9-linux-x86_64-kulla-dev/) から、最新のビルド成功物をダウンロードすると良さげです。 # JShell を試す 準備が整ったら、 `JDK9のパス/bin/java -jar ダウンロードしたKullaのJARファイル` で JShell を起動できます。 ``` | Welcome to JShell -- Version 1.9.0-ea | Type /help for help -> ``` のような画面が出れば、起動成功です! では、Hello World を! ``` -> System.out.println("Hello World") Hello World ``` いけますね! では、シャノンのホームページの HTML を取ってきましょ! ``` -> import java.util.stream.Collectors -> String shanon -> try(BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("http://shanon.co.jp/").openStream()))){ >> shanon = reader.lines().peek(System.out::println).collect(Collectors.joining("\n")); >> } ... ``` おぉ、いける! (kulla--20151223010059.jar ですと、Stream に対する peek メソッド処理は、何らかの変数に処理を格納するようにしないと結果が見られませんでした。 訂正します! peek メソッド処理は、変数に格納せずとも実行可能でした。最新の JDK 9 ea と kulla で確認しました。失礼いたしました。。。) (echo で出力したコマンドも実行できましたが、Mac OS X Yosemite ではコンソールが固まってしまいました。。。原因不明です。) /h でコマンド履歴が見られるので、コマンド確認もしやすそうです。 満足したら、/x で exit しましょう。 (Scala のように、:q コマンドで exit できなくて、最初焦りましたw) 正式版リリースが楽しみですね♪ レッツ Enjoy! (・ω・)ノ Tweet Share Share Share Share