2017/06/03

Oracle Code Japan Tour

このエントリーをはてなブックマークに追加

今年も Stephen Chin さんと Sebastian Daschner さんはオートバイに乗って日本各地の JUG を回っているのです。

去年は Nighthacking Tour でしたけど、今年は Oracle Code Tour。

でも、去年は沖縄と札幌だけは飛行機だったのです。どうやら、Steve たちは、沖縄はともかく、札幌にバイクで行けなかったことを悔やんでいたらしいです。

で、今年はすべての行程をバイク。札幌もバイクでした。

全行程を示すと...

東京 - 名古屋 - 大阪 - 岡山 - 広島 - 熊本 - 福岡 - 福井 - 仙台 - 札幌

だそうです。セミナはありませんでしたけど、四国にも彼らはいっていたようです。

櫻庭は去年と同じく、週末だけのスポット参戦。広島札幌で登壇させてもらいました。

広島で講演するのは 2013 年以来。@soudai1025 さんに誘われてオープンセミナー広島に登壇したのでした。その時は Java SE 8 について話したのですが、今回は Java SE 9。

札幌は去年の Night Hacking Tour でも講演させていただいたので、2 年連続。

去年は大韓航空機が羽田で事故を起こしたせいで、札幌に来るまでが大変でした。今年はそんなトラブルもなく、無事に講演することができました。

両方とも内容は Java SE 9 です。Java Day Tokyo の資料を日本語にして、Jigsaw と JShell をくっつけています。

広島と札幌では微妙に資料が違うのですが、それらを統合したものを slideshare にアップしてあります。

2017/05/20

JJUG CCC 2017 Spring

このエントリーをはてなブックマークに追加

Java Day Tokyo の後は、CCC です。前回の秋は出なかったので、1 年ぶり。

今回は、Project Jigsaw です。

しかし、今月になって Jigsaw の JSR 376Public Review Ballot が否決されてしまうと波乱があったばかり。こんな状態で、なんの話をすればいいのでしょう?

Ballot の意見を見ていても、結局は過去とのマイグレーションをどうすればよいかという点が指摘されています。OpenJDK の Jigsaw の ML でも、マイグレーション関連について活発に議論されています。

しかし、このあたりのことは Java Day Tokyo でのキーノートや Jigsaw のセッションでは一切触れられていませんでした。

そこで、このセッションでは発表時点で分かっていることはなるべく盛り込んで、話をしています。しかし、セッション後にやはり変更された点や追加議論が必要とされている項目も出てきています。

そういう点については、また稿をあらためて紹介できればと思っています。6 月の Public Review Reconsideration Ballot の後ですかね。

さて、発表資料はこちら。

すでに、ほぼ確定の module-info.java の書き方や、ビルド/実行の方法などについて触れた後、残りの 1/3 の時間を使ってマイグレーションについて話をしました。

特に既存の JAR ファイルをモジュールとして扱う Automatic Module について紹介しました。しかし、その Automatic Module が JCP での議論のトピックになっているわけです。とりあえず、セッションでは改定案を紹介しましたが、最終案がこうなるとはかぎりません。

あっ、1 点だけ、セッションで失敗したと思ったことが...

標準で提供されている Platform Module を調べるために java コマンドに --list-modules オプションがあります。これで調べた結果を示したのですが、JRE の java コマンドを使ってしまいました ><

JDK の java コマンドと JRE の java コマンドだと使えるモジュールも異なるのです。たとえば、jdk.jshell などは JDK の java コマンドだけです (もちろん、JRE でも --add-modules すれば使えます)。その点をすっかり忘れて、JRE でやってしまったのでした。

 

このセッションでは質問を受け付けるために sli.do というサービスを使いました。

Java Day Tokyo で @bitter_fox さんが、このサービスを使っていたので、私もまねしてみたわけです。

セッション中にオンラインで質問を投げられるし、それに対して「いいね」をすることもできます。なかなかいいですね、これ。次回も使ってみよう!!

というわけで、セッション中にいただいた質問をここで答えておきます。

 

Q. JASRACのひとがやってくる危険が危なくないですかww?

A. あー、あー、聞こえない、聞こえない

Q. mavenでは、moduleとどうやって整合とるのでしょう

A. Maven の動きをあまり追いかけていないのですが、問題となるのは Jigsaw のモジュールと artifacts が違うものだというこということにあると思います。どうやって折り合いをつけるかということは、まだ決まっていないようです。

プレゼンテーションにも登場させた Stephen Colebourne がこの件についてブログで言及しているので、ご参考までに。

Java SE 9 - JPMS modules are not artifacts

Q. メタ情報なのに.javaっていうのがちょっと嫌。JSONじゃダメなんだろうか。

A. Java で JSON を扱うのは意外に面倒なので... module-info.java を扱うのは javac なので、Java の構文解析がそのまま使えるのがいいのではないでしょうか。

プレゼン中にも言及しましたが、JSON-B が Java SE でも使えるようになったら変わるかもしれません。あくまでも個人的な意見ですが。

Q. moduleやrequires, exportsなどのキーワードはmodule-info.javaでのみ有効な予約語?の位置づけでしょうか

A. module-info.java のみで使用できる予約語です。

Q. モジュール化した場合としない場合でアプリの起動時間にどのくらい差がでてきますか?

A. 大きいシステムでモジュールを多くロードするようなシステムであれば差がでると思いますが、私自身は試してないのでよく分かりません。小さいシステムだと、それほど差がないように感じます。しかし、計測を行ったわけではないので、あくまでも感想レベルだと思ってください。

Q. module-info.javaが小文字始まりになった理由は何かあるのでしょうか

