JavaOne 2015 報告会 @ 東京

JavaOne 2015 報告会 @ 東京に行ってきました。

Opening & JavaOne 2015 over all

伊藤 敬さん(日本オラクル)

Keynoteはあまり見所がなかった。セッションが中心。 参加者は去年より微増。9000人くらいか。

キッズプログラムが非常に大きな規模で行われた。 小学3,4年から中高生までWebだけでなくIoTやロボットなんかもあった。 印象に残ったのは、社会人と同じくらいプログラムができる子供が非常に多かった。

Java人口は1000万人くらいに戻してきている。
ロードマップは今までと変わらなかった。OpenJDKはコミッターの数が136%伸びた。 UserGroupは倍増。南米で増えている。日本でも増えた。

JCPの法人会員を増やそうとしている。法人会員費を免除しようとしている。 あとは可決を待つだけで、実際は今問い合わせをすると無料にしてくれる。

Impressions of JavaOne & Java trends

鈴木 雄介さん(JJUG)

JavaOne感想

目玉は無し。20周年がなければ寂しかった。
Sunの創業者のスコットが登場。

コミュニティ・キーノートが開催されたが、学芸会のようなパーティーのノリ。 Kids are future.(子供達が未来)

OracleとJava

Oracleは予定通りに作業を進める会社。
Javaエヴァンジェリストを削減。
コミュニティの声を聞こうという姿勢。JCPにもJUGが関わっていくことも可能。Javaカラーは維持されている。

コミュニティを重視しているのは間違いない。一方でJavaビジネスは苦労していそう。OracleとJavaはいい関係でもあり微妙な関係でもある。

JJUGとしては引き続きエンジニアの地位と技術力の向上に貢献します!

技術トレンド

  • DevOps & Microservices
    Javaそのものが重要ではない(Javaは基盤)
    Javaという単語が出てこないセッションも結構あった。
    ITサービス運用が重要
    いかにITサービスを継続していけるか
    ソフトウェア開発は十分に成熟している

現時点では先端Webサービス系企業が取り組んだものが共有されて広がりつつある状態。
Netflix、Gilt、Twitter、Foursquare等

  • カナリアリリース
    現行システムに並行してNewバージョンを動かして、少しずつNewに移行していく。
    サーバー台数が倍必要。クラウドならではのリリース方式。

  • ダークカナリア
    開発者にしか見えないリリースを本番環境にする。(本番環境でのテスト)
    ステージングではなく、バグがあってもいきなり本番環境にリリースして、開発者だけがアクセスしてテストする。

  • Chaos Monkey
    ランダムにサーバーをダウンさせるOSS
    インスタンスは毎週、アベイラビリティゾーンあるいはリージョン丸ごとは毎月おとしている。

全体的にサービス品質を高めるために、部分的な品質劣化を許容する。
不運なユーザーはいるが、サービスがダウンすることにはならない。
エンタープライズ発想とは異なる。どちらがいい悪いではない。

重要なポイントが変化している。
昔は内部の構造(クラス図とか)が大事
-> プロセスや外部品質が大事(アジャイルやユニットテストとか)
-> サービスを維持することが重要に

Javaエンジニアだからと言ってサーバーのことを知らなくてもいい時代ではなくなった。

サマリ

来年のJavaOneに注目
Java9がリリース!

Javaだけではないトレンドにも注目
サービスにも目を向けてみよう。

JJUGをよろしく!
Javaコミュニティは引き続き元気です!
懇親会も大事だよ!

JDK Update

久保田 祐史さん(NTT)

Java SE - Oracleが出しているもの
JDK - Oracleが出しているとは限らない

なぜJavaOneに行くのか
課題:Javaの進化方向
人物:誰が何の担当か
詳細:技術内容等

Java9が2016/9/22にリリース
JavaOneの最終日に合わせてきたので、何が何でも出してくると思う。

