JavaOne 2015 報告会 @ 東京
togetter JavaOne 2015 報告会 @ 東京 #j1jp
自分が聞いたセッション(リンクは公開された資料)
- Impressions of JavaOne & Java trends
- Java SE Update
- Java SE 講演から
- Java ME & IoT
- Java EE Update(前半)
- Java EE Update(後半)
- Speaker Panel: How to be a speaker at JavaOne?
全体の話
JavaOne 2015に行った方々のJavaOneの雰囲気 + Javaの最新動向の話し。最近の大きめのカンファレンスは、あまりコードの部分に触れることも少なくなり、少し寂しかったのですが、今回は、Javaの未来の話しということもあり、新しい機能と共にコード例がたくさんあり、わかりやすいものも多く、非常によかった。
報告会では来年JavaOne行ってみたい人アンケートがちょっと出て、手をあげなかったけど、後日、この報告会の話しを知り合いに話したら来年一緒に行ってもいいかもと言われてたので、気になるイベントに。
(もし行けても、個人で行くことになりそうなので、もう少しチケットがお手頃ならいいのになぁ。)
個々のセッションの話
Impressions of JavaOne & Java trends
JavaOne全体の雰囲気を伝えるセッション
気になったキーワードあたりは下記
- 今回のJavaOneは大きなアップデートなし
- ORACLEは予定通りに作業を進める会社
- 成熟し、大人になったものと思えば良い
- OracleはJavaとJavaコミュニティを重視している
- EE8はコミュニティの声をきいて、どれを入れるかを決めている
- (ベンダー主導でない)
- JJUG CCC 2015が、11/28(土)にあるので来てね
技術トレンド
- DevOps & Microservices
- Javaそのものは重要視ではない(Javaは基盤)
- そもそも「ソフトウェア開発」が重要ではない
- プログラミングができるのが重要だった時代から、サービスを提供する時代になってきている
- ITサービス運用が重要
- カナリアリリース
- ブルーグリーンデプロイメント
- ルーター側で古いバージョン、新しいバージョンを平行稼働して新しい方に振り分けていく
- 問題があったら古い方に戻す
- ダークカナリアリリース
- 開発者にしかみえないリリースを本番環境でテスト
- マイクロサービスにすると、周辺サービスに依存するものが多くなるので、本番環境でやったほうがテストが効率的
- (クックパッドも本番環境でユーザには見えない機能が使えるとかあったかも)
- Chaos Monkey
- ランダムサーバを落とすOSS
- サービス品質の確保
- 全体的なサービス品質を確保するために、部分的な品質劣化を許容
- 不運なユーザは存在しうるが、サービスがダウンするような事態にはならない
- エンタープライズ発想とは逆
- Netfilixがいうレベルのダウンタイムなら許容できるエンタープライズもあるのではないか
エンタープライズにおけるDevOpsとマイクロサービス - JavaOne2015レポート
(感想)
SeasarCon2015でもFault Injection Testingの話しがあったように、Netflixは障害が起こるのは当たり前の前提での設計、テストをしているのだと感じた。
また、ソフトウェアデザインについて、重要なポイントが変化してきているというのは確かに思っていたことではある。
- 内部品質 -> デザインパターンとかで綺麗に作るか
- 外部品質 -> JUnitなどの単体テストしやすさで作るか(DIなども)
- 利用時品質 -> サービス継続を確保するためにどう作るか
という感じでデザイン(プログラムの設計)の仕方が変わってきている。
というか、あまりプログラムの細部が語られなくなってきたように思う。
語られない = 必要でないというのは違うと思っていて、
- それを必要とする人間とそうでない人間・会社の棲み分けがより広がってるのではないか
- スピーカーが大人になった(一部分をみるのではなく、全体を見る立場の人が多くなった)
のではないかと思っている。
Java SE Update
- JDK9は、2016/09/22、来年のJavaOneに合わせてリリース予定
- JDK9 = Project Jigsaw + それ以外
それ以外
- jshell -> コンソール上でコードをかけるようになる
- Java.Doc.Next -> javadoc周りのがいろいろ便利に
- Cross compiling and the javac -release -> source,targetオプションを集約したもの
- Milling Project Coin -> "_"の命名禁止(既存でかいてると影響がある)、内部的な変更
- Deprecation and imports
- Re-engineering javac -> ダイアモンドネストが多いとコンパイル時間が増えてたのが改善
- 非互換がいくつかあるので注意(詳しくはスライド参照)
JAR Hellの課題
- 紛失したライブラリはどれか
- コンフリクトはどこで発生したか
- 内部APIを安全に変更できるか
-> JARの抽象化機構が必要 -> Moduleが必要
Module
- モジュールの依存関係を定義する仕組み
- 公開したくないパッケージをexports指定で公開しないようにできる
- publicの範囲も指定可能に
- API開発をしている人にはメリットがある
- 意図しない内部的なクラスを使われなくなる
jlink
- jlinkでオリジナルjavaイメージを作れる感じ
- (java_20151113、java_new、java_bakとかできそうな。。)
(感想)
Moduleの公開したくないパッケージを指定できるというのは、FWなりAPIを作っている人からすると、嬉しいと思う。
Moduleはいろいろ記述が柔軟になりそうな反面、複雑なものが出てきそうで、JAR HellからModule Hellとかならないのだろうかとは懸念する。
また、今は実質、GradleやMavenなどのビルドツールを使っていると思うが、それらを置き換えてまで使いたいかというのを仕組みを理解している人に聞いてみたい気もする。
Gradleなどが、Module形式でかけたり、Moduleが定義されていると、そこらへんを読み取って依存を追加してくれたりするなど、Moduleとうまく共存できれば広がるんだろうけど、そのあたりはどうなんだろうか。
Java SE 講演から
Eclipse Collectionsの話し。
- GS Collectionsから、Eclipse Collectionsへの移行途中
- Spring ReactorにもGS Collectionsの依存が入っている
- GS Collectionsでは社内的な事情でGitHubに公開していたものの、PRは受け取れなかった
- コミュニティのコントリビュートを受けれるようにしたかった
- Eclipse Collectionsへ。(パッケージもcom.gs -> org.eclipseへ変わる)
その後は、GS Collectionsでもあったようなお話。
(感想)
今回はまだスライド公開されていないようですが、下記あたりのものがJavaOne用にブラッシュアップされた感じ。
GS Collections and Java 8 Lambdas
GS CollectionsとJava 8 実用的で流暢なAPIで楽しい開発を!
Eclipse Collectionsになったはいいけど、GitHubでプルリクとか受ける形になるのかな?
(聞き逃したので不明ですが、Eclipse Foundation傘下なので、GitHubでやるのではないっぽい?)
GS Collectionsは、Java Day Tokyoで知っていたけど、追加の情報もあって勉強になった。
特に、throwingというラッパーメソッドのようなものを利用することで、lambda内のtry-catchがすっきり書けるのはとてもいいと思った。
Java ME & IoT
- SE embedded -> なくなった(セッションがひとつもなかった)
- Open JDKにモバイル相当のプロジェクトができた。(さくらばさん情報)
- jigsawでやってくれということか変更点がほとんどない
他にJavaOneのマイナー?な点にスポットをあてたネタがいろいろなセッション。
Java EE Update(前半)
Servlet4.0
- HTTP/2対応
- HTTP/2 サーバプッシュ
- htmlの要求がきたら、関連するjs,png,cssなどをプッシュする
- 1リクエスト、1レスポンスの原則が崩れる
- PushBuilderというものが検討されている
- 非同期クライアントAPIの改善
- Jerseyには既に実装がある
- RxJava、Java8のCompletableFuture対応
- 今は書き方が複雑
- FinalResult、PartialResultアノテーションで順序制御(提案中)
- ノンブロッキングI/O
- 本当に必要かも含めて、まだまだ検討中
- JMS2.0の微妙な部分の改善
- MessageListenerの実装が不要に
- Messageインターフェースのキャスト不要(TextMessageなど)
- キュー指定がJNDIで指定可能に
JPA2.2
- Java SE8対応
- Date and Time API
- Repeatableアノテーション
- スクロール機能の標準化。(hibernateであったもの)
WildFly Swarm
- Spring Boot風のJavaEE(まだ実験的)
- Spring Bootとの背景の違い
- Spring Boot -> Springを利用するときにpom.xmlが複雑化していたのを整理
- WildFly Swarm -> Java EEをフルセットで使うのではなく、利用する機能だけ一式jarにまとめて軽量化
- ・・・とあるが、WildFly Swarmで実行可能なjarができるが、今はちょっとした依存の組み合わせでも、100MB近いjarになる
- 不要な依存がまだ入っているのではないか
- 機能の追加はpom.xmlに追加したい機能を依存に追加する(Spring Bootと同じような感じ)
- デフォルト設定(Spring BootだとAuto Configuration)もある
- 何が設定できるかは xxxFraction.javaのソースを読む(しかない?)
SwarmによるJava EEの分解を見て
- Java EEもマイナーアップデートが欲しい
- Springは着実に進化、JavaEEは標準化に時間がかかる
- 仕様確定後、実装サーバが1年越しにようやく出てくる
(感想)
JAX-RSの非同期部分はあまり知らなかったので、コード実例がありながらだったので、とても参考になった。
最後にも言われていたが、EE全体は、どうしてもSpringに比べてスピード感が遅い印象で、洗練された新しい機能を早く使いたい場合は、(対応されていれば)Springの方がいいと思う。
とはいえ、標準化がされないと独自仕様が乱立するだけなので、Java EEとSpringでいい仕様をフィードバックしあって成長していって欲しい。(Springで実質デファクトとなったものを整備してEE側にも取り込まれて、Spring側がそれらの標準仕様に対応していくという流れはいくつもあるので)
Java EE Update(後半)
- JSF(component)ではなく、なぜMVC(action)か
- 見通しのよさ、簡便さ
- RESTとの親和性
- フロントエンドの流行廃り
- WONTA(Write Once, Never Touch Again)
- どうせそのうち書き直すのだから、保守性は考慮にいれないの意味
- 定着したサーバサイド技術として、MVCへのニーズ
- ValidationはBeanValidationベース
- ビュー(JSPなど)は仕様レベルではJSP、Facelet
- 参照実装(Ozark)にはextensionとしていくつかある
- (自分がよく使っているThymeleafもあるよう)
- スコープ
- デフォルトスコープは、request
- リダイレクトスコープ(RedirectScoped)も可能
- FWでなく、API
- 「ポストStruts」ではない
- Validationとそれに関連する画面遷移の周りのをもうちょっと使い込まないと実用にはつらい
(他に紹介されてた、JSON-P 1.1、JSON-Bはあまり使うことはなさそうなので省略)
JavaOneの感想
- すでに日本のブログや勉強会で紹介されてたネタもちょくちょくあった
- 世界とレベル差はあんまりない
(感想)
MVC1.0はSpring MVCっぽいものがEEとして出るというような感じで、Spring MVC自体はかなり気に入っているので、そういったものが標準として出てくるのはよいと思った。
また、(参照実装ではあるが)Thymeleafも対応されそうな気配があるので、ウオッチしたいなと思う。
JSONは、Jascksonがデファクトなような気がするので、今更感が強いような。
(加えて、JSON以外のデータフォーマットが数年後に出るかもしれないのに、低レベルAPI部分に凝り過ぎなような気もする)
Speaker Panel: How to be a speaker at JavaOne?
パネルセッションスピーカ
- 谷本さん(アクロクエストテクノロジー)
- 伊藤さん(ゴールドマン・サックス)
- てらださん(Microsoft)
Q1. JavaOneで講演してどう?
- 谷本さん
- スピーカーで言っても飛行機代出ない
- コミュニティに貢献できるのはうれしい
- うかるテーマで出したので、話したいものではないのでモチベーションが上げにくかった
- 他の人がやらないようなもの、事例系がうかりやすい
- 伊藤さん
- JavaOne初めて行ったので、テンションあがった
- Call for Paper(CfP)と別経路で話すことになったので、講演が決まったのは9月入ってからで急だった
- Eclipse Foundationで話す枠があったので、提供してもらった
- てらださん
- Oracleをやめたけど、JavaOneに行きたかった
- 自腹でいこうと思っていたが、JavaOneのチケットは15万くらいする
- Oracle時代に世界中のコミュニティの人と知り合いだったので、受かった人にお願いした
- 人のセッションに乗っかって、話させてもらった(2、3人スピーカー登録できるので)
- 当初は、話すまでは予定になかったが、発表の10分前に話すことに決まった
- 日本用の動画の画面、文字でプレゼンで、英語でしゃべって説明した
- 意外と日本語の画面でもわかってくれる人もいた
- (今回でなく)1回目の発表はめちゃくちゃ緊張した
- JavaOneはセッションがおもしろくないと人がどんどん抜けていくのを知ってたから
- 今年は、10分前に決まったものもあって、気楽にやれた
- 日本でイベントでしゃべってるような感じできた
- 谷本さん
- (今回でなく)1回目、自分の英語が伝わってるか不安だった
- 多少、文法が間違ってても準備してたら話しをきいてくれる
- 今回は準備不足で結構、途中退席されてしまった
- てらださん
- 日本とちょっとプレゼンの仕方が違う
- 日本では最初つまらなくても、後半でおもしろかったら印象に残る
- アメリカはおもしろくなかったら退席されるので、最初にこういうポイントは聞いてほしいということを伝えておくのがよいと思う
Q2. 今後、どんな人にJavaOneで講演してもらいたいか
- 谷本さん
- JJUGなどで話している人がいい
- GC、JVMなどのコアな部分ではそうではないが、それ以外だと日本人の発表が勝っている人もいる
- 世界で活躍すると、コミュニティも盛り上がる
- コミュニティに参加しているような人は積極的に参加してほしい
- 子供がプレゼンというのもおもしろい(子供がやってみた系)
- (話あいまい)子供でもプレゼンの訓練をしている私立とかあって、そこの子供はとてもうまいそう
- てらださん
- 今日ここにきている人は、JJUGでまず発表してみることをチャレンジしてほしい
- うかりやすいのは、事例系
- 伊藤さん
- ツイート数は日本が一番多かったように思う
- JJUGのコミュニティを紹介する系もよいかもしれない
Q3. JavaOneのスピーカーになるための極意
- 谷本さん
- 会社としてでる
- 事例公開、lambda、jigsawといった単品のものは本家本元がいるので、ノウハウ、パフォーマンスチューニングとかのほうが通りやすいのではないかと思う
- 伊藤さん
- 英語については、テクノロジー系だと、用語が英語から来てるので、会話よりはプレゼンのほうが楽(準備もできるので)
- てらださん
- JavaOneは文化としてセッション中でも質問くるので、そこは大変
- 谷本さん
- プレゼンである程度書いていたら、乗り切れるかも
- 質問はtwitterでと書いておいて。手を挙げても見ないふりをしたこともあった
- 伊藤さん
- チャンスがあったら手が伸ばせる人
- 臆せず、やってみる人
- 谷本さん
- 今自分がやっている仕事が頑張ってれば、おもしろければ、それを話せば良い
- 事例で、実際に使った痛みがないと相手に伝わらない
- 大きい会社の事例と、小さい会社の事例だとちょっと違うので、表現の仕方は考える。なんかの箔をつけないといけない、大企業のお客様の事例として話すなど
- てらださん
- コンテンツを選んでる側は、コミュニティ参加、講演経験なども考慮されている
- さくらばさん(場外から)
- CfPは、締め切りから審査されるわけではなく、随時審査されるので締め切り間際に出すと、落ちる確率が高くなるかも
- 谷本さん
- アブストラクトは英語、過去資料、発表動画とかは日本語で出してもOKだった
- 動画は発表している雰囲気を見ているのではないか
- てらださん
- CfPはいくつも出せる、(サムライズムの)ゆうすけさんは4本出していた
Q4. スピーカーになるとこんなメリットがあるか?
- 伊藤さん
- スピーカータグをもらえる
- 谷本さん
- チケットがタダ
- 転職しやすくなるかも(会社の顔になるのでなかなか辞めれないが)
- てらださん
- スピーカー用の部屋が使える
Q5. 来年JavaOneのスピーカーになりたいと思っている人へ
- 谷本さん
- 日本の人はすごい人がいる
- コミュニティを盛り上げていくことが重要
- 自分がやることをきっちりやっていれば、世界という舞台もレベルも、実はそんなに遠くない
- 仕事頑張れ、エンジニアが一番成長するのは普段の仕事であり、その延長線上でアウトプットすることでよりよい形になっていくと思う
- 周りのも発展させていくし、自分も成長するのでよいと思う
- Javaも若い人がまた入ってきて平均年齢さがってきてるので、また盛り上げていきたい
(感想)
それぞれ思い思いに話されていたが、3人とも共通するのは、伊藤さんがいっていた、チャンスがあったら手が伸ばせる人、臆せず、やってみる人というスタンスの人だなと思った。
手を伸ばさないと、変わらない、けど今やってる自分の仕事、自分がやることをきっちりやっているという積み重ねも大事。
その行動力、(結果を伴う)信頼性で周りの人ともフィードバックループをつなげていくということかな、自分も少しでも見習っていこう。