LoginSignup
5
1

More than 5 years have passed since last update.

Jshellでゆるーく遊んでみた

Last updated at Posted at 2018-12-21

概要

  • この記事ではJshellの使い方を簡単に説明していきます

背景

  • 先日のJJUG CCCに参加したこと
  • そこできしださん(@nowokay さん)がJshellでJava11の話をしてたこと

対象

  • Jshell初心者の方
  • Java使ってるめんどくさがりな方

用意したもの

  • macのターミナルだけ
  • dockerが入ってる前提です

環境構築

  • 下記コマンドを叩くだけ
docker run -it openjdk:11 jshell

そうすると・・・
image.png

こんな感じでもう使えます

とりあえず遊んでみる

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)

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1