Play Framework

Play Framework（プレイ・フレームワーク）は、ScalaとJava言語で書かれたオープンソースのWebアプリケーションフレームワークである。Model View Controller (MVC) アーキテクチャを採用しており、設定より規約やホットリローディング、エラーのブラウザ上への表示といった方針により、開発者の生産性を上げることを目的としている。Playing with Play Framework for Java

Scala言語のサポートはバージョン1.1より行われていたがNicolas Leroux at Devoxx、バージョン2.0ではフレームワークのコア自体がScalaにより書き直されている。ビルドとデプロイメントにもScalaベースのビルドツールであるsbtが使用されており、テンプレートエンジンも以前のGroovyの代わりにScalaが採用されている。

 歴史 
Play FrameworkはZenexity社のソフトウェア開発者であるGuillaume Bortにより作成されたguillaume bort ★ software designer。しかしこの初期のリリースは外部には公開されておらず、インターネット上で確認できる最も古い情報は2007年5月のものであるplay-framework | Google Group。2007年になり、プレリリースバージョンが初めてZenexity社のサイトにて公開されたPlay!。

翌2008年5月になって、バージョン1.0の元となるコードがLaunchpadにて公開された~play-developers/play/1.0 : revision 1 1.0が完全にリリースされるのは、2009年10月のことであるPlay framework - downloads。

その後LaunchpadからGitHubへの移行を経て、2010年11月にPlay 1.1がリリースされた。1.1ではコンポーネントがからへと変更されており、またScala言語のサポートや、GlassFishコンテナへの対応、非同期Webサービスライブラリ、OAuth認証、HTTPSのサポートなどが行われたPlay 1.1 -- Release notes。

2011年4月にリリースされたPlay 1.2では、依存性管理ツールであるが組み込まれるとともに、WebSocketのサポートや、DBマイグレーションの統合（ただしリバージョンは未対応Community Contributed Extensions）、H2 Databaseへの変更などが行われたPlay 1.2 -- Release notes。

2011年後半にはPlay 2.0の開発に向けSadek Drobiが加わっている。2012年3月13日にリリースされた2.0Play 2.0 -- Philosophyでは、Scalaの開発環境であるTypesafe Stackと結びついているhttp://blog.typesafe.com/introducing-typesafe-stack-20。

2013年2月6日にリリースされたPlay 2.1では、Scalaが2.10へとアップデートされるとともに、モジュール化や新しいJSON API、フィルタ、それにRequireJSがサポートされたhttp://www.playframework.com/documentation/2.1.0/Highlights。

2013年9月20日にリリースされたPlay 2.2では、sbtが0.13にアップデートされるとともに、バッファリングやgzip圧縮、それにいくつかのプラットフォーム用のパッケージングタスク（OS X (DMG), Linux (RPM, deb), Windows (MSI) など）がサポートされた。

2021年10月20日、それまで中心的に開発していた Lightbend 社が Play Framework の開発から撤退すると発表したOn the future of Play Framework | Lightbend。

2023年10月25日、Play Framework 3.0.0がリリースされた。Play Frameworkは2.xまではLightbendが開発していたAkkaを使用していたが、Akkaが2022年9月よりオープンソースでは無くなったため、AkkaからフォークしたオープンソースのApache Pekkoに切り替わった。

 特徴 
Play Frameworkは、Ruby on RailsとDjangoから大きな影響を受けた、これらと似た同種のフレームワークである。PlayのWebアプリケーションはJava環境で動作するが、Java標準のWebアプリケーション仕様であるJakarta EEの中核機能は必要としない。PlayはJakarta EEの仕様に準拠しないが、その代わりにJakarta EE準拠のプラットフォームと比較してシンプルに開発を行うことができるPlay! Framework Usability。

Play Frameworkのアプリケーションは組み込みの Webサーバーを使用して実行するよう設計されている。しかし、開発したアプリケーションをWARパッケージにまとめ、Jakarta EEのアプリケーションサーバで動作させることも可能であるPlay Framework on JBoss AS 7。

 他のフレームワークとの比較 