A. パッケージの情報を記述する package-info にならったのだと思います。

Q. // puckage export typo?

A. タイポはなかなか気がつかないので、ご指摘ありがとうございます! 公開している資料では修正してあります。

Q. モジュール版のmavenセントラルができることになるんですか?

A. 今のところそのような予定はないです。個人的には Maven セントラルが利用できれば一番いいのではないかと考えていますが、そのためには前述した artifacts とモジュールのすり合わせを行う必要があります。まだ、道は遠そうです。

Q. 昔、jarの中にjarを入れるsuper packageみたいな話があった気がしますが、そっちの話はどうなったのでしよう

A. JAR をまとめたパッケージングに関しては JSR 277 で JAM (Java Archive Module) というのが提案されていましたが、棄却されています。super package は言語側の拡張提案で、JSR 294 で提案されていましたが、こちらも棄却されました。これらを受け継いだのが、Project Jigsaw になります。

Q. Jigsawにはバージョンを管理する仕組みはないのでしようか? モジュール名にバージョン番号を入れる?

A. バージョンをつけることは可能です。バージョンをつけるには、jar コマンドの --module-version オプションで記述します。ただし、そのバージョンを使用して、バージョンを指定してビルドするなどは、現状ではサポートされていません。

Q. exportsで指定したパッケージのサブパッケージは公開されるのでしょうか?

A. 公開されません。公開するにはサブパッケージも exports 文を記述する必要があります。

Q. MANIFEST.MF に名前がなかったらどうするのでしょう

A. ファイル名が使われると思いますが、確認はしていません。

Q. testだけでパッケージを公開(exports, opens)したい場合やmoduleをrequiresしたい場合はどうするのが良いのでしょうか?

A. これは非常に難しい問題で、現状 Jigsaw では同じパッケージを複数のモジュールに分割することはできません。そのため、ファイルツリーを src と test に分割している (ビルドしたクラスファイルも別ディレクトリ) 場合はモジュールにしてしまうと、テストを実行することができません。

櫻庭もこれに対する最適解を見つけている最中なのですが、現状はテストの時はモジュールとして扱わないようにしています。コンパイルや実行に他のモジュールが必要な場合、--module-path と --add-modules オプションを使用して必要なモジュールをロードするようにしています。

2017/05/17

Java Day Tokyo 2017

このエントリーをはてなブックマークに追加

今年も Java Day Tokyo で講演してきました。

講演内容は Java SE 9 の全般。資料はこちらです。

裏話を書いてしまいますが、私のセッション、内容がなかなか決まらなかったのです。

当初、Jigsaw についてを要望されたのです。しかも、Alex Buckley が Jigsaw の応用的な話をするので、入門編をやってくれということでした。

というか、Alex ですよ!! Jigsaw の JSR 376 のスペックリードですよ!! 私ごときが、Alex と同じ話題を喋るなんて、恐れ多い。

でも、結局 Alex と Bernard Traversat さんが Jigsaw を話すことになったわけです。

その他に、Java SE 9 関連だと JShell を @bitter_fox さんが話すので、Java SE 9 の注目 2 機能はとられてしまったわけです。

そこで、Jigsaw と JShell 以外の全般について話すことになったわけです。

話題的には次の 3 つ。

  • コンパティビリティ
  • 新機能
  • 改良された機能

特にコンパチの話は、今まで使えていたけれども使えなくなるモノがいろいろあるので、それを中心に説明しました。

メソッドもほんとに使えなくなったり、Deprecated になったものが多くあります。多くは Jigsaw に起因するメソッドですが、Jigsaw では今後いろいろと隠されてくことになるはずです。

ツールもいろいろなくなっています。個人的には VisualVM がなくなってしまうのがイタい。便利なのになぁ...

新機能としては、主に Reactive Streams を紹介しました。

残念ながら、Java SE 9 では Reactive Streams を導入しただけで、それ以上の機能は自分で作りこまなくてはいけないのがつらいところです。Publisher だけは実装クラスである SubmissionPublisher クラスが提供されていますが、Subscriber は実装する必要があります。

改良された機能は、Milling Projet Coin と Stream API、そして Collection を紹介しました。

Collection のファクトリメソッドである of メソッドは、Java SE 9 で導入されたメソッドの中で一番のヒットではないかと思っております。

また、String クラスの内部構造が変更されたことなどにも触れてます。

もっと多くの機能について触れたかったのですが、講演時間は限られているので、これぐらい。

ITpro の 最新 Java 情報局 でより詳細な情報を執筆しているので、ぜひそちらも参考になさってください。

 

さて、こういう多くのトピックがある話題を話すプレゼンって、とても難しいです。

単に、「続きましては...」とかで次のトピックにつなげていくだけにしてしまうと、ぜんぜんおもしろくないどころか、聞いている方は退屈してしまいます。

実際、こういうセッションをしている人が過去に何人もいたのです。そして、聞いている私は、完全に退屈してしまったわけですww

トピックがズラズラと続くだけなので、盛り上がりにも欠けてしまいます。

「いつまでこの調子で続けるの?」と思われてしまっても、しかたないですよね。

そのために、今回はどうやったかというと、トピックをツリー状に構造化して、今話しているトピックが全体の中のどこに位置しているかを分かるようにしてみました。

具体的には、こんなツリーになっています。

Topic Tree

ツリーの葉は 3 つ以上にならないようにしています。それ以上になってしまうと、聞いている方が今どのあたりを話しているかを把握できなくなってしまうからです。

そして、話している時も、なるべく今話しているトピックが分かるように、かつ、なるべくトピック間に関連をもたせるように話してみました。さて、結果はどうだったんでしょうね。