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

Play Framework
開発元 コミュニティ(2021年10月20日までLightbendだった)
初版 2007年 (2007)
最新版
3.0.0 / 2023年10月25日 (2023-10-25)[1]
リポジトリ ウィキデータを編集
プログラミング
言語
Scala
サポート状況 開発中
種別 Webアプリケーションフレームワーク
ライセンス Apache License
公式サイト www.playframework.com
テンプレートを表示

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

歴史 編集

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

2008年5月になって、バージョン1.0の元となるコードがLaunchpadにて公開された[7] 1.0が完全にリリースされるのは、2009年10月のことである[8]

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

2011年4月にリリースされたPlay 1.2では、依存性管理ツールであるApache Ivy英語版が組み込まれるとともに、WebSocketのサポートや、DBマイグレーションの統合(ただしリバージョンは未対応[10])、H2 Databaseへの変更などが行われた[11]

2011年後半にはPlay 2.0の開発に向けSadek Drobiが加わっている。2012年3月13日にリリースされた2.0[12]では、Scalaの開発環境であるTypesafe Stackと結びついている[13]

2013年2月6日にリリースされたPlay 2.1では、Scalaが2.10へとアップデートされるとともに、モジュール化や新しいJSON API、フィルタ、それにRequireJSがサポートされた[14]

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

2021年10月20日、それまで中心的に開発していた Lightbend 社が Play Framework の開発から撤退すると発表した[15]

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

特徴 編集

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

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

他のフレームワークとの比較 編集

他の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までこうした非同期処理はサポートされていなかった[19]
  • モジュラー構造: RailsやDjangoのように、Playはモジュール構造を採用している。
  • Scala言語のサポート: Play 2は内部的にScalaを使用しており、ScalaのAPIとJavaのAPI双方を公開している。Javaとも完全な互換性がある。

コンポーネント 編集

Play 2.0はいくつかのJavaの一般的なライブラリを使用している。

Play Frameworkには以下のような機能が含まれている。

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

導入事例 編集

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

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

また、いくつかの著名なWebサイトがPlay Frameworkを使用していることを明らかにしている[22]

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

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

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

脚注 編集

外部リンク 編集