Java9
Module導入(ProjectJigsaw)とそれ以外

JDK10+
ハードウェア、OSへの最適化
去年出ていた話とほぼ一緒なので今回は話さない。

Java9

Project Jigsaw以外の変更点

jshell
Java.Doc.Next
Cross ompiling and the javac -release
Miling Project Coin - "_"のみの変数名が禁止になるので互換性に問題ある
Deprecation and imports
Re-engineering javac - Diamond nest でコンパイルが遅くなるのを解消

6つの非推奨メソッド削除(JEP162)
JDK内部APIのカプセル化
JDK/JREのランタイムイメージ変更(JEP220)
ブートクラスパスを変えるものが削除(JEP261)

Project Jigsawの変更点

長いので全部話せないと思うが、資料を公開するので後でみてください。

JAR Hell - 例えばHadoopのクラスパスの指定がとてつもなく長い
紛失したライブラリはどれ?
コンフリクトはどこで発生?
内部APIを安全に変更できる?依存関係がよくわからない

JARの抽象化機構が必要 -> Moduleの導入

Moduleは複数のPackageをまとめたコンテナ
コンテナによって

  • 依存関係を明確化
  • 他コンテナを妨げない
  • 特定パッケージのみ公開する

Moduleの定義は module-info.java ファイルに記述

例:com.foo.barの場合

module com.foo.bar {
 requires java.sql; -> 依存するパッケージ
 exports com.foo.bar.alpha; -> 公開するパッケージはexports
 exports com.foo.bar.beta to -> toで公開先を限定できる
  com.foo.app,
  com.foo.xxx
}

以下のコマンドでモジュールのリストが表示できる。

java -listmods

jdepsコマンドで依存ライブラリ確認

java.baseモジュールは基底のモジュールなので、自動的に読み込まれる。

実行可能イメージ作成
jlinkコマンドでモジュールを指定して実行バイナリファイルが作成できる
組み込みやセキュリティで活躍するかも

Java SE 講演から

伊藤 博志さん(ゴールドマン・サックス)

Eclipse Collections

ゴールドマン・サックスがEclipse Foundation Memberになったので、これまでGS Collectionsとし作っていたものをEclipse Collectionsに移管することになった。

Java8 Streamを内包して便利な機能を追加したもの。Java8でなくても、5以降であれば使うことができる。

JDKのHashSetは非常にひどい実装。HashMapをラップしているだけ。Keyを使ってValueの方は使ってないのでメモリ効率が非常に悪い。
Eclipse Collectionsでは最大で6倍くらい速度が変わってくる。

Mapも2倍くらいメモリ効率がいい。プリィティブのリストを操作する場合にも効率的な方法で使える。

Java ME & IoT

大山 弘樹さん(Javaカンファレンス)

発表時間は20分と言われたが、正直そんなに内容が無い。3分で終わる。

Java ME Embeddedバージョンが8から8.2になった。
Linux対応になった。

ME Embedded と SE Embedded があるが、SE embedded はセッションが1つも無かった。無くなったのかもしれない。

Raspberry Piが2になった

KeynodeではEmbeddedのデモがなかった。初めてのこと。

Java EE Update

大中 浩行さん(グロースエクスパートナーズ), 上妻 宜人さん

Java EE 8 は2017年リリース予定
Java EE 8 はまだ検討中なので変更になる可能性があり。

Java EE 8 のアップデート

Servlet 4.0

サーブレットコンテナもHTTP/2に対応
サーバープッシュ(関連するリソースをまとめて返す)で既存の1リクエスト、1レスポンスが崩れるので、Servletを修正する必要がある。

JAX-RS2.1

非同期クライアントAPIの改善
並列で依存関係のあるWebAPIを呼び出したい
アノテーションによる依存関係制御が追加されるかもしれない