他のJavaフレームワークと比べると、以下のような特徴を持つ
 ステートレス: Play 2は完全にRESTfulである。Jakarta EEのように接続ごとのセッションを利用しない。
 自動テストの統合: JUnit, Seleniumのサポートを含む。
 主に必要とされるAPIは標準で組み込まれている。
 静的メソッド: コントローラの全ての開始点はstatic（Scalaの場合はfunction）として宣言する。ただしPlay 2.1以降はそれ以外の形式もサポートされている。
 非同期IO: WebサーバーとしてNettyを使用することから、Playは非同期的に大きなリクエストを処理できる。この結果、HTTPスレッド数以上の処理を実行することができる。Jakarta EEでは、Servlet 3.0までこうした非同期処理はサポートされていなかったPlay framework and async I/O。
 モジュラー構造: RailsやDjangoのように、Playはモジュール構造を採用している。
 Scala言語のサポート: Play 2は内部的にScalaを使用しており、ScalaのAPIとJavaのAPI双方を公開している。Javaとも完全な互換性がある。

 コンポーネント 
Play 2.0はいくつかのJavaの一般的なライブラリを使用している。
 : Webサーバー
 Anorm (Scala), Ebean (Java): データベースアクセス。ただしO/Rマッピングは必須ではない。
 Scala: テンプレートエンジン
 組み込みのホットリローディング
 sbt: 依存性管理

Play Frameworkには以下のような機能が含まれている。
 RESTフレームワーク。
 CRUD: モデルオブジェクトをシンプルに更新するためのモジュール。
 Secure: 単純なユーザー認証を実現するモジュール。
 アノテーションを元としたバリデーションフレームワーク。
 ジョブスケジューラ。
 簡単に使用できるSMTPメーラー。
 JSONとXMLの解析。
 JPAを元とした永続化層。
 素早いデプロイメント/テストのための組み込みDB。
 完全に組み込まれたテスティングフレームワーク。
 自動的なファイルアップロード機能。
 複数環境向けの設定。
 機能を簡単に追加するためのモジュラー構造。
 OpenIDとWebサービスのクライアント。

 導入事例 
Play Frameworkのメーリングリストには9,000名を超える購読者が登録されているPlay's Google Group。Playは地方政府や企業のイントラネット、モバイル向けWebサイトやOSSといった幅広いプロジェクトで使用されている。

2013年10月現在、Play FrameworkはGitHubにおける最も人気のあるScalaプロジェクトとなっている。

また、いくつかの著名なWebサイトがPlay Frameworkを使用していることを明らかにしているTestimonials。
 LinkedIn: ビジネス特化型SNS。
 Coursera: オンライン学習http://betacs.pro/blog/2013/08/03/deploying-play-apps/。
 http://www.scalacourses.com/ : オンライン学習。
 GENDI: GS1メンバー。

 セーヌ＝エ＝マルヌ県: フランスの地方自治体。
 Typesafe: Scalaの開発元Typesafe社のサイトTypesafe。
 http://live.gilt.com : ライブショッピング。
 http://process.st : SME市場のためのSaaS BPM製品。
 Sync Video: オンラインビデオ視聴のためのサービス。
 Prenser: ニュースメディアネットワーク。
 PeachDish: 食料品Eコマース。

2010年12月には、Play Frameworkを扱った初の電子書籍がリリースされたIntroducing the Play! Framework。この書籍は後に紙媒体でも刊行されている。2011年8月には2冊目の書籍も刊行されているPlay Framework Cookbook。

2011年8月、クラウドコンピューティングプラットフォームのHerokuはPlayのアプリケーションをネイティブサポートすることを発表したPlay! on Heroku。これはGoogle App EngineにおけるPlay 1.0（Play 2.xではない）のモジュールベースでのサポート、Amazon Web Servicesでのドキュメントによるサポートに続くものであったJava development 2.0: Play-ing with Amazon RDS。

2013年7月には クラウドコンピューティングプラットフォームのも、Play 2を同環境で使用するためのチュートリアルを公開しているPlay 2 Framework on Jelastic。

 脚注 

 外部リンク 

Play Framework公式サイト 

Category:Javaプラットフォーム
Category:ウェブアプリケーションフレームワーク
Category:オープンソースソフトウェア
Category:2009年のソフトウェア
Category:Javaでプログラムされた自由ソフトウェア
Category:Scalaでプログラムされた自由ソフトウェア