第3回Playframework勉強会 に参加してきた #play_ja

Playframeworkについてはここ最近興味関心を強く寄せており、写経等を踏まえて実践・実装スキルを磨いていた所にこの勉強会の告知があったので告知発表即申込み、参加してきました!




と、その前に過去2回の勉強会についておさらい。情報を漁ってみると、とても多くのブログレポートが書かれていました。
この分量・クオリティは凄いですね。おさらいする身からしても非常に助かります。

Playアップデート


  • 自己紹介
    • BToB向けwebサービス会社に勤めています
    • Playframeworkは1の頃から使っていた
    • コミッタにもなりました。
    • Jenkins本にも寄稿しています。
  • 歴史
    • Zenexity社の社内フレームワーク 2009年OSS
    • 2011年1.2系
    • 現在v2.0
      • 全体をScalaで書き直し
      • Netty+Akkaで非同期I/Oの徹底
  • Play1.x系
    • Java
    • Scalaプラグインでサポート
    • 基本的に設計思想は同じ
    • 完成度なら1.x系
    • 未来を取るなら2.x系
  • 1.xから2.xへの利点
    • バイトコード走査との決別
      • Javaasist/Javaflowで使われている。
      • 上記をscala+akkaで置き換えられる
      • 特にJavaflowは2008年でメンテが止まっている
  • 数字で見るPlayframework
    • ML登録メンバー数:6300人超
    • 2年半で15倍以上に
    • 1.x系と2.x系を数字で比較

    • 1の方が5倍位長い期間、モジュール数もそれに併せて多い。
    • そして、やはり世間の注目は2.x系に。
  • 1.xの現状
    • 1.2.5リリース
      • 1.2.4から実に半年。
    • 正式にメンテナンスモードに移行
    • 次(1.3)でおそらく終了。(※確定では無いが)
    • 1.3系
      • hibernate4対応(→JDK5サポート切り捨て)
      • Docviewerのi18n
      • 上記と細かいBugfixのみ
      • 例えば"マルチDB対応"などは入らない可能性が極めて高い
      • (DocViewerデモ)
      • 日本語であれば日本語対応。スペイン語なども対応。
      • 翻訳して頂いた方々、ありがとうございました!
        • ※2.x系の方は本家も混乱してるので待ってちょ!らしいです。
      • Play1.3に冠してはいつでるかどうかは未定
  • 2.xの現状
    • 現在2.0.2リリース
    • ドキュメント未整備(みなさんWikiを編集してください)
    • モジュールリポジトリなし(開発中)
    • モジュール指向なのにモジュールの作り方が分かりづらい?
  • 2.1ロードマップ
    • Scala2.10, sbt0.12対応
    • Play独自Promiseをscala標準Promiseへ変更
    • スレッドプール設定の簡略化
    • Scala json apiの改善
    • コンパイルスピードの改善
    • 等々
  • 2.xへの要望
    • 何かあればぜひ!
    • PlayはOSSですので、皆さんの貢献が頼り
    • 何かあればまとめて伺って、コアメンバーに共有します。

