40
symfony 開開開開開開開 + symfony 1.3 開開開開開開開開 Kousuke Ebihara <[email protected]>

Introduction of symfony development process & What's symfony 1.3?

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Introduction of symfony development process & What's symfony 1.3?

symfony 開発見学ツアー+

symfony 1.3 ってなんなんだーKousuke Ebihara

<[email protected]>

Page 2: Introduction of symfony development process & What's symfony 1.3?

仕事が忙しいと「なんなんだー」の発表でお茶を濁すことに定評のある海老原です。

Page 3: Introduction of symfony development process & What's symfony 1.3?

本日のテーマ 身近な OSS 、 symfony の開発プロセ

スを見学してみる(全員向け) symfony 開発の基本背景の紹介 symfony 1.3 開発の課程を紹介 氷山の一角が見えはじめた Symfony 2 につ

いて軽く触れてみる symfony 1.3 のトピックを知り、少なく

とも心だけは準備をしておく( OpenPNE3 系プログラマ向け)

Page 4: Introduction of symfony development process & What's symfony 1.3?

symfony 開発見学ツアー

Page 5: Introduction of symfony development process & What's symfony 1.3?

symfony って? Sensio Labs の CEO 、 Fabien

Potencier 氏が作った PHP フレームワーク

顧客の要求駆動でしか機能を付け加えないというポリシー

明確なメンテナンス期間の提示

Page 6: Introduction of symfony development process & What's symfony 1.3?

symfony の各バージョン http://www.symfony-project.org/installation で、

各バージョンの違いが明確に説明されている

Page 7: Introduction of symfony development process & What's symfony 1.3?

symfony の各バージョン symfony 1.0 : 2007 年から 2010 年の 3 年間バグ修正

が続けられる旧安定版 symfony 1.1 : 1.2 への移行準備用のバージョン。

PHP 5.1 以前で動く最終バージョン。 2009 年 6 月までの 1 年間保守がおこなわれた。セキュリティフィックスは 2010 年まで。

symfony 1.2 : フォームフレームワークや Propel 1.3 へのバージョンアップ、 Doctrine のサポートなど、 1.0 との差異が大きい。このバージョン以降、 1.x は PHP 5.2 以上必須に。

symfony 1.3 : 1.2 との互換性を意識した機能改善バージョン。デフォルトの ORM が Propel から Doctrine になる。現在開発中。

Page 8: Introduction of symfony development process & What's symfony 1.3?

symfony プラグイン http://www.symfony-project.org/plugi

ns/ The plugin section lists 640 symfony

plugins developed by 279 contributors.

Page 9: Introduction of symfony development process & What's symfony 1.3?

symfony プラグインhttp://www.symfony-project.org/plugins/sfFormExtraPlugin

プラグインの個別のページには、

•プラグインの概要• 対応バージョン• ライセンス情報• 開発者情報• バグ作成チケットへのリンク

•Readme•ダウンロード可能なパッケージ一覧•チェンジログ•参加方法の案内

が示されている

Page 10: Introduction of symfony development process & What's symfony 1.3?

symfony のドキュメント http://www.symfony-project.org/doc/1

_2/ Practical symfony - Jobeet tutorial

1 日 1 時間、 24 日間で symfony 1.2 を使ってサイトを作成するチュートリアル

ブログに連載されたもの The Definitive Guide to symfony

500 ページ近くあるリファレンス symfony Forms in Action

symfony 1.1 の新機能、フォームフレームワークに関するリファレンス

1, 2, 3, 4, 8, 11 章までできあがっている

Page 11: Introduction of symfony development process & What's symfony 1.3?

symfony のドキュメント http://www.symfony-project.org/doc/1

_2/ symfony and Doctrine

Symfony で Doctrine を使用するときのリファレンス

7 章まである The Cookbook

Tips 集 (28 個 ) The API Documentation

API ドキュメント

Page 12: Introduction of symfony development process & What's symfony 1.3?

symfony のチュートリアル http://www.symfony-project.org/doc/1

_2/ Getting Started

symfony のセットアップまでのチュートリアル 最近できた

What's new? チュートリアル……?

My First Project モデルから自動生成したモジュールに味付けをし

ていく感じで進めていくチュートリアル

Page 13: Introduction of symfony development process & What's symfony 1.3?

symfony のコミュニティhttp://www.symfony-project.org/communityで、コミュニティの動向が追える

メーリングリスト symfony-users symfony-devs

Wiki 更新履歴 フォーラム更新履歴 Snippets 更新履歴 symfony について言及しているブログのフィード

Page 14: Introduction of symfony development process & What's symfony 1.3?

symfony のコミュニティ Wiki

http://trac.symfony-project.org/wiki This is the symfony community wiki. It

contains user-contributed documentation, tutorials and resources.

http://trac.symfony-project.org/wiki#FAQandHowtos

HowTo や提案などがよくポストされている

