SlideShare a Scribd company logo
1 of 63
Download to read offline
#ccc_ab4 https://sli.do/
Introduction to JShell:
the Java REPL Tool
JJUG CCC 2016 Spring
@bitter_fox
#ccc_ab4
#ccc_ab4 https://sli.do/
@bitter_fox(吉田真也)
●OpenJDKコミッタ
–Lambda, Kulla(JShell)
●日本OSS奨励賞受賞
–JavaOne参加で授賞式は参加できず><
●立命館大学 大学院 1回
–18卒
#ccc_ab4 https://sli.do/
@bitter_fox(吉田真也)
●OpenJDKコミッタ
–Lambda, Kulla(JShell)
●日本OSS奨励賞受賞
–JavaOne参加で授賞式は参加できず><
●立命館大学 大学院 1回
–18卒
#ccc_ab4 https://sli.do/
#ccc_ab4
Sli.do(質問)
http://sli.do/
#ccc_ab4
#ccc_ab4 https://sli.do/
アジェンダ
●JShell
●Inside JShell & JShellAPI
●Contributing to JShell
●Beyond JShell
#ccc_ab4 https://sli.do/
ゴミプロジェクト
#ccc_ab4 https://sli.do/
ゴミプロジェクト
API,構文
挙動確認
プロトタイプ
開発
プレゼン
教育
#ccc_ab4 https://sli.do/
ゴミプロジェクト
ゴチャゴチャ!
Class,main
邪魔
コンパイル実行
面倒
#ccc_ab4 https://sli.do/
#ccc_ab4 https://sli.do/
新バージョンの
Java
手元の
ライブラリ
Maven コード補完
#ccc_ab4 https://sli.do/
JShell
●Read-Eval-Print Loop(REPL)ツール
–Javaコードを実行できる
–SampleHogeHogeからの解放
●JDK9 EA is available
–https://jdk9.java.net/download/
–Win, Macでは,環境が壊れる可能性,注意
–2017/03/23 General Availability
#ccc_ab4 https://sli.do/
JShellで実行できるJavaコード
Import宣言
Class/Interface/Enum/Annotation宣言
フィールド宣言
メソッド宣言
ブロック
文
式
#ccc_ab4 https://sli.do/
Import宣言
jshell> import java.time.*;
jshell> import java.nio.LocalDate
●入力の末尾の;は省略可
#ccc_ab4 https://sli.do/
Class/Enum/Interface/Anno宣言
jshell> class Student {
...> int age;
...> String name;
...> }
| created class Student
#ccc_ab4 https://sli.do/
フィールド宣言(変数宣言)
jshell> int MAX = 300
MAX ==> 300
#ccc_ab4 https://sli.do/
式
jshell> MAX / 2
$1 ==> 150
●式の結果は一時変数$nに
#ccc_ab4 https://sli.do/
メソッド宣言
jshell> int f(int n) {return n*2;}
| created method f(int)
jshell> f(100)
$2 ==> 200
#ccc_ab4 https://sli.do/
宣言の更新
メソッドやクラスの定義は後から変えられる
jshell> int f(int n) {return n*2;}
| created method f(int)
jshell> f(100)
$2 ==> 200
jshell> int f(int n) {return n*n;}
| modified method f(int)
jshell> f(100)
f(100)
$4 ==> 10000
#ccc_ab4 https://sli.do/
前方参照
●
定義する前に参照可能
class Student {
String name;
Id id;
}
class ID {String id;}
#ccc_ab4 https://sli.do/
JShellの使いドコロ
●
新しい言語機能の確認
–ラムダ式,Java9の新言語機能
●新ライブラリ,APIの検証,動作確認
–StreamAPI, Date and Time API, etc
●
教育
–REPLを使うことで即時に結果が分かる
●
高機能電卓
#ccc_ab4 https://sli.do/
Javaのラムダ式(デモ)
●(args) -> {stat}
●
関数型インターフェースがターゲット
–抽象メソッドが1つしかないインターフェース
–defaultメソッドは関係ない
interface Func {
void f();
default Func andThen(Func f) {…}
}
Func f = () -> {}
#ccc_ab4 https://sli.do/
Java8Puzzler(デモ)
String s = Stream.of("Hello", "Fizz", "Buzz",
"JavaSE8")
.map(String::length)
.map(Integer::toString)
.collect(Collectors.joining(", "));
System.out.println(s);
(1): 5, 4, 4, 7,
(2): 5, 4, 4, 7
(3): [5, 4, 4, 7]
(4): コンパイルエラー
(5): 実行時エラー
#ccc_ab4 https://sli.do/
Java9LangFeature(デモ)
●識別子_はコンパイルエラー
●外部の変数をtry-w-resの対象に
AutoCloseable ac = …;
try (ac) {…}
●
匿名クラスでダイアモンド演算子
list = new ArrayList<>() {{add(...);}}
●@SafeVarargs on private methods
●private interface method
#ccc_ab4 https://sli.do/
JShellのコマンド
●/で始まる
●
状態の表示
●
設定の変更
●
履歴へのアクセス
●一意に定まれば,先頭数文字でOK
–/help → he
#ccc_ab4 https://sli.do/
JShellのコマンド:/help
jshell> /help
| /list [all|start|<name or id>] -- list the source you have typed
| /edit <name or id> -- edit a source entry referenced by name or id
| /drop <name or id> -- delete a source entry referenced by name or id
| /save [all|history|start] <file> -- Save snippet source to a file.
| /open <file> -- open a file as source input
| /vars -- list the declared variables and their values
| /methods -- list the declared methods and their signatures
| /classes -- list the declared classes
| /imports -- list the imported items
| /exit -- exit jshell
| /reset -- reset jshell
| /reload [restore] [quiet] -- reset and replay relevant history -- current or previous (restore)
| /classpath <path> -- add a path to the classpath
| /history -- history of what you have typed
| /help [<command>|<subject>] -- get information about jshell
| /set editor|start|feedback|newmode|prompt|format ... -- set jshell configuration information
| /? [<command>|<subject>] -- get information about jshell
| /! -- re-run last snippet
| /<id> -- re-run snippet by id
| /-<n> -- re-run n-th previous snippet
|
| For more information type '/help' followed by the name of command or a subject.
| For example '/help /list' or '/help intro'. Subjects:
| intro -- an introduction to the jshell tool
| shortcuts -- a description of shortcuts
#ccc_ab4 https://sli.do/
JShellのコマンド:
/vars, /methods, /classes, /imports, /list
●
シグネチャや値,入力したソースコードなどを表示
jshell> /list all
s1 : import java.util.*;
s2 : import java.io.*;
s3 : import java.math.*;
s4 : import java.net.*;
s5 : import java.util.concurrent.*;
s6 : import java.util.prefs.*;
s7 : import java.util.regex.*;
s8 : void printf(String format, Object... args) {
    System.out.printf(format, args); }