MediaTechnologyLabsの紹介/Play2.0+Javaでサービスを本番稼働させた話


  • と言うわけで寝てません(という掴みからセッションスタート)。
  • 自己紹介
    • Java屋、現在はObjectCを。
  • そして本編。


  • 皆様、音楽は好きですか?
    • どんな曲を聴いていますか?
    • 学生の頃に比べると、明らかに新しい音楽へ触れる機会が減っている。
    • 音楽に出会う場が少なくなった
    • 番組などを見なくなった。
    • 探すのはオンライン経由でのみ。意外と能動的な行動?以前(TV/ラジオ)とは反対の話し
  • (Attacca操作デモンストレーション)
    • 音源はitunesが公開している音源を流している。
    • 自分のソーシャルグラフ上の友達が聞いている曲も聴けるし、お気に入りにも取り込める。
    • →視聴のプレイリストを作る。
    • 今聴いている曲をツイート出来る。
    • Web系の画面もplayで出来ている。

  • Play導入の経緯
    • ややスピリチュアルな話しに。

    • Sier/Architectでした。
    • 官公庁系システム:数百億円規模
    • エクセル駆動開発推進してました。
    • 人海戦術…いろいろな病気をこじらせたまま転職
      • 上記の大規模開発→小規模開発の職場へ、前職と同等のアーキテクチャで初めてしまった。
      • DI厨でした『何でもかんでも疎結合だ!』
        • ※実際小規模開発では1人とかなので、責務とかどうでもよくなる
      • 反省点
        • 上記のせいでフットワークの低下が発生
        • インタフェースドリブンにしすぎ
        • スピード感、イライラ感
          • 確認にtomcat起動はきつい…
  • 300人で2年かけて作る世界から、2人で2ヶ月で作る世界へ。
  • つまり、自社サービスは変更・リリースが入るし、すぐ直せればいいよ。
    • その時に、Rubyに魅力を感じた…もののJavaの人なので。
    • その他の選択肢としてGrailsやSpring Rooが挙がってきたが、採用は見送った。
  • Play2.0
    • どうせやるなら2.0で。Java/2.0で。
    • Play はrest APIサーバとしてリクエストを受け、JSONを返すだけ。
  • Attaccaアーキテクチャ構成
    • Springでやってた事をplayでもやりたい。
    • AOP的な事がしたい。
    • エラーハンドリングしたい。
    • Object - JSONマッピングがしたい。
    • 入力チェックがしたい。
  • Play!でiOS開発がこんなに便利!(ステマ
    • i/f使用のドキュメントレス化
    • テストが楽
    • 等々。
  • Tips
    • Amazon EC2 Microでplay2.0が起動しない。→設定見直しで解決
    • conf/routesの定義を変更しても反映されない。→ $clean
    • ステージングモードでのバックグラウンド実行の問題
    • 負荷試験でエラー出まくった→Nettyの勉強をして対応

Play20 + Scala について


  • 自己紹介
    • Playは2系からやってます

    • Scala好き。Javaも嫌いではない。書きたくないだけ。
  • 今日の内容
    • 感想を並べました。
    • Play2.0最高!という訳ではない
    • 悪いことを多めにしゃべります。
  • 目標:Play2.0をdisりすぎない
    • Scalaが好きでplay2.0をつかてるようなもん。
  • なぜPlay2.0か
    • Scalaを使えるから。
      • (月並みな説明)
      • 記述力が高い。
      • 既存言語の弱点を改善している。
    • Scalaでのweb開発
  • 楽であることは確かだ。だがしかし…(←今日のテーマでもある)

ここから諸々のテーマに沿って、解説・指摘などを踏まえて解説が続きます。詳しくはUP済の発表資料をご覧下さい。(ここではテーマのみ抜粋)

  • Controller
  • Controller(router)
  • Controller(Form)
  • Controller(BodyParser)
  • Controller(Json)
  • Controllerの拡張1
  • Controllerの拡張2
  • Model
  • dbplugin
  • Evolutions
  • Anorm
    • Anrom以外の選択肢
      • Squeryl
      • SLICK(ScalaQuery)
      • O/R Broker
      • Scalikejdbc
  • View
    • ScalaTemplate
    • FieldConstructor
    • i18n
    • その他のテンプレートエンジン
  • まとめ
    • Play20は
      • 微妙なモジュールが多い
      • pluugableで良かった
      • 実装がてきとー:以外と適当に動いてるんだな〜と、勇気が湧いてくるw
      • Bug耐性が非常に付く。
      • スリル感:ハラハラします『落ちねぇかなぁ…』
      • 実戦不足。揉まれてない。
      • がんばりましょう。
      • それでもplay20を使う
      • Scalaですから
    • Play2.0から命を守る
    • MLを読む
    • (疑いながら)ドキュメントを読む
    • ソースを読む
    • 直せそうだったらPullRequest


こちらの資料はガッツリScala + Playな感じのエントリ。自分自身Scala勉強したて&Playも1.2ベースで勉強中の身だったのでピンと来ない部分もありましたが、Scala+Play2.0な方々には内容の濃い、かなり充実したセッションだったようです。

2.0Javaのオススメと、1.2からのアップグレード


  • 自己紹介
    • デザイントレンド、統計(R)、システム
  • まえがき:何故2.0Javaなのか?
    • 御存知無いかもしれないですが、play2.0ではJavaで開発出来る機能があります。
    • ビジネス要件にマッチ
      • 受託制作をメインにやってます
      • プレゼンの際にJavaベースで通せる
        • プログラム言語のプレゼンテーション
        • フレームワークのプレゼンテーション
        • プロジェクト自体のプレゼンテーション
      • Javaのブランドの積み重ねはすごい
      • Railsぽくスピーディに開発したい
    • コラボレーション上の選択
      • 開発者人数の圧倒的な差
      • 引き継ぎのしやすさ
    • Javaの進化により、回帰するんじゃないか説
      • Java7,Java8はモダンな仕組みも取り入れつつ良くなって行くような気も
      • Xtendとかも注目
    • 新しい事へは挑戦したいので
      • 基本のアプリは2.0javaで開発
      • Scalaは、汎用のプラグインを作る際に使用し、それをプロジェクトに導入
      • コンソール用のツールはsbtプラグイン
  • 基本編:1.2.x => 2.0.xへ
    • プロジェクト本体のフォルダ構成の変化(1.2.5 -> 2.0.x)

  • Play2.0.x本体のフォルダ構成
    • Play2.0 documentはダウンロード必須!
  • 1.2.xのEclipseプラグイン:Routes
    • ファイルが色分けされてます
    • viewもバッチリ。
    • Tools:
      • ショートカットがMVC
      • 2.0版も早く欲しい!!
  • コントローラの変更
    • アクションの返り値:1.2.x/void から 2.0.x/Result型に。
    • HTTPのプロトコルレスポンスを再現
    • 設定より規約→規約より型
    • 大幅に書き換えが必要
  • JSONの扱い
    • 1.2.x:Gson
    • 2.0.x:Jackson(ScalaではJeckson)
    • JSONを使っている場合は要修正
  • 認証周り
    • 1.2.x:SECUREモジュールで対応(標準)
    • 2.0.x:上記が標準では無くなった
    • 複数のモジュールの組み合わせで対応
  • ビューについて
    • 一番変化が激しいビュー
      • GroovyTemplate(1.2.x)→ScalaTemplate(2.0.x)
    • 全体的な修正、もしくは…
    • Play2.0でGroovyTemplate…ほぼ修正無しで行けるっぽい
  • CSRF対策
    • 1.2.x:自動
    • 2.0.x:別途対応が必要
  • プラグイン(モジュール)の違い
  • モジュールのルートに関する考え方の違い
    • 1.2.x
      • モジュールはroutesに定義
      • routesの入れ子が可能
    • 2.0.x
      • パッケージの宣言による
      • フラットにroutesを管理出来る印象
    • sbtプラグイン化が良い
    • コンソールが作りやすくなったかも
  • デプロイ方法の違い
    • 1.2.xではidを付けていたものが、2.0.xでは変更。
  • コラム:2.0.xの導入のしどころ
    • WebSocketを使用する場面
    • マルチデータベースを使用する場面
      • 1.2.xでは使えないが、2.0.xではEBeanで対応している
      • 今、1.2.5の使い処は?
        • スキルがまばらなメンバーのアプリ
        • セッションを多用するWebアプリ
        • ジョブが必要なWebアプリ
        • 認証が必要なアプリ
        • Webテストを行いたい場合
    • Play2.0 JavaScala
    • 仕事での導入は職場、案件次第
    • すると、こうなる、1.2.x
      • Controller:そのまま
      • View:Razorライク(つまりPlay2.0ライク)
      • Model:Ebean(Play2.0ライク)
      • Controllerはなるべく薄く、必要な処理は独立したJavaのクラスにしておくと移行が楽。
      • Akka:メンテされてないけど、モジュールもあるらしい。


仕事ではないものの、個人ベースで何か作ろうかなと検討していたのがPlayであり、1.2/2.0, Java/Scalaどれで行くべきか…って辺りは悩みどころでもあったので、個人的にはこちらの原さんのセッションが一番欲しかった情報であり、タメになりました!ありがとうございました。

Play2.0 + Scala での開発事例


  • 今日は大阪から来ました。
  • Play2.0を使ってプロダクトコードを使ってます。
  • 自己紹介
    • Playframework勉強会は第1回、第2回に引き続き参加。
    • フリュー株式会社、プログラマ
    • 乙女ゲーを作ってます。


  • プロジェクト構成の解説
  • 開発概要
    • 2012-02 -> 5末(4ヶ月)
    • チーム構成:6名
    • Play2.0+Scalaの開発は会社として初めて。1系は事例があるらしかったけど…
  • FW: Play2.0
    • 開発当初はPlay2.0 RC1を使っていた
    • 途中で正式リリース
    • 何度か開発途中でverup
    • 基本:コンパイルエラーとの戦い!
  • 今回開発の注意点
    • ガラケー、スマフォ同時リリース
      • ガラケーとスマフォの違いは何か?
        • 一番の力業:2つ別々に作る
        • 画面遷移をイコールにする。
        • Viewが違う ※今回は画面遷移は同じ。
    • Viewテンプレート問題
      • 標準のScalaテンプレートはコンパイルが必要
      • 制御文がガチScala
      • デザイナさんが気軽に触れない
        • デザイナさんは最初velocityを使っていた
      • Viewだけの変更にもコンパイルが必要
      • 別チームがplay-velocity-pluginなるものを作った。
        • コンパイル不要。
        • メリット:github /amazonを使ってファイルの差し替えのみでトラブルを乗り切った。
        • 近日公開予定です。
  • 所感
    • 結構最後まで文字コードに悩んだ。
    • Scalaなのでコード量は減った。 (従来のjavaコードに比べて)
    • 慣れてしまえば、ちょっとした機能追加は楽
    • 何より開発が楽しかった!


終了後の質疑応答の中では、『開発期間は4ヶ月。そのうち1ヶ月進捗無く(=教育期間)、作っては壊しな感じで進んだ。そして残りの3ヶ月でやりきった』という会話も。"何より開発が楽しかった"というフレーズは良いですね。

そして個人的には初『だいくしー』さん。TL上では色々な発言で場を賑わせていたので、実際どんな方なのかな?と思っていましたが、今回のお話を聞いて以下と同じような印象に変わりましたw

LT

ドキュメント翻訳について

Playframeworkの日本語翻訳版ドキュメントの翻訳を翻訳されていた@garbagetownさん。勿論私もこのドキュメントにはめっちゃお世話になりました!

LTでは現状解析、今後の展望等を行った後に、Playdocja 2.0系への更新をその場で行うという何ともメモリアルなアクションを実施!

playdocjaには今後ともお世話になると思いますので宜しくお願いします。m(_ _)m (※未訳箇所も多数あるとの事で、御協力をお待ちしています、という事です。)

Play2.Xドキュメント翻訳について

Play2.0の翻訳をされている@MasahitoさんによるLT。翻訳をどうやるか?の流れの説明、及び『攻めの翻訳』について。ドキュメントの注意点としては『最新版についてガンガン書いていく』方法を採っているため、『最新版なら(アプリが)動くよ』という管理方法になってるのだそうです。1.x系からの機能についての確認は1.x系のドキュメントを読むのがオススメとの事。

plugin 開発の導入

テーブルに設置されているモニターの不調で詳細な情報が見られなくなり、メモも取り逃してしまいました...(>_<;) 幸いこちらについては既にスライド資料がUPされてましたので自分も再度見直して見たいと思います。

Play1.2.X系+Scalaの話
  • @たけぞう さん

芸者東京エンターテインメント 竹下さんによるLT。『おみせやさん』というmixiアプリを構築する上での経緯や問題点等について解説。2.x系正式リリース後、非常に大量の変更(仕様変更の嵐!)があり、現状はPlay12系で行く事にしているそうです。

Play20-auth

Play2.0アプリに認証認可の仕組みを提供するライブラリの解説。Scala限定のライブラリで『ステートフル』な対応(※セキュリティのため)を行う仕様となってますが、設定でステートレスにも出来るそうです。詳細な情報はこちらを参照。

おしべめしべシステムからplayをはじめよう

最初の自己紹介で、会場がざわついてました(笑) この名前はインパクトあり過ぎますw

中身はHerokuとEC2を使ったシステムのお話。最近は以下のSNSで主に活動されているそうです。

そして何故か、このLTの時だけ画面もプリプリな感じに。よ、読めない…(^_^;)(笑)

懇親会

内容盛り沢山の講演・LTを終えて、そのまま同会場内で懇親会へ。

前半はアジャイルサムライ読書会 横浜道場の方々と談笑、中盤はItsuki KURODA (TwitterID:@i2key)さんの講演や仕事に纏わるお話を、そして終盤にはKazuhiro Hara(TwitterID:@kara_d)さんに同じく講演の内容に続くお話を色々伺う事が出来ました。(※やはり個人的には1.2.x系/Javaで作りつつ、様子を見て2.x系、もしくはScalaに移っていく、という形を取ろうかなぁと思った次第です)


今現在興味のあるフレームワークの勉強会と言うことで、参加前から楽しみにしていた節もあったのですが想像以上に中身が濃く、得るものが多い勉強会でした!

主催者のTakafumi Ikeda(TwitterID:@ikeike443)さん、各講演・LTで発表頂いた皆さん、会場御提供頂いたメディアテクノロジーラボ様及び関係者の皆様、そして当日参加された皆さん、ありがとうございました!


その他関連: