2013年5月14日

Java Day Tokyo 2013 に行ってきた

Java Day Tokyo 2013 に行ってきました。 「MAKE THE FUTURE JAVA」というタイトルで1日がかりのイベントとなりました。 アメリカのオラクルからもエンジニアが来てくれて、講演や Q&A セッションがありました。

以下のセッションに参加したのでメモをまとめておきます。

  • Keynote (基調講演)
  • Ask The Expert
  • ここからはじめる、JSR-356 WebSocket
  • Java IDE の最新トレンド
  • タブレット用の JavaFX アプリケーション開発

基調講演

基調講演は Java SE、JavaFX、Java Embedded、Java EE のそれぞれの今と未来についての説明、 それからユーザーグループコミュニティの紹介でした。

Java SE Strategy

Simon Ritter さんからの説明。

Java SE 7 へのアップデートに関して。Java SE 6 のインストールベースを追い抜いている。 サポートするプラットフォームも増加してきている。 組み込み機器 (Java SE Embedded) への拡大も進めている。

JDK8 に関しても鋭意開発中である。 言語、コアライブラリ、JVM など、非常に広範囲の変更を実施している。 ラムダ式の導入、インターフェイスにデフォルトメソッドを実装 (Extension Methods)、 コレクションに関する扱いも改善されている。 JDK7 までは、巨大なコレクションに for ループを回すと繰り返し処理を並列に処理できないので、 パフォーマンスが上がらなかった。JDK8 では forEach を導入するとこで効率性が向上する。

今までの書き方。

for (Shape s : shapes) {
    if (s.getColor() == BLUE)
        s.setColor(RED);
}

Java 8 の書き方。

shapes.forEach(s -> {
    if (s.getColor() == BLUE)
        s.setColor(RED);
});

今後のロードマップには JDK9 も入っており、今のところは2016年を予定。 2年サイクルでリリースしているので、JDK8 が2014年だとちょうど良い。

Scene Builder (NetBeans と統合された JavaFX のエディタ) も マイルストーンに大きく入っている。NetBeans とともに主要なアイテム。

JavaFX Strategy

Nandini Ramani さんからの説明。

JavaFX は Swing の置き換え。デスクトップアプリケーション用のもの。 ランタイムがパッケージにバンドルされるようになる。 Mac App Store でも配布できるようになる。

NetBeans との統合が強く打ち出されている。

ここで Jim Weaver さんによるデモ。 3D のビジュアライズの話。

UV Mapping っていうので 3D モデルを 2D テクスチャイメージから作れるらしい。Wikipedia のページが詳しい。 球にテクスチャを張り合わせることで地球儀のようなグラフィックスを構成できる。 http://javafxcommunity.com にコミュニティリソースがあるので、取っ掛かりとしてはここから。

Java Embedded Strategy

組み込み機器が活躍する時代になってきている。

Host Era > PC Era > Internet of Things

人口よりも Connected Devices の数の方が多い。 2010年で Device per Person は 3 を超えてる。 Java の広告でも「30億のデバイスで走る Java」とあるので、総数としては妥当な感じ。

ユースケースをいくつか紹介。 デバイスが端点 (エッジ) でデータを分析できる Edge Devices という考え方。 交通状況のモニタリング、各種オートメーション、ヘルスケアなどに活躍する。

Java Embedded Suite はゲートウェイのミドルウェアも含む。 Java ME Embedded 3.3 で 3 系は終わり。現在のバージョンは 3.2 らしいので次が最終。 JDK 8 のタイミングで Java ME Embedded 8 になって、他のパッケージとバージョン表記が統一される。

Java EE Strategy

Cameron Purdy さんからの説明。

Java EE が大事にしている5つのもの。

  • Standard
  • Productivity
  • Portability
  • Extensibility
  • Modularity

Java EE 7 には WebSocket と JSON も含まれる。HTML5 対応を強く発信。 プロファイルスタックはけっこう巨大になってきており、図をパッと見てもよく分からないレベル。

新しいサーブレット API (Servlet 3.1) での書き方はこんな感じ。 アノテーションを使い分けることで通信開始/終了も書き分けられるので WebSocket のような 通信モデルも分かりやすくプログラミングできそう。

@ServerEndpoint("/echo")
public class EchoBean {
    @OnMessage
    public String echo(String message) {
        return message;
    }
}

Arun Gupta さんによるデモで、WebSocket (JSR 356) によるホワイトボード共有。

Java EE の Next Steps は JSON-B, Thin Server Architecture など。 GlassFish 4 も試してみて欲しい。Java EE 7 はもうすぐローンチ。

Java Community

Sharat Chander さんからの説明と日本ユーザーグループ (JJUG) の紹介。

参加セッション

Ask the expert

基調講演をしてくれた方々に質問できる時間があったので参加してきました。 覚えている範囲でいくつかの質疑応答をメモしておきます。

Q: 後方互換性の確保に関してはどのように考えていますか?

Scala のユーザーベースを観測することで、新機能への要望のひとつの指標としている。 後方互換性を大事にするか、新機能を盛り込んでいくか、という議論は今後も大事。

Q: 言語コアの部分とライブラリの違いについてどのように考えていますか?

言語コア、ライブラリ、JVM は別々にも一緒にも進化していくことができる。 ラムダ式に関しては言語仕様だけに影響するもの。 JDK8 における Oracle の課題は「ライブラリ」内でラムダ式を活用していくこと。 仕様に関しては JSR で DateTime、アノテーションなどを個別に定義していて、 これらはオープンな枠組み。RedHat や Twitter も参画している。