1 : int n = 100;
2 : System.out.println(n)
e1 : this is error
#ccc_ab4 https://sli.do/
JShellのコマンド:
/vars, /methods, /classes, /imports, /list
●
シグネチャや値,入力したソースコードなどを表示
jshell> /list all
s1 : import java.util.*;
s2 : import java.io.*;
s3 : import java.math.*;
s4 : import java.net.*;
s5 : import java.util.concurrent.*;
s6 : import java.util.prefs.*;
s7 : import java.util.regex.*;
s8 : void printf(String format, Object... args) {
    System.out.printf(format, args); }
1 : int n = 100;
2 : System.out.println(n)
e1 : this is error
Startup
Error
#ccc_ab4 https://sli.do/
Startup
●
最初に実行されるプログラム
–/save start [file]
●
自分なりに改造すると捗る
–オススメ
import j.u.stream.*
import j.u.function.*
import j.nio.file.*
import static j.u.Arrays.*
import static j.l.Math.*
#ccc_ab4 https://sli.do/
JShellのコマンド:/set
●
設定変更
/set
editor
start
feedback
newmode
prompt
format
/set start ./startup.jsh
#ccc_ab4 https://sli.do/
JShellのコマンド:/set
●
設定変更
/set
editor
start
feedback
newmode
prompt
format
/set start ./startup.jsh
Feedback
#ccc_ab4 https://sli.do/
Feedback
●
出力のモード
–独自に変更可能
–プロンプトとフォーマット
–かなり難しい,変更すればするほど手に馴染む
/set newmode mymode
–新しいモードを作成
/set prompt mymode “$” “...”
/set format mymode …
–プロンプトとフォーマットの設定
/set feedback mymode
–出力モードの変更
#ccc_ab4 https://sli.do/
JShellのコマンド:再実行
●/!
–直前のプログラムを再実行
●/<id>
–idに対応するプログラムを再実行
●/-<n>
–n個前のプログラムを再実行
#ccc_ab4 https://sli.do/
その他のJShellコマンド
/edit <name or id>
–コードの編集
/drop <name or id>
–コード,定義の削除
/open <file>
–ファイルからコードの実行
/reset
–jshellを起動時に戻す
/reload [restore] [quiet]
–リセットして再実行
/classpath <path>
–クラスパスを追加
/history
–入力履歴を表示(コマンド含む)
#ccc_ab4 https://sli.do/
補完機能
●
コード補完
–TAB
●import補完
–Alt-Enter i
●
変数定義の補完
–Alt-Enter v
※Alt-EnterはAlt-F1かC-[ C-m
#ccc_ab4 https://sli.do/
ドキュメンテーション機能
●
メソッドのシグネチャの表示
–Shift-Tab
jshell> IntStream.range([Shift-Tab]
java.util.stream.IntStream.range(int arg0, int arg1)
#ccc_ab4 https://sli.do/
デモ
●IntStream|AEi
–(import IntStream)
●IntStream.ra|T
–IntStream.range
●IntStream.range(|ST
–range(int, int)
●IntStream.range(0, 10).summaryStatistics()|AEv
–IntSummaryStatistics | = IntStream.range(0,
10).summaryStatistics()
|はカーソル,AEはAltEnter,TはTab,SはShift
#ccc_ab4 https://sli.do/
jshell> Inside JShell
>> JShell API
#ccc_ab4 https://sli.do/
JShellの仕組み
JShell Tooljline
int a = 0
JShell API
Compiler(javac)
RemoteAgent
JVM
JDI
int a = 0
Is Complete?
Completion
Documentation
Eval & Resulta ==> 0
#ccc_ab4 https://sli.do/
snippet()
JShell API
JShell
SourceCode
Analysis
SnippetEvent
XxxSnippet
eval(),drop()
sourceC
odeAnalysis()
state
#analyzeCompletion()
#analyzeType()
#completeSuggesions()
#documentation()
#listQualifiedNames()
#ccc_ab4 https://sli.do/
デモ
JShellAPIをJShellから叩く
JShell js = JShell.create()
js.eval(“int n = 0;”)
#ccc_ab4 https://sli.do/
Inside eval()
int a = 0 Snippet.Kindを決定
Snippetを作成
ラップしたJavaコード
クラスファイル
依存性を検索
再コンパイル
RemoteAgentで実行
クラスをロード
実行
SnippetEventを作成
RemoteAgent
a ==> 0
#ccc_ab4 https://sli.do/
ヒミツのコマンド:/debug(デモ)
jshell> /debug
| Debugging on
jshell> int n=0
Compiling: int n = 0;
Kind: VARIABLE -- int n=0
compileAndLoad [Unit(n)]
++setCompilationInfo() Snippet:VariableKey(n)#1-
int n=0;
package REPL;
class $JShell$1 {
public static int n;
public static Object do_it$() throws Throwable
{
int n_ = 0;
return n = n_;
}
}
-- diags: []
setStatus() Snippet:VariableKey(n)#25-int n = 0;
- status: VALID
compileAndLoad ins = [Unit(n)] -- legit = [Unit(n)]
Compiler generating class REPL.$JShell$25
compileAndLoad [Unit(n)] -- deps: [] success:
true
recordCompilation: Snippet:VariableKey(n)#25-
int n = 0; -- status VALID, unresolved []
n ==> 0
#ccc_ab4 https://sli.do/
ヒミツのコマンド:/debug(デモ)
jshell> /debug
| Debugging on
jshell> int n=0
Compiling: int n = 0;
Kind: VARIABLE -- int n=0
compileAndLoad [Unit(n)]
++setCompilationInfo() Snippet:VariableKey(n)#1-
int n=0;
package REPL;
class $JShell$1 {
public static int n;
public static Object do_it$() throws Throwable
{
int n_ = 0;
return n = n_;
}
}
-- diags: []
setStatus() Snippet:VariableKey(n)#25-int n = 0;
- status: VALID
compileAndLoad ins = [Unit(n)] -- legit = [Unit(n)]
Compiler generating class REPL.$JShell$25
compileAndLoad [Unit(n)] -- deps: [] success:
true
recordCompilation: Snippet:VariableKey(n)#25-
int n = 0; -- status VALID, unresolved []
n ==> 0
入力を解析し,
種類を判別
対応する
Snippet作成
Snippet
に応じた
Wrap
コンパイル
依存性解析
#ccc_ab4 https://sli.do/
jshell> Contributing to JShell
#ccc_ab4 https://sli.do/
JShell in OpenJDK
●つまり,OSS!
–Project Kulla
●
世界中のどこから,誰からでも貢献可能
–新機能提案
–バグ報告
–フィードバック
–パッチ提案
#ccc_ab4 https://sli.do/
How to Contribute
1.JShellを試す!
–https://jdk9.java.net/download/
2.MLに参加!
–バグ報告,新機能要求,フィードバックを送る
3.ソースコードを落として開発!
–パッチをMLに
–Bitbucketなどで公開
Try! Join! Feedback! Develop!
#ccc_ab4 https://sli.do/
Project Kulla
http://openjdk.java.net/projects/kulla/
●ML
http://mail.openjdk.java.net/mailman/listinfo/kulla-dev
●
リポジトリ
http://hg.openjdk.java.net/jdk9/dev
kullaのリポジトリはマージされて使われていない
●Jira
https://bugs.openjdk.java.net/
http://bit.ly/1q8gzdU
Author以上の権限が無いと課題作成できない
#ccc_ab4 https://sli.do/
より詳細な情報は・・・
●I-6_2 OpenJDK コミュニティに参加してみよう
–17:30-17:50 Room I
–KUBOTA Yuji
–個人的な経験を交えて OpenJDKへの参加方法を紹介
#ccc_ab4 https://sli.do/
jshell> Beyond JShell
#ccc_ab4 https://sli.do/
JavaFX on JShell
●JavaFXをJShellから使いたいけど・・・
jshell> new javafx.stage.Stage()
| java.lang.ExceptionInInitializerError thrown
| at Window.<init> (Window.java:1380)
| at Stage.<init> (Stage.java:239)
| at Stage.<init> (Stage.java:227)
| at (#1:1)
#ccc_ab4 https://sli.do/
JShell for JavaFX:jfxshell
●JavaFXを動かせるJShell作った
–jfxshell
–https://bitbucket.org/bitter_fox/jfxshell
–https://bitbucket.org/bitter_fox/jfxshell/downloads/jf
xshell.jar
●JavaFXの全パッケージimport済
#ccc_ab4 https://sli.do/
ブラウザを作ろう(デモ)
WebView wv
TextField address
Button go
#ccc_ab4 https://sli.do/
JShell with Maven
●https://github.com/kawasima/try-artifact
java -jar try-artifact-0.1.2.jar
jshell> /resolve org.apache.commons:commons-lang3:jar:3.4
| Path /home/HOGEHOGE/.m2/repository/org/apache/commons/commons-
lang3/3.4/commons-lang3-3.4.jar added to classpath
jshell> org.apache.commons.lang3.RandomStringUtils.randomAlphanumeric(30)
| Expression value is: "8D1ysKPGhHPLGpsducw0ch0SnSfixb"
| assigned to temporary variable $1 of type String
※今後利用方法が大幅に変更になる可能性があります
#ccc_ab4 https://sli.do/
マイクロフレームワーク enkan(と
kotowari)ではじめるREPL駆動開発
●CD-7 18:30-19:20 Room C+D
–川島 義隆さん(@kawasima)
●Javaのマイクロフレームワークenkan
●REPL駆動開発
–REPLで挙動を確認,変更しながら開発
–将来的にはJShellで!?
#ccc_ab4 https://sli.do/
まとめ
●JShellで快適Javaプログラミング
●JShellはOSS&拡張可能
●Please Try JShell & Give Me Feedback!!
–https://jdk9.java.net/download/
#ccc_ab4 https://sli.do/
JShell developped by
●Engineering
–Robert Field
–Jan Lahoda
●OpenJDK Committers
–Shinya Yoshida
–YOU?
●Testing
–AndreiEremeev
●Advisors/Cheerleaders/Reviewers
–Brian Goets
–Maurizio Cimadamore
–Joe Darcy
–Paul Sandoz
–Jonathan Gibbions
–MichelTrudeau
–Sundararajan Athijegannathan
–Remi Forax
–Arun Gupta
–Mani sarkar
–Daniel Daugherty
#ccc_ab4 https://sli.do/
Q&A on sli.do#ccc_ab4
●他のライブラリ(jar/maven)とかどう読みこませるの
ですか
–手元のライブラリは/classpathコマンド
–mavenセントラルリポジトリからは
kawasimaさんが拡張したtry-artifact
●
ファイルを読み込ませて実行させることはできますか?
–/openコマンド
●どこかで動いているJVMに接続して、内部変数のprintとかで
きますか?
–そういう機能はない
–実装上で解決しないといけない問題が多そう
#ccc_ab4 https://sli.do/
Q&A on sli.do#ccc_ab4
●
今ある一時変数の一覧とか出せますか?
–/varsで変数一覧は見れるけど,一時変数だけはできない
●
アノテーションとかも使用可能ですか?
–もちろん!利用可能です!
●src配下の参照が出来るようにするおまじないとかあります
か?
–/classpath srcでどうでしょうか
●static import とかも記述可能ですか?
–もちろん!
–import static hoge.Hoge.*
#ccc_ab4 https://sli.do/
Q&A on sli.do#ccc_ab4
●前方参照と同じように、 import も後回しにできますか?
–できます!
–ただ,前方参照は宣言においてのみなので,
入力と同時に実行するスニペットではエラー
●script で一気にimport や変数読むとか、できますか
–できます!
–起動時の場合はstartupのスライドを参照ください
–途中では,/openコマンド
#ccc_ab4 https://sli.do/
Q&A on sli.do#ccc_ab4
●
補完のカスタマイズとかできますか?
–補完のプラグインの様な仕組みはないです
–ですが,OSSなので,是非フォークしてください!
●
一度作ったクラスを消す方法とかあるのか?
–/dropコマンドで削除できます
●裏でコンパイルして別の JVM で実行しているということ
は,*.java やら *.class やらの一時ファイルがこっそり作られ
てるのでしょうか?
–作られています!
–オンメモリで作っているので,HDDは汚しません!
#ccc_ab4 https://sli.do/
Q&A on sli.do#ccc_ab4
●Shebangとして実行する事はできますか?
–できなくはないです
–ただし,#!行も実行されてしまう(エラーになる)ため,微妙・・・
●System.exit(0); はできますか?
–是非JDK9をインストールして,jshellで実際に試してみてくだ
さい!
–「System.exit(0)」は別プロセスのJVM上で動くので,別プロセスは終了します.
JShellToolは別プロセスが終了すると,「/reload restore」を実行します
「/reload restore」はリセットして再実行なのですが,なんか怪しい動作する(バグ?)
他にもOOMEなどの再起不能な状態になり,プロセスが終了した場合も,同様な動作をします
#ccc_ab4 https://sli.do/
Q&A on sli.do#ccc_ab4
●JShellのリリーススケジュールとJDKのリリーススケジュールって同期してるんですか?いまからコントリビュート
したとしてJDK9でのリリースに間に合いますか?
–JDKの一部なので同期しています
–現在は以下のスケジュールです
●2016/05/26 Feature Complete
–全機能の実装が完了し,テストと共にmasterにマージ
●2016/08/11 All Tests Run
–この日までに全てのテストは一度は実行されていないとダメ
●2016/09/01 Rampdown Start
–品質向上のための期間がスタート.Phase1ではP1〜P3のバグが修正可能.
●2016/10/20 Zero Bug Bounce
–この日までに,JDK9をターゲットにするバグは修正されるか,リスケされなければならない.以降に作成される
バグは原則的に将来のリリースをターゲットとする.
●2016/12/01 Rampdown Phase 2
–Phase2ではshowstopperなバグだけが修正可能
●2017/01/26 Final Release Candidate
●2017/03/23 General Availability
–jshellはすでにmasterにマージされているため,「Feature Complete」は関係ない(と思われる)
–P4,P5のバグは9/1まで,P1〜P3のバグは10/20まで修正可能!
–つまり,今からコントリビュートしても十分に間に合います!!!あなたとJShell,今すぐクローン!
#ccc_ab4 https://sli.do/
Thank you for your attention!

More Related Content

What's hot

Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyYasuharu Nakano
 
jcmd をさわってみよう
jcmd をさわってみようjcmd をさわってみよう
jcmd をさわってみようTsunenaga Hanyuda
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツールYasumasa Suenaga
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道なおき きしだ
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Norito Agetsuma
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTYuji Kubota
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方Funato Takashi
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfileJava EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfileNorito Agetsuma
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...なおき きしだ
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理土岐 孝平
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャーssuser070fa9
 
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualYuji Kubota
 
Panamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶPanamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶYasumasa Suenaga
 

What's hot (20)

Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
jcmd をさわってみよう
jcmd をさわってみようjcmd をさわってみよう
jcmd をさわってみよう
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
 
Introduction to Spock
Introduction to SpockIntroduction to Spock
Introduction to Spock
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LT
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfileJava EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
 
Panamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶPanamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶ
 

Similar to Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4

omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜Sotaro Omura
 
私とOSS活動とPerl
私とOSS活動とPerl私とOSS活動とPerl
私とOSS活動とPerlShunsuke Maeda
 
ZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツShinsukeYokota
 
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Hiroshi Ito
 
Rails Controller Fundamentals
Rails Controller FundamentalsRails Controller Fundamentals
Rails Controller FundamentalsTakashi SAKAGUCHI
 
20110820 metaprogramming
20110820 metaprogramming20110820 metaprogramming
20110820 metaprogrammingMasanori Kado
 
named_scope more detail - WebCareer
named_scope more detail - WebCareernamed_scope more detail - WebCareer
named_scope more detail - WebCareerKyosuke MOROHASHI
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 
pi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドpi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドkunihikokaneko1
 
8分で分かる最近のCakePHP
8分で分かる最近のCakePHP8分で分かる最近のCakePHP
8分で分かる最近のCakePHPMasashi Shinbara
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発Kentaro Ohkouchi
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとかyouku
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoyakenjis
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 

Similar to Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4 (20)

scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
私とOSS活動とPerl
私とOSS活動とPerl私とOSS活動とPerl
私とOSS活動とPerl
 
ZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツ
 
Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks Reladomo in Scala #scala_ks
Reladomo in Scala #scala_ks
 
Rails Controller Fundamentals
Rails Controller FundamentalsRails Controller Fundamentals
Rails Controller Fundamentals
 
20110820 metaprogramming
20110820 metaprogramming20110820 metaprogramming
20110820 metaprogramming
 
named_scope more detail - WebCareer
named_scope more detail - WebCareernamed_scope more detail - WebCareer
named_scope more detail - WebCareer
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
pi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドpi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッド
 
8分で分かる最近のCakePHP
8分で分かる最近のCakePHP8分で分かる最近のCakePHP
8分で分かる最近のCakePHP
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
qmake入門
qmake入門qmake入門
qmake入門
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとか
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
fanscala1 3 sbt
fanscala1 3 sbtfanscala1 3 sbt
fanscala1 3 sbt
 

More from bitter_fox

きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjavaきつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjavabitter_fox
 
JavaOne2014サンフランシスコ報告会in大阪
JavaOne2014サンフランシスコ報告会in大阪JavaOne2014サンフランシスコ報告会in大阪
JavaOne2014サンフランシスコ報告会in大阪bitter_fox
 
Brand new Data Processing - StreamAPI
Brand new Data Processing - StreamAPIBrand new Data Processing - StreamAPI
Brand new Data Processing - StreamAPIbitter_fox
 
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
徹底解説!Project Lambdaのすべて in Fukuoka #j8fkbitter_fox
 
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]bitter_fox
 
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)bitter_fox
 
Lt (コピー)
Lt (コピー)Lt (コピー)
Lt (コピー)bitter_fox
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]bitter_fox
 

More from bitter_fox (8)

きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjavaきつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
きつねさんと学ぶ Lambda式&StreamAPIハンズオン[関ジャバ2015/7/11] #kanjava
 
JavaOne2014サンフランシスコ報告会in大阪
JavaOne2014サンフランシスコ報告会in大阪JavaOne2014サンフランシスコ報告会in大阪
JavaOne2014サンフランシスコ報告会in大阪
 
Brand new Data Processing - StreamAPI
Brand new Data Processing - StreamAPIBrand new Data Processing - StreamAPI
Brand new Data Processing - StreamAPI
 
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
徹底解説!Project Lambdaのすべて in Fukuoka #j8fk
 
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
 
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
RCC LT 2013 Javaを日本語で書けるようにしてみた(言語処理)
 
Lt (コピー)
Lt (コピー)Lt (コピー)
Lt (コピー)
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
 

Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4