ノンブロッキングI/O
データ読み込みでブロックしていたのが問題。データが来た時だけreadを呼び出すように変更するアイデアが提案されていた。
本当に必要?ユーザーレベルでNIOを意識しなくてもいいのでは等の意見も。

JMS2.0

これまでMessageListenerを実装する必要があった。テキストが欲しいだけなのにキャストが必要。
MessageListenerを無くす案がある。

JPA2.2

Java SE 8対応
Date and Time API への対応
@NamedQueryのRepeatable対応

スクロール機能の標準化

Java EE 周辺の話

WildFly Swarm

Spring Boot風のJava EE
2015/5に1.0.0.Alphaリリース
まだ商用には早い

実行可能なjarファイルが作成される。
java -jar xxx でWildFlyが起動されてアプリケーションが実行される。
WildFly全体で約127MBなのでまだ大きい。最終的にはもっと小さくなるのでは。

MVC1.0

actionベースのMVCフレームワーク
現在はEarly Draft
リファレンス実装はozark

なぜJSFでなくMVCなのか? 見通しのよさ、簡便さ
RESTとの相性が良い
フロントエンドの流行り廃りの激しさ
定着した技術としてのサーバーサイドMVCへのニーズ

MVCのControllarはJAX-RSのresourceとして実装

Validation
Bean Validation(JSR349)ベース
ハンドリングの仕様がprimitiveな印象

JSON-P 1.1

1.0はJavaEE7で実装
現在はEarly Draft Review
なぜかbooleanが対応の型に入っていない

JSON-PATCH
JSON更新処理の標準化
2つのJSON間のdiffが取れる

JSON-MERGE PATCH
JSON間のmerge処理
nullの値をマージするとキーの削除ができる仕様が追加になった

JsonObject/JsonArrayをMap/Listとしてstream+Lambdaで使用可能に
streamモデルによる大容量JSONデータの処理

JSONに対する低レベル操作API
JSONとJavaオブジェクト(JavaBean)へのマッピング機能は持っていない
 -> JSON-B(JSR367)で解決できるかもしれないが、標準化に時間がかかりすぎる!

おまけ

セッションを聞いていると、既に日本で聞いたことのある話が多い。
ソフトウェア開発レベルでは日本は海外に遅れてはいない。

Speaker Panel: How to be a speaker at JavaOne?

モデレータ:
 伊藤 敬さん(日本オラクル)
パネル:
 寺田 佳央さん(日本マイクロソフト)
 谷本 心さん(Acroquest Technology)
 伊藤 博志さん(ゴールドマン・サックス)

Q1.JavaOneで講演してみてどうでしたか?率直な意見を聞かせてください

[谷本さん]
費用がでなくて自腹なので高い。金銭的なメリットはないが、コミュニティに貢献できていることがうれしい。
受かるテーマで申し込んだ。ログの可視化。トラブルシュートネタは受かりやすいと踏んだ。 自分の英語が通じるかどうかが怖かったが、ちゃんと準備していれば文法が間違っていてもみんなわかってくれる。

[伊藤さん]
初めてのJavaOne参加。登壇が決まったのは9月。とにかく楽しかった。
Eclipse Fundationで枠が余ってるのでやらない?と言われて軽いノリでやった。
日本ではみんなが楽しんでるかわからないところがあるが、JavaOneでは興味持ってくれていることがすぐわかる。

[寺田さん]
今回2回目。Oracleをやめることになったが今年のJavaOneは絶対出たかった。
自分で申し込んだのではなく、他の人のセッションに一緒に出させてもらった。1セッションに2,3人でられるので、1人で不安な人は一緒にやるのもいい。
発表する10分前にお願いして出させてもらった。スライドは全部日本語で書いてあったが、結構みんな理解してくれた。 1回目の時はすごい緊張した。セッションがつまらないとみんな一気に去っていくので緊張した。今回は結構気楽にできた。
日本でやるときとは少し変えた。日本は最後まで聞いてくれるので、最後に面白いことを持ってきてもいいが、JavaOneではみんなすぐ去っていくので、最初にどんな面白いことをやるか説明すると、そこまでは聞いてくれると思った。

