The State of Symfony2参加レポート - Symfony2が大変なことになっています!
本日、The State of Symfony2オンラインカンファレンスが開催されました。 カンファレンスで使われたスライド資料や、Symfony2の新しいリリースは、後日公開されるのではないかと思いますが、 まずはカンファレンスのセッションの概要をがレポートいたします。
なぜ大変なことになっているのかは、最後のセッションの内容を参照ください。
※さんによるレポートも合わせてご参照ください。
各セッションのスライドは、こちらのスライド一覧をご参照ください。
セッションリスト
以下のセッションが行われました。
- News of the Symfony2 world (Fabien Potencier)
- Symfony 2 meets Propel 1.5 (Francois Zaninotto)
- Symfony and Doctrine (Jonathan Wage)
- Unit & Functional Tests (Fabien Potencier)
- The new form framework (Bernhard Schussek)
- Caching on the Edge (Fabien Potencier)
以下、セッションごとに簡単に内容を紹介します。
1. News of the Symfony2 world (Fabien Potencier)
Symfony 2の哲学
Be as easy as possible for newcomers and as flexible as possible for advanced users
コーディング規約など、より標準的なものに統一
Symfony2の構成要素である、Symfony ComponentsとSymfony Frameworkについて。 Symfony Componentsはそれぞれ単独で利用可能なコンポーネントで、CssSelector、DomCrawler、Browser、Finderなどがあります。 Frameworkには例えばHttpKernelなどがあって、テストやプロファイリング(Webデバッグツールバーなど)をサポートします。
(感想) このセッションの内容は、これまでに公開されたコンポーネントのおさらいでしたので、特に目新しい内容はありませんでした。 [hidenorigoto]
2. Symfony2 meets Propel 1.5 (Francois Zaninotto)
Propel 1.5について。 Propel 1.5は、symfony 1.xにも対応している。Propel 1.3/1.4と互換。 IDEフレンドリー(補完などが行われやすい)
Propel 1.5でのいくつかの新機能
- Model Query (Doctrineライクなクエリー)
- Collectionのサポート
- Many-to-Manyリレーションのサポート
- NestedSetのサポート
- Concrete Table Inheritanceのサポート
- One-to-many joined hydration(1対多リレーションをJOINしたクエリーのハイドレーションサポート)・・・1.5.1
- ModelQuery::findOneOrCreate()・・・1.5.2
- aggregate_column(1対多リレーションしている子のカウントを親の特定フィールドに自動セット)・・・1.5.2
Doctrine 2と比較して
- モデルのコードはsymfony 1.x互換
- キャッシュしなくても高速
- ActiveRecord(Doctrine 2はActiveRecordではなくなる)
- 現時点ですでに多くの利用実績があり、stable
(感想) Criteriaを使わず、Doctrineライクなクエリーの記述が可能になるなど、Propelもかなり進化している印象を受けました。 また、symfony 1.xでのノウハウがそのままSymfony2でも使えそうなのも魅力的に感じました。 [hidenorigoto]
3. Symfony and Doctrine (Jonathan Wage)
Doctrine 2について。 DBALとORM(およびODM)に分離された。
ORM
EntityManagerが1データベース接続あたり1つ作られ、EntityManagerにより、PHP Object(POPO)がORMにマップされる。 つまり、各エンティティはピュアなPHPクラス(どのクラスも継承していない)
コンソールコマンドがさらに整備されて、開発時のワークフローを支援。
コード例:
$em = $this->getEntityManager(); $user = new User(); $user->setName('Jonathan H. Wage'); $em->persist($user); $em->flush();
開発中にスキーマを変更した場合、console doctrine:schema:update コマンドで、スキーマ変更の差分だけをDBに反映させることが可能。 スキーマのバージョニング(マイグレーションクラス)のサポートなど。
DBAL
DBALから、生SQLの発行などを行える。 DBALコマンドで、コマンドラインからSQLを発行。
MongoDB
DoctrineMongoDBBundle。 Document Query Languageを使って、これまでのDoctrineとほぼ同じ方法で、MongoDBのドキュメントを操作できる。
パフォーマンス
Symfony2においてPropel 1.5と比較した場合、ほぼ同等だと思われる(ケースバイケース)。 バッチINSERTのような処理では、Doctrine 2の方が速い。
(感想) Doctrine 2は、Doctrine 1とは違ったアーキテクチャになり、それぞれのエンティティがピュアなPHPクラスになります。 各エンティティのアクセサメソッドもこれまでのマジックメソッド方式ではなくなるなど、 レコードオブジェクトの操作が内部的に軽くなるように作られている印象を受けました。 [hidenorigoto]
4. Unit & Functional Tests (Fabien Potencier)
Symfony2のUnitテスト、Functionalテストについて。
symfony 1.xのlimeから、より標準的なテストフレームワークであるPHPUnitに変更。
Functionalテスト:
× controllerをUnitテストする → ○ リクエストに対するレスポンスをテストする
テスト自体のプロセスと、テストからリクエストされる処理のプロセスは別(Forkされる)
(感想) Symfony2では、Symfony Componentsに含まれるCssSelector/Crawler/Browserをフル活用して、リンククリックやフォーム送信のテストを記述します。 symfony 1.xでもこれらは可能でしたが、テストのプロセス内でリクエストのプロセスも処理されていました。 これまでよりも、より多岐に渡るテストをSymfony内で記述できるようになる印象を受けました。 [hidenorigoto]
5. The new form framework (Bernhard Schussek)
Symfony2にバンドルされる新しいフォームフレームワークについて。
symfony 1.xに組み込まれているsfFormが、Symfony2では新しいフォームフレームワークに置き換えられます。
- フォームのデータを表すピュアなPHPオブジェクト(POPO)= Domain Model
- フォームおよびフィールド
- フィールドは、「フィールドグループ」などをサポート
- バリデーター
- バリデーションをDomain Model内にアノテーションとして記述可能
(感想) symfony 1.xの鬼門の1つであるsfFormから、Symfony2では新しいフォームフレームワークに置き換えられるようです。 アノテーションによるバリデーションの記述、ドメインモデルをそのまま使える等、(独立して使えるという触れ込みの割には)symfonyと密に結びついていたsfFormと比べると、シンプルな構成で扱いやすくなる印象を受けました。 [hidenorigoto]
6. Caching on the Edge (Fabien Potencier)
このセッションが、事前に「Killer Feature of Symfony2」と言われていたものの紹介です。
スライドの最初の方ででてきた簡単なベンチマーク - 「Symfony2は、symfony 1.xの5倍高速」
さらにその後のベンチマークでより複雑で同時接続数の多いケースの場合、「Symfony2は、symfony 1.xの約80倍高速!!!」
この高速化を担当しているのが、Symfony2 HTTP Proxy(HTTPアクセラレーターと呼ばれていました)で、 これまでのsymfony 1.xと比較してより厳密にHTTPプロトコル、特にキャッシュに関するヘッダを扱うことで、高負荷時のパフォーマンスも 大幅に向上させているようです。 さらに、このSymfony2 HTTP Proxyは「Edge Side Include」というHTTP仕様を実装しており、1つのページ内のパーツごとに異なるキャッシュ時間の制御などを行えるようになるようです。
参考:HTTP/1.1, part 6: Caching draft-ietf-httpbis-p6-cache-09
(感想) このセッション、Symfony2のkiller featureの紹介ということで期待していたのですが、良い意味で期待を大幅に裏切られる、すごいものが出てきたと感じました。 Edge Side Includeを使うと、もしかすると今よりもさらに各アクションの処理内容を簡潔に記述できるようになるかもしれない。 しかもパフォーマンスもこれまで以上とあれば、どんどん夢が広がります。 この機能を知って、私は俄然Symfony2をすぐにでも使いたくなってしまいました。 [hidenorigoto]
インデックス
Document Index
- The State of Symfony2参加レポート - Symfony2が大変なことになっています!
関連ページリスト
Related Pages
- 日経ソフトウェア7月号にsymfonyの特集記事が掲載されました
- A week of symfony #178 (24->30 May 2010)
- symfony 1.3.5 と 1.4.5
- The State of Symfony2 オンラインカンファレンス
- 第1回 Symfonyユーザー会IRC集会を開催しました
- A week of symfony #179 (31 May -> 6 June 2010)
- A week of symfony #180 (7->13 June 2010)
- 第2回 Symfonyユーザー会IRC集会を開催しました
- The State of Symfony2参加レポート - Symfony2が大変なことになっています!
- A week of symfony #181 (14->20 June 2010)
- The State of Symfony2参加レポート - Symfony2はすごい!
- The State of Symfony2カンファレンスのスライド
- A week of symfony #182 (21->27 June 2010)
- セキュリティー リリース: symfony 1.3.6 と 1.4.6
- 第3回 Symfonyユーザー会IRC集会を開催しました
- A week of symfony #183 (28 June -> 4 July 2010)
- A week of symfony #184 (5->11 July 2010)
- 第4回 Symfonyユーザー会IRC集会を開催しました
- A week of symfony #185 (12->18 July 2010)
- A week of symfony #186 (19->25 July 2010)
- ドキュメント翻訳温泉ツアーを開催しました(7/31~8/1)
- A week of symfony #187 (26 July -> 1 August 2010)
- 第5回 Symfonyユーザー会IRC集会を開催しました
- OSC Nagoya 2010にてブース出展&セミナーを行いました(8/7)
- A week of symfony #188 (2->8 August 2010)
- A week of symfony #189 (9->15 August 2010)
- 第6回 Symfonyユーザー会IRC集会を開催しました
- A week of symfony #190 (16->22 August 2010)
- A week of symfony #191 (23->29 August 2010)
- A week of symfony #192 (30 August -> 5 September 2010)
- A week of symfony #193 (6->12 September 2010)
- Symfony2 PR3 リリース; 手を貸してください
- A week of symfony #194 (13->19 September 2010)
- 第8回 Symfonyユーザー会IRC集会を開催しました
- A week of symfony #195 (20->26 September 2010)
- PHP Matsuri 2010 参加レポート(Symfony 編)
- A week of symfony #196 (27 September -> 3 October 2010)
- 第9回 Symfonyユーザー会IRC集会を開催しました
- A week of symfony #197 (4->10 October 2010)
- A week of symfony #198 (11->17 October 2010)
- 第10回 Symfonyユーザー会IRC集会を開催しました
- A week of symfony #199 (18->24 October 2010)
- A week of symfony #200 (25->31 October 2010)
- 第11回 Symfonyユーザー会IRC集会を開催しました
- A week of symfony #201 (1->7 November 2010)
- A week of symfony #202 (8->14 November 2010)
- A week of symfony #203 (15->21 November 2010)
- A week of symfony #204 (22->28 November 2010)
- 第 12 回 Symfony ユーザー会 IRC 集会を開催しました
- Symfony アドベントカレンダー 2010 (Japanese) が始まります
- Symfony2 PR4(プレビューリリース 4)がリリースされました
- A week of symfony #205 (29->5 November 2010)
- 第 13 回 Symfony ユーザー会 IRC 集会を開催しました
- A week of symfony #206 (6->12 December 2010)
- A week of symfony #207 (13->19 December 2010)
- A week of symfony #208 (20->26 December 2010)
- A week of symfony #209 (27 December 2010 -> 2 January 2011)
- A week of symfony #210 (3->9 January 2011)
- Symfony2への寄付にご協力ください!
- 第2回 Symfony2勉強会 参考情報
- 第2回 Symfony2 勉強会レポート
- A week of symfony #214 (31 January -> 6 February 2011)
- 第3回 Symfony2勉強会(名古屋)を開催しました
- A week of symfony #211 (10->16 January 2011)
- A week of symfony #212 (17->23 January 2011)
- A week of symfony #213 (24->30 January 2011)
- A week of symfony #215 (7->13 February 2011)
- symfony 1.3.9 と 1.4.9
- A week of symfony #216 (14->20 February 2011)
- A week of symfony #217 (21->27 February 2011)
- A week of symfony #218 (28 February -> 6 March 2011)
- A week of symfony #219 (7->13 March 2011)
- symfony 1.3.10 と 1.4.10: セキュリティリリース
- A week of symfony #220 (14->20 March 2011)
- Symfony2 の最終バージョンまで... もう少しかかります
- PHPカンファレンス関西レポート(日本Symfonyユーザー会編)
- A week of symfony #221 (21->27 March 2011)
- A week of symfony #223 (4->10 April 2011)
- A week of symfony #224 (11->17 April 2011)
- Symfony2: よりかんたんになりました
- Symfony2: Beta1 がリリースされました
- A week of symfony #225 (18->24 April 2011)
- A week of symfony #226 (25 April -> 1 May 2011)
- Symfony2: よりかんたんになりました (パート 2)
- Symfony2: よりかんたんになりました (パート 3)
- A week of symfony #227 (2->8 May 2011)
- A week of symfony #228 (9->15 May 2011)
- A week of symfony #229 (16->22 May 2011)
- Symfony2: アノテーションが改善されました
- Symfony2: beta2 がリリースされました
- Symfony2: beta3 が利用できるようになりました
- 海外のスライドで紹介された PHP ディベロッパ向けの学習書籍
- Symfony2: Beta4 が利用できるようになりました
- A week of symfony #232 (6->12 June 2011)
- Symfony2: Beta5 が利用できるようになりました
- A week of symfony #233 (13->19 June 2011)
- A week of symfony #234 (20->26 June 2011)
- A week of symfony #235 (27 June -> 3 July 2011)
- A week of symfony #236 (4->10 July 2011)
- A week of symfony #237 (11->17 July 2011)
- A week of symfony #238 (18->24 July 2011)
- A week of symfony #239 (25->31 July 2011)
- オープンソースカンファレンス2011名古屋(8/20)用チュートリアルの公開
- 第1回 Symfony2 勉強会レポート
- 第 13 回 Symfony ユーザー会 IRC 集会を開催しました
- Symfony 2.1: Doctrine 関係のバンドルが Doctrine グループへ移管されました
- [Doctrine] Symfony 向けバンドルが Doctrine グループへ移管されました
- Symfony 2.1.0 beta1 がリリースされました
- Symfony スタンダード・エディション
- Symfony勉強会 #6 レポート
- Symfony 2.3.0 - 最初のLTS(長期サポート) - がリリースされました
- A week of symfony #230 (23->29 May 2011)
- A week of symfony #231 (30 May -> 5 June 2011)
- A week of symfony #246 (12->18 September 2011)
- A week of symfony #247 (19->25 September 2011)
- A week of symfony #248 (26 September -> 2 October 2011)
- A week of symfony #249 (3->9 October 2011)
- A week of symfony #250 (10->16 October 2011)
- A week of symfony #251 (17->23 October 2011)
- A week of symfony #252 (24->30 October 2011)
- A week of symfony #253 (31 October -> 6 November 2011)
- A week of symfony #254 (7->13 November 2011)
- A week of symfony #255 (14->20 November 2011)
- A week of symfony #261 (26 December 2011 -> 1 January 2012)
- SymfonyアドベントカレンダーJP 2011
日本語ドキュメント
Japanese Documents
- 2012/07/04 Dia 17: Busca
- 2012/06/26 Giorno 15: Web Service
- 2012/06/26 Giorno 3: Il ~Modello dei dati~
- 2012/06/26 Day 15: Web Services
- 2012/06/26 Dia 3: O Modelo de Dados