Page 15: Introduction of symfony development process & What's symfony 1.3?

symfony のコミュニティ Snippets

http://snippets.symfony-project.org/ ユーザが投稿した Tips 集 コメントがつけられる

たまにコアチームの人々が「これいいねえ」とか「こんなことしなくてもこうすればいいじゃん」とか言っているのを見かける

Page 16: Introduction of symfony development process & What's symfony 1.3?

symfony のコミュニティ コミュニティを巻き込んだイベントが催さ

れることがある User voice (後述) 1 day = 1 ticket (後述) Askeet チュートリアル連載中の機能提案 Jobeet チュートリアル連載中のデザインコン

テスト symfony キャンプ( symfony1.1 のトレーニ

ング) プラグイン開発者の日

Page 17: Introduction of symfony development process & What's symfony 1.3?

symfony 1.3 開発の流れ フェーズ 1: Feature brainstorming

user voice ページから投票を受け付け、コアチームはそれを参考に新機能を決定するhttp://symfony.uservoice.com/pages/symfony

フェーズ 2: Development フェーズ 3: Release process

機能開発をやめ、 1.3 のリリースに向けてバグを直していく

http://www.symfony-project.org/blog/2009/01/25/about-symfony-1-3 より

Page 18: Introduction of symfony development process & What's symfony 1.3?

1 day = 1 ticket

一日のわずかな時間で、コントリビュータにチケットを消化してもらうイベント ドキュメントの改善や、リリースサイクルの改

善、自動テストのカバレッジ向上と、バグを直していくことでコアチームが機能開発に専念できるようにすることが目的

毎月 3 人を表彰(景品が貰える) symfony 本だったり Doctrine 本だったり

Amazon のギフト券だったり PHP の T シャツだったり

http://www.symfony-project.org/blog/2009/07/01/symfony-community-event-1-day-1-ticket より

Page 19: Introduction of symfony development process & What's symfony 1.3?

Symfony Components

Page 20: Introduction of symfony development process & What's symfony 1.3?

Symfony Components

Symfony 2 ではフレームワークを支える部品を Symfony とは独立して利用できるようにする

現時点でリリース可能なコンポーネントを本体に先駆けてリリースしている

それぞれのコンポーネントは、充分すぎるほどのドキュメントとテストと一緒にリリースされている

詳細は http://components.symfony-project.org/

Page 21: Introduction of symfony development process & What's symfony 1.3?

symfony 1.3 ってなんなんだー

Page 22: Introduction of symfony development process & What's symfony 1.3?

dev 環境では新しくクラスを追加しても symfony cc をしなくてよくなった

symfony のオートローディングで見つけられなかったクラスは、 sfAutoloadAgain という新しい機構によりもう一度オートロードし直して見つけてくれる

dev 環境では設定ファイルの変更も即座に反映されるので、開発時に symfony cc し忘れてハマるのはルーティングルールの変更時だけになる?(といいね)

Page 23: Introduction of symfony development process & What's symfony 1.3?

generate:app タスクのセキュリティ対策オプションがデフォルト

ON に いままでは escaping_strategy と

csrf_secret を generate:app タスク実行時に指定しなければ、 XSS と CSRF に対する防御ができなかった OpenPNE3 は最初から escaping_strategy

は設定していたが、 csrf_secret が OFF になっていたのは年末まで気づかなかった。危なかった

Page 24: Introduction of symfony development process & What's symfony 1.3?

フォームウィジェットのラベルから _id が消える

自動生成されたフォームは、テーブルのフィールド名に応じて、各ウィジェットのラベル名が自動的に付加される

1.3 からは他テーブルとのリレーションに用いられる ****_id のラベルから _id が取り除かれる

Page 25: Introduction of symfony development process & What's symfony 1.3?

フォームウィジェットのラベルから _id が消える

sf 1.2 sf 1.3

Page 26: Introduction of symfony development process & What's symfony 1.3?

使用するフォームフィールドが簡単に指定できるようになった

sfForm::useFields() が追加された configure() メソッド内で以下のように記述

$this->useFields(array('title', 'body', ‘file’)); 今までは、使用しないフォームフィールドを

unset($this[‘id’], $this[‘member_id’], …);とかしていく必要があった

この方法だと、モデル側でカラム追加があった場合に、フォームの更新が漏れていると意図しないフォームフィールド(フォームから入力させるべきでない項目など) が表示される場合があった

実際 Doctrine 化のついでに Timestampable を全モデル適用したときに困ったことになった

Page 27: Introduction of symfony development process & What's symfony 1.3?

フォーム系クラスの親子関係が変わった

sf1.2

{Model}Form

Base{Model}Form

BaseFormDoctrine

sfFormDoctrine

sfForm

※矢印は   だと思ってください><

Page 28: Introduction of symfony development process & What's symfony 1.3?

フォーム系クラスの親子関係が変わった

sf1.3

{Model}Form

Base{Model}Form