Q2.今後、どんな人にJavaOneで講演してもらいたいと思いますか?

[谷本さん]
CCCとかのJJUGで発表している人はでて欲しい。
日本のレベルは高いので、そのまま英語にすれば十分通じると思う。
子供がスピーカーをやるのを見てみたい。

[伊藤さん]
日本のJJUGのツイートは圧倒的に多いと思う。日本のコミュニティのあり方はユニークだと思うので、それを発信していくといいと思う。

[寺田さん]
いまここに来ているみなさんに、まずは日本で情報発信していただきたい。
事例系の話は受かる確率が高いと思うので、そういったものがある人に行ってほしい。

Q3.あなたが習得した「JavaOneスピーカーになるための極意」を教えて下さい

[谷本さん]
プレゼン中にどんどん質問がくるので、英語が苦手なら最初にTwitterで質問してくださいという。手を上げてる人がいたが見ない振りをした。
今の仕事を頑張れ。仕事を頑張ってその内容を話せばいい。仕事頑張らずに趣味の範囲で話そうとすると事例として意味がなかったり面白くなかったりすると思う。自分が体験した痛みを通して話したほうがいい。小さい会社は知名度がないのでなにか泊をつけた方がいい。お客さんの名前を出すとか。
日本でJJUG等でどれだけ発表してきたかの経歴も書くので、そういったことがあると通りやすい。
過去のプレゼンの資料や動画チェックがある。全部日本語で出したが通った。楽しそうに話してるやつだったので、ちゃんと話せる人だと思われたのだと思う。
ボソボソ小声で喋ってたらダメだと思う。

[伊藤さん]
テクノロジー系のプレゼンは用語が既に英語なので、動詞だけ英語にする感じでいいと思う。会話をするよりはプレゼンの方が楽。
JavaOneのセッションは日本のCCCに比べるとそんなにすごい内容でないことも多いので、スキルよりもマインドの問題。勢いでやってしまった方がいい。

[寺田さん]
会社として出る。楽天のように事例を持っている会社がどんなことをやっているかのノウハウがあると通りやすいと思う。 LambdaとかJigsawとかの単品の技術を話そうと思うと、本家に話す人がいっぱいいると思うので、事例やトラブルシューティングとかの方が通りやすいと思う。
参加して見る人はセッションをちゃんとみた方がいい。スピーカーの人はキャッチーなタイトルを付けたりするので、行ってみたらつまらなかったということがある。

[櫻庭さん]
締め切り間際に出すと絶対落ちる。本当でやろうと思うなら早く応募した方が絶対良い。

Q4.JavaOneのスピーカーになるとこんなメリットがあるよ!という話を教えて下さい

[谷本さん]
転職しやすくなるかも。よく話が来る。

[伊藤さん]
専用のパスがもらえる。結構いい。

[寺田さん]
チケットがタダになる。
スピーカ専用のエリアが使える。

Q5.来年JavaOneのスピーカーになりたい!と思っている皆さんへ最後に一言

[谷本さん]
3年くらい応募して落ちていたこともある。
今日出た話をまとめると2つで、コミュニティを盛り上げていきましょうと仕事頑張れだとおもう。聞くだけでやっている気にならず、参加してほしい。

[伊藤さん]
自分の仕事をしっかりやるのは大事。今年のJavaDayTokyoで初めて登壇したばっかりだが、仕事をしっかりやっていたおかげで出られたと思う。
今は出るつもりはなくても、常にアンテナを張っておくことは大事。

[寺田さん]
JavaOne、JJUGに限らず、日本には優秀な技術者が本当に多いので、ずっと聞いているひとも是非今度は発表してほしい。そうすればコミュニティも盛り上がるし、日本はこんなことやってるというのを世界に発信できる。