Oracle Code Japan Tour in Sapporoに参加してきました #codejapantour #JavaDo

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

名古屋からはじまり、南から順に日本全国を回っていくOracle Code Japan Tourの最終地点であるin Sapporoに参加してきました。

2017-06-03 04.14.37

Oracle Code Japan Tourとはと、募集の詳細は

をご覧ください。

早速各セッションの内容について書かせていただきたいと思います。

Feed Back from Java Day Tokyo 2017

2017-06-03 04.27.18

セッション概要

Speaker : Takashi Ito, Oracle Japan

セッション概要:

5月17日(水)に今回で5回目の開催となる、「Java Day Tokyo 2017」が東京品川で開催されます。 本セッションでは今年のJava Day Tokyoで大きくフィーチャーされるJava SE 9 / Java EE 8について いくつかのポイントをまとめて最新動向をご紹介させていただきます。

内容

Java EE 8でのアップデートの話がメインとなります。

  • Oracle Code Japan Tourの概要
  • Java Day Tokyo

の話から始まりました。

次に

  • Java SE 9は2017/07/27から2017/09/21の予定になりますよという

アナウンスがされました。

JavaのDocker対応の話となり、

  • OTN Free Lisence Agreementに基づいて個人利用や開発・テストについてはDocker StoreからImage提供
  • 商用利用に関してはOracle Container Registryを利用する

となっているようです。

java EE 8の修正提案の話になり、 2017/10からコミュニティによる議論でおよそ1700件のレスポンスがあったとのことです。

それによって優先度の高いもの、低いものが決定され

  • REST APIやJSON-B、JSON-P、リアクティブAPIなどに注力する
  • MVCはJava EE標準木のには含めない
  • 完成度を高めてから満を持してではなく、出せるものをどんどん出していこう

といった話になったようです。

優先項目に関しては以下のようになっているとこのです。

2017-06-03 04.44.17

ほとんどの機能はすでにProposed Final Draft, Final Relaseになっており、他と比べて遅れているJAX-RS2.1で修正が入るかもくらいとのことです。

Java EE 8 秋背版のリリースは7月を予定しているとのことでした。

2017-06-03 04.44.55

次に、Reactive Rest Clientの話となります。 こちらの機能によって、同期・非同期を組み合わせたオーケストレーションを使ったシステムの構成がが可能になるとのことです。

2017-06-03 04.47.26

最後にJava EEのコードがGithubに移行、Glassfish5.0の話、WebLogicによるエンタープライズのサポートは2018予定という話で締めくくりとなりました。

2017-06-03 04.48.29

2017-06-03 04.50.31

Java SE 9のススメ - 増補版 -

さて、connpassの順番とは前後しますが、続いてはこちら隣ます

2017-06-03 04.56.16

セッション概要

Speaker : 櫻庭祐一

セッション概要:

今年もJavaチャンピオンの櫻庭祐一さまに、スペシャルスピーカーをお願いできました! 下記の内容でトークをいただけます!

Java SE 9ではProject JigsawやJShell以外にも多くの機能が導入されています。 本セッションでは、Java SE 9の多くの新機能の中から言語仕様の変更や、コアライブラリの変更点などを紹介します。もちろん、Project JigsawやJShellについても取りあげます。 また、互換性に問題がある点などについても実例と共に解説します。

内容

Project JigsawやJShellを含む全体的な内容を

  • 互換性
  • 新機能
  • 改善

の3つの観点での内容となっていました。

最初に言語仕様の互換性の話としては、これまでJavaでは互換性がなくなる仕様変更はあまりなく、 最後がassertの廃止以来なので10年ぶりくらいになるとのことでした。

具体的なものとしては

  • 「_」一文字の識別子は利用できなくなる
    • Java SE 8の段階ですでに警告は出てるのでマズイ人はわかってるはず
  • これまでDeprecatedと言いつついつまでも消える気配はなかったが本格的に廃止されるものがある
    • 特にOSに近い下位層に関してはProject Jigsawと絡んでがっつり廃止する
    • 新たにdeprecatedになったものも多数ある

とのことでした。

2017-06-03 05.01.14

2017-06-03 05.03.13

運用上の非互換としては、

  • VisualVMなど古くからあり、現在では他にいい監視ツールがあるものを廃止する
  • G1GCがデフォルトになる
    • CMSはdeprecated
    • G1GCはメモリが豊富な場合有効だが、開発機などは注意が必要

とのことです。