Q: NetBeans を JavaFX で書き直す予定は?

具体的な計画は担当エンジニアに聞いてみないと分からない。 JavaFX はツールキットなので直近では難しいかもしれない。将来的にはひとつの選択肢。

Q: WebSocket のポート開放はどうするか?

この後のセッションで詳しく話します。picky な問題ですね。

Q: 「Java EE を使ってます」とは、フルスタックで使わないと名乗れない?

一部分だけを差し替えるられるのが Java EE の良いところ。 Spring や Hibarnate と組み合わせても良いと思います。 極論するならサーブレットだけでも良いと思います。 ただ、Struts を使っているなら Java EE に移行した方が良いでしょう。

ここからはじめる、JSR-356 WebSocket

もともとは HTML5 の一部だったが、 IETF が RFC 6455 を定義し、W3C が JavaScript API を定義している。 HTTP をアップグレードすることで双方向通信 (Bi-directional) を実現する。 サーバからのレスポンスに HTTP ステータスコード 101 "Switching Protocols" を使う。 いったんアップグレードが終わると、HTTP とは全く違う世界になる。 クライアント/サーバという役割はなくなり、お互い単なる "Peer" になる。

ブラウザごとのサポート状況は Can I use で確認できる。 IE では IE10 から利用できる。

REST と WebSocket の速度比較のデモ。 WebSocket はコネクションを再利用するが REST はコネクションを張り直すので、 通信回数が多いとパフォーマンスの違いが顕著に分かる。 100byets を1000回の通信で4倍以上の違いになる。 ゲームみたいなインタラクティブなアプリケーションでは大きな問題。

JSR 356 には Tyrus っていうリファレンス実装がある。GlassFish 4 には組込まれている。 @ServerEndpoint@ClientEndpoint などのアノテーションを使う。 import javax.websocket.*; で使える。

エンドポイントではエンコーダーとデコーダーを定義する。 文字列 (String) かバイナリ (byte[]) のどちらかを処理させる。 実装レベルでは ReaderByteBuffer でも良いみたい。 簡単なチャットアプリケーションなら1つのクラスファイルで実現できる。

認証に関しては <security-constraint> で実現できる。 セキュアな接続は wss:// で OK。

デモで使ったソースコードなどは Oracle のブログ にアップされている。

Java IDE の最新トレンド

3つの IDE に関するパネルディスカッション

  • Eclipse
  • IntelliJ IDEA
  • NetBeans

Eclipse は汎用ツールの基盤なので、ツールに関するエコシステムが構成されてきた。 最新仕様に追随するよりは、毎年6月のリリースサイクルを確立することに力を入れている。 DSL を作りやすくする機構 (Xtend) が導入される。

IntelliJ IDEA は有償版と無償版がある。最初のリリースは2001年で意外と歴史がある。 Scala のプラグインの出来が良く、WebStorm なども使われ出して、巡り巡って IDEA 自体も人気が出てきた。 Live Edit の機能で HTML を編集するとブラウザが自動リロードされる。

NetBeans は最初の手順が少ないので Java の入門として分かりやすい。 Java EE への対応も強い。JPA の JPQL も補完できる。 PHP, Groovy は標準で搭載されている。Python, Ruby は標準から外れた。 HTML との連携機能もあり、ソースコードの編集がリアルタイムに内蔵ブラウザに伝わり、 内蔵ブラウザで選択した DOM がソースコードでハイライトされる。

「良い書き方を教えてくれる」という意味で IDE は単なる補完以上のもの。 by きしださん

後ろでツイートを流している TwitSignage というアプリが便利そうでした。

タブレット用の JavaFX アプリケーション開発

マルチタッチ機能を実現する JavaFX。タブレットではタッチ操作が標準なので大事。 スワイプ、スクロール、回転、ズームの4つのジェスチャーがある。 JavaFX はそれぞれに API を提供している。 マルチタッチも標準搭載。JDK7 を使っていれば OK。 慣性 (= Inertia) まで考慮できるらしい。

Pagination クラスも提供している。比較的簡単にページ送りを実現できそう。

Pagination pager = new Pagination(10, 0);
pager.setStyleClass()
     .add(Pagination.STYLE_CLASS_BULLET);
pager.setPageFactory(pageIndex -> {
   // ページ送りテキストの処理を記述
});

CSS では -fx- というペンダープリフィックスを付ける。

JavaFX Ensemble というデモ集アプリもあるみたい。 javafxcommunity.com にあるもの。 みなさんがブログに書いてくれればそれも含めますよ:) とのこと。

終わりに

秋葉原の駅構内にもこのイベントの広告が出稿されていて、非常に豪華なイベントだなと感じました。 内容的にも、Java の各プラットフォームの方々の講演があり、非常に網羅的な構成でした。 基調講演には同時通訳だけでなく手話の人までいることに驚きました。

組み込み Java は名前くらいしか知りませんでしたが、人口に対するデバイス数の増加を考えると、 今後はもっと重要になっていく分野なのかもしれません。 エッジデバイス (センサーなど) がインテリジェントになっていくことで実現できるサービスも出てくることでしょう。 どのプラットフォームでも同じ言語仕様でソフトウェアを記述できる Java の強さが発揮される領域とも言えます。 たまには動向を追いかけてみると良さそうですね。

Java 8 はようやく、、、という感じです。 コアライブラリのラムダ対応も進んでいるようで心強く思います。 たいがいのソフトウェアでコレクションを扱うコードは多くの場所に出現しますが、それらのパフォーマンスが向上することは手放しで嬉しいですね。

コメントを投稿