BaseFormDoctrine

sfFormDoctrine

sfFormObject

※矢印は   だと思ってください><

BaseForm

sfFormSymfony

sfForm

← ?

← プロジェクトに特化したフォームクラス

← symfony に特化したフォームクラス (イベント通知をおこなう)

← symfony に特化しないフォームクラス ( sf1.1 からだけど)

Page 29: Introduction of symfony development process & What's symfony 1.3?

フォームが( sfFormSymfony が)新たなイベントを通知

form.post_configure コンストラクタ内で呼ばれる

( sfForm::__construct() をコールした直後) form.filter_values

sfForm::doBind() へのバインド前に値の前処理を書ける form.validation_error

sfForm::doBind() でのバリデーションでエラーになったら呼ばれる

form.method_not_found

そういえば川原君が「フォームクラスに Doctrine のビヘイビアみたいな機構がほしい」とかぼやいていた気がする(ニヤニヤ)

Page 30: Introduction of symfony development process & What's symfony 1.3?

テストが諸々改善される --only-failed を指定すると、前回失敗し

たテストのみ再テストする レスポンスが指定した正規表現にマッチ

ングするかどうかテストできるようになった 携帯用 HTML など、 XML として適切でない文書でもより正しくテストできるように

ProjectConfiguration で設定することで、特定のプラグインのテストを test:* タスクから実行できるようになった

Page 31: Introduction of symfony development process & What's symfony 1.3?

generate:project 時にインストーラスクリプトを指定できるようになった

--installer オプションを指定することで、タスクのコンテキストで任意の PHP スクリプトが実行できるようになった ので、他のタスクを呼んだりとかできる openpne:install をなくせるかも

何も指定しなくても、 ORM 用プラグインのインストール用スクリプトは自動実行される

Page 32: Introduction of symfony development process & What's symfony 1.3?

generate:project 時にインストーラスクリプトを指定できるようになった

コマンド

実行結果

/home/co3k/ube.php

Page 33: Introduction of symfony development process & What's symfony 1.3?

プラグインがデフォルトで無効になった

sfProjectConfiguration::enablePlugins() で ON にしたいプラグインを指定していく

デフォルトでは sfDocrtinePlugin か sfPropelPlugin しか有効にならない

sfProtoculousPlugin などを使う場合は明示的に指定する必要がある

※sf1.2 からのアップグレードの場合は ProjectConfiguration 内で sfProjectConfiguration::enableAllPluginsExcept()を呼んでいるはずなので影響なし

ちなみに plugin:install タスク、 plugin:uninstall タスクを実行すると、 ProjectConfiguration.class.php を自動的に書き換えるというアグレッシブさ

Page 34: Introduction of symfony development process & What's symfony 1.3?

プラグインが {plugin}Configuration.class.php を持てる

ようになった config.php も読み込まれるっぽいけど {plugin}Configuration::initialize() が実

行される 利点

イベントディスパッチャとかアプリケーション設定( sfApplicationConfiguration )とかをプロパティ経由で扱える

OpenPNE 用プラグインが読み込み時に共通で実行する処理とかが書けるとかできるようになる

Page 35: Introduction of symfony development process & What's symfony 1.3?

symfony 1.3 + Doctrine デフォルト ORM が Doctrine 1.2 に

Propel を使いたい場合は、 generate:project タスクで --orm=propel オプションを指定する

Doctrine 1.2 の新機能は川原君が発表しそうな気がするのでここでは割愛

そのモデルのフォームとフィルタを生成するかどうかをスキーマで指定できるようになった(ゴミファイルが減りますね)

存在しないモデル(削除された、リネームされた)に関するファイルをクリアするタスクが追加された

日付型カラムに関するゲッターとセッターが DateTime オブジェクトを受け付けるようになった

Page 36: Introduction of symfony development process & What's symfony 1.3?

デバッグツールバーが進化 View にアサインされている変数や使用し

ているパーシャルなどの情報が見れるように

Page 37: Introduction of symfony development process & What's symfony 1.3?

デバッグツールバーが進化 SQL を実行している箇所がわかるように

(sfDoctrinePlugin)

Page 38: Introduction of symfony development process & What's symfony 1.3?

デバッグツールバーが進化 各 SQL の実行時間と、 SlowQuery が検知できるように (sfDoctrinePlugin)

Page 39: Introduction of symfony development process & What's symfony 1.3?

OpenPNE3 で symfony 1.3 が使いたくなってきた方々へ

残念ながら symfony 1.3 は 11 月リリース( Doctrine と違っておいそれと開発中バージョンを使用するわけにはいかない)

OpenPNE3 では beta がリリースされたあたりからバージョンアップの準備を進めていきたいところ

symfony 1.3 で魅力的な機能があれば OpenPNE3 で先行して対応するというアプローチは有りだと思います

Page 40: Introduction of symfony development process & What's symfony 1.3?

質疑応答タイム