続いて、新機能の話となります。 こちらは、

  • Project Jigsaw
  • JShell
  • Reactive Streams

の解説となっています。

Project Jigsawでは、おなじみJar hellの話から始まります。 この話でよくやりだまにあげられるHadoopですが、この実際classpathを実際に目の当たりにしてる私からすると、これ笑い事じゃないんですよねw

Project Jigsawは、

  • 依存性の欠如
  • 公開範囲設定

を解決するためのモジュールとのことです。

2017-06-03 05.12.53

jarにmodule-info.javaを追加することで、これらの解決を図っているようです。

2017-06-03 05.13.55

モジュール定義は、src直下におく必要があるため、モジュールごとにソースを分ける必要があるようです。

モジュールを利用するには、javacでのコンパイル時にmodule-info.javaを追加するとのことですが、 実際の現場ではjavacを直接叩くことはあまりないので、mavenやgradleの対応を待ちましょうとのことでした。

モジュールを使った開発一通りの流れもわかりやすい解説になっていました。

2017-06-03 05.19.45

また、プラットフォームの依存性を調査するための、「java --list-module」やjdepsの解説もされていました。

2017-06-03 05.22.07

2017-06-03 05.25.01

続いて、JShellの解説では、百聞は一見にしかずということで実際の動作をその場でデモしていただきました。

2017-06-03 05.28.38

REPL機能に関してはそういったものが備わっている言語を使っている方にとってはなじみ深いものかと思いますが、javaもJShellの登場で教育や実験的なプログラムを手軽にやりやすくなりますね。

新機能の最後はReactive Streamsとなっています。 こちらはJava SE 8からのStream APIやjava.ioのStreamとは全く関係ない別物で、Pub-Subモデルの非同期通信を行うためのものとのことです。

2017-06-03 05.31.15

PublisherとSubscriberとの間でどのようにやり取りされるのかと、Subscriberを次のPublisherにすることで、リアクティブなプログラミングが可能になるとの解説をされていました。

2017-06-03 05.32.31

改善の項目として、

  • Milling Project Coin
  • Stream, Collect, String
  • その他

の改善をあげていました。

Milling Project Coinでは

  • try-with-resouces
  • 匿名クラスでのダイアモンド演算子
  • インターフェースのプライベートメソッド
  • アンダースコア

があるようす。

2017-06-03 05.35.28

今回は、匿名クラスでのダイアモンド演算子についての解説となり、 Java 8でほとんどのコードで対応したが唯一対応していなかった匿名クラスにも対応した(が、そもそも匿名クラスあまり使わないし、lambdaとかあるのであんま使う機会ないも)ということです。

2017-06-03 05.36.21

続いて、Streamでは、

ファクトリメソッドやメソッドの追加、Optional周りでの便利な機能の追加を挙げられていました。

2017-06-03 05.41.01

Collectionでは、of()ファクトリメソッドが追加されるようです。これは地味に嬉しい人が多いのではないでしょうか?

2017-06-03 05.43.23

最後にその他として、

  • バージョン文字列の変更
    • MAIN.MINOR.SECURITYとなる
    • これまでの1.XとXみたいなのは廃止されMAIN部分は9のみになる
  • JavadocがHTML5対応し、検索窓ができる

とのことでした。

2017-06-03 05.46.52

Cloud Native Java EE

2017-06-03 05.57.24

セッション概要

Speaker : Sebastian Daschner

セッション概要:

なぜデベロッパーはクラウドネイティブやスケーラビリティ、リアクティブうんぬんなどのバズワードに注意を払わなければならないのでしょう? なぜ2017年という年に、これらのコンセプトをまとめて我々のアプリケーションに導入することが良いアイデアであり、またどのテクノロジーが我々にとって重要なのでしょうか?

本セッションはJava EEを用いてクラウド・レディでアダプティブ、かつスケーラブルなアプリケーションを構築する方法について解説します。これらの機能拡張はJava EEがコンテナ・テクノロジーやオーケストレーションに非常に適応性を持っていること基づいています。 セッションの多くの時間をライブ・コーディングとクラウド上のアプリケーションのデモンストレーションに費やす予定です。

内容

まず、最初はJavaのコミュニティの広がりの話と、アンカンファレンス、JOnsenといった大変楽しそうな話となっていました。

2017-06-03 06.07.56

2017-06-03 06.12.56

さて、ここからがすごいのですが、 DockerとKubernetesを使ってクラウド環境にJava EEのアプリをデプロイするというのをライブコーディングで行っています。

