JavaOne TokyoでPlayFrameworkとWebSocketのことを話してきました


Javaone top

JavaOneは、Javaに触った事がある人なら一度くらいは耳にしたことがあるイベントなのではと思います。最近は海外での開催は行われていても、日本では行われていませんでした。今回の開催はじつに7年ぶりだとのことです。Java EEがあまり盛り上がっていないのかそうでないのかは、よくわかってません。

7年ぶりの開催ということで、開催前からいろいろな募集が行われていました。1つは「Call for Paper」というもので、JavaOneで行われるセッションのうち、いくつかを一般公募によって決定するというものです。

ちょうどその時、PlayFrameworkとWebSocketのイベント(【エンジニアカフェEvent】 PlayBay – PlayFramework+WebSocket勉強会)を開催しようとしていた時でもあり、PlayFrameworkとWebSocketについてもし話す機会があれば活用したいと考えていました。

「Call for Paper」では、講演タイトルや、企画内容などを記述して、提出をします。結果は、後日個別に発表される仕組みです。

採用されるかどうかどきどきしながら待っていましたが、無事採用されました。

Javaonew

タイトルは、「PlayFramework 2.0 JavaとWebSocketでつくるリアルタイムMVC Webアプリケーション」という感じに最終的に決まりました。最終的にとつけているのは、JavaOneの頃はまだPlayFramework 1.2.4が最新だったので、企画内容自体も1.2.4ベースで進んでいたからです。

その後3月末にかけてPlayFrameworkをとりまく状況は大きく変わりました。バージョンが1.2.xから2.0になるということはそこまで大きくないように一般的なフレームワークでは思えたりしますが、PlayFrameworkは、JavaのフレームワークからScalaのフレームワークへと大きく変革が起きたのです。フレームワーク内でコアの使用言語が変わるという事はあまりないことでしょう。

そういった変更をうけて(もちろん、いつか2.0になるということ自体は前々からわかっていたので、ソースなどは見てはいましたが)スライドの内容を大幅に変更して2.0をベースに変えました。

セッション内容

Javaonesp

セッション内容のアウトラインはこんな感じです。PlayBayでやった内容も一部含まれています。PlayFramework自体の内容が加わったのと、Play2.0ベースの内容になった点が異なります。

  • Play Frameworkとは
  • Play 2.0 Overview
  • リアルタイム通信サーバのこれまで
  • WebSocketとは
  • WebSocket未対応ブラウザへ
  • PlayFrameworkとWebSocket
  • Play 1.2.4のWebSocket
  • Play 2.0のWebSocket
  • サンプル:Reversi
  • F.javaの話

スライドについては、OKが出たら一般公開しようと思っています。

サンプルについて

Reversi capt

サンプルは、WebSocketを使って五目並べの盤を再現するというものです。WebSocketを使ったユニークな点としては、五目並べをしている相手のカーソルが随時確認できる点で、思考の流れを相手も見たりする事が出来ます。
このサンプルは、実際にWebSocketアプリケーションを作っていくための構築手順と共に解説しました。手順は以下のような感じです。

  • Playアプリケーションの作成(MVC)
  • メッセージフォーマットの設計
  • イベントモデルの設計
  • コントローラ、モデルの作成
  • ルーティングの作成
  • ビューの作成

WebSocketはどこで役に立つのか?

また、最後にまとめとして、皆で考えたいお題をシェアしました。
1つは、「WebSocketはどこで役に立つのか?」という話

  • ログイン以降は、ユーザーによる細かな操作が続くAjaxで行ってきた部分の上位バージョンとして
  • ブラウザで閲覧中にリアルタイム通信が必要なとき
  • 業務アプリなど、利用人数が限られたサイトでのレスポンスの向上
  • Pushstate(Pjax)と組み合わせてみよう

今後の研究課題

もう1つは今後の研究課題です。PlayFrameworkはWebSocketがサポートされましたが、MVCフレームワークのような確固たる機能としては構成されていません。その証拠に、1.2.4では、WebSocketControllerという形でコントローラーでハンドリングしていた部分がモデルに移動したりしています。
いろいろなベストプラクティスを考えていきたいです。

  • 既存の通信手段とのパフォーマンス比較
  • 認証がからむケースのセキュアなWebSocket
  • WebSocketのデータを保存のベストプラクティス
  • イベントの登録管理をもっとスマートに
  • PlayにおけるWebSocketの負荷の調査
  • サーバー構成の研究
  • ネームスペースの実装

サンプルコード

最後になりましたが、GitHubにあげたサンプルコードのURLを掲載しておきます。
https://github.com/karad/PlayWebSocketReversi

会場では、バッグや、

Javaonebg

T-シャツがゲットできました。

Javaonet

ありがとうございました!

Comments are closed.