概要
- この記事ではJshellの使い方を簡単に説明していきます
背景
- 先日のJJUG CCCに参加したこと
- そこできしださん(@nowokay さん)がJshellでJava11の話をしてたこと
##対象
- Jshell初心者の方
- Java使ってるめんどくさがりな方
用意したもの
- macのターミナルだけ
- dockerが入ってる前提です
環境構築
- 下記コマンドを叩くだけ
docker run -it openjdk:11 jshell
こんな感じでもう使えます
とりあえず遊んでみる
jshell> String hoge = "hoge"
hoge ==> "hoge"
/varsを叩く
- 自分が作った変数を教えてくれます
jshell> /vars
| String hoge = "hoge"
| List<String> list = []
| String test = "test"
/importsを叩く
- いまimportされてるやつを教えてくれます
jshell> /imports
| import java.io.*
| import java.math.*
| import java.net.*
| import java.nio.file.*
| import java.util.*
| import java.util.concurrent.*
| import java.util.function.*
| import java.util.prefs.*
| import java.util.regex.*
| import java.util.stream.*
新たにimportしたい時
- 直でimportを叩く
jshell> import java.util.Scanner
さすがにこれはイケてないので、、、
- 使うタイミングでShift + tabを同時押しして離した直後に i を押す
jshell> ZonedDateTime
0: Do nothing
1: import: java.time.ZonedDateTime
Choice:
Imported: java.time.ZonedDateTime
そうするとこんな感じでimportしてくれます
jshell> ZonedDateTime now = ZonedDateTime.now()
now ==> 2018-12-21T16:14:20.037591Z[Etc/UTC]
補完
- これはターミナルと同じでtabキー押せばよしなに補完を出してくれます
jshell> var lsit = List.
class copyOf( of(
こんな感じでIDEで補完してもらうタイミングと同じようなタイミング(ようするに.打った後)にtab押せば使えます
改行
- こんなリストを作ったとして、
jshell> var list = List.of("hoge","fuga","piyo")
list ==> [hoge, fuga, piyo]
- こいつに対して、なんか処理をつらつら書いていて改行しようと思って適当なところで改行すると実行されてしまいます。
jshell> var result = list.stream().filter(word -> word.startsWith("h"))
result ==> java.util.stream.ReferencePipeline$2@31610302
- それはさすがに悲しいので、、、
jshell> var result = list.stream().filter(word -> word.startsWith("h")
...> ).collect(Collectors.toList())
result ==> [hoge]
こんな感じで()を開いた状態、もしくは.を前の行においたままreturnすると改行できます
/exit
- 意外と知られてないかもですが、これで抜けられます
jshell> /exit
| Goodbye
/help
- あと困ったらhelpを参考にしてみてください
感想
- Jshell結構楽しい
- IDEの補完に頼ってる部分が多くてimportのクラスとか気にすることが少なかったのでいいきっかけになりそう
- お気づきかもしれないですが、途中でJava11のコードをぶち込んでたのですが、ご覧の通りわざわざOracleからJDKをインストールしなくても、気軽にターミナル上でJava11を試せるのでとても良い
- Sampleプロジェクトを作るまでもないような確認したいこと(時間の変換とか)を試す場としてはJshellでという選択肢はかなりありなのかなと思いました
まとめ
- とりあえず1時間くらいで遊んでみただけなので満喫できてはないので、オススメの利用シーンとか利用コマンドがあったらおしえていただきたいです
参考
きしださんのQiitaの記事を参考にさせていただきました。
Learn JDK11 with JShell (2018/12/15 JJUG CCC 2018 Fall)