ライブコーディングってその場にいて臨場感を楽しむもので、後からこうしてまとめようと思うとどう書いていいのかわからないですが、凄まじい勢いで記述されていくそのコードの一部を画像としてお楽しみいただければと思います。

2017-06-03 06.21.21

2017-06-03 06.23.11

2017-06-03 06.28.53

2017-06-03 06.35.42

2017-06-03 06.38.48

これだけの速度でこれだけの処理が実現できるのはまさに圧巻でした。

Raspberry Pi with Java 9

さて、本日の最後のセッションとなります。

2017-06-03 07.10.21

セッション概要

Speaker : Stephen Chin

セッション概要:

本セッションでは、あなたがあなたのJavaプログラミングスキルを使って低コストで入手できるRaspberry Piで趣味のプロジェクトを立ち上げる支援をしたいと考えています。我々は実際の プロジェクトとソースコードをサンプルとして、デモンストレーションを通じてコンセプトを 解説していきます。 以下をセッションでカバーします。

Unboxing your Raspberry Pi and setting up Java Using Pi4J to program common I2C devices Creating visual and touch UIs Controlling 3D printers and CNC routers Using Java 9 modules to shrink your app size Connecting to the Internet of Things (IoT)

本セッションに参加いただくことで受講者自身のエンベデッド型プロジェクトを個人もしくは仕事として始めることが可能になります。そして、IoTクラウドの世界につながるJavaプログラミング・スキルの向上も期待できます。是非、一緒にJava 9のエンベデッド・テクノロジーの世界を構築しましょう!

内容

タイトルの通り、Raspberry Piを使った話となります。

最初はRaspbeery Piの構造の話から始まります。

2017-06-03 07.15.01

Project Jigsawによって含めるモジュールが選択できるようになるため、Raspbeery Piのようなメモリの少ない環境でも動かしやすくなるようです。

2017-06-03 07.15.56

Java9では新機能を利用するために古い機器との互換性はなくなっているようです。

2017-06-03 07.19.51

また、Raspbeery Piで利用する際は

  • G1GCは使えない
  • JavaFXは使えない

といった制約もあるようです。

Raspbeery Piではないけど、Android/iOS向けにはGluonを使うというヴィジュアルなエディタでUIを構築とかもできるようです。

2017-06-03 07.23.22

2017-06-03 07.24.07

さて、ここからRaspbeery Piを使ったIoTの実例紹介となります。

2017-06-03 07.24.59

こちらは、Raspbeery Piが搭載された、機器を使ってタブレット端末から

  • コーヒー豆の挽き加減
  • ポットのお湯の温度
  • 重さのセンサーでの水の量

といった項目を管理するものになっています。 これらが全て管理され、可視化されてたり、タブレットから調整できたりするのはすごいですね。

続いては、こちらになります。

2017-06-03 07.29.32

こちらはRaspbeery Piにつながったタッチパネルで書いた絵の通りに木を削って形を作ってくれるものとのことです。 こんなこともできるのかと考えるとすごいですね。

最後は、センサーを搭載した車が黒い線の上を走るというものになります。

2017-06-03 07.34.26

こちらはその場で実機を使ってのデモ大会が開催されました。 参加者が好き放題、白いテープの上に黒いテープで引いた線の上を本当に車が走っていく様子が実演されました。

2017-06-03 07.45.34

これには参加者も大盛り上がりで大変楽しい時間となりました。

他にも様々Raspbeery Piを使った機器の紹介をして、締めくくりとなりました。

2017-06-03 07.50.29

懇親会

懇親会は、北海道らしくジンギスカン...ではありませんが、羊肉を使った焼き肉会となりました。

当時はあいにくの雨ではありましたが、Stephen, Sebastianともにバイクで来ていてこの後稚内まで観光にいくということで、技術的な面以外でも非常にすごいパワーを感じるお二人でした(もちろんバイクで来ているのでお二人とも酒はのでませんでしたよ)。

写真は七輪で焼いたラムのタンになります。

2017-06-03 09.26.24

盛り上がってる様子を撮影するセンスが私にはない点はスルーしてあげてくださいw

終わりに

というわけで、Oracle Code Japan Tour in Sapporoの参加レポートは以上となります。 Javaというと結構枯れている技術側な感じもしますが、java8のStreamやlambdaをはじめとして、java9では互換性も切り捨てた大胆な変更があります。 まだまだ、盛り上がっているし、これからも進化していく可能性を感じる内容になっていました。