Upload
kousuke-ebihara
View
3.319
Download
7
Embed Size (px)
DESCRIPTION
Citation preview
仕事が忙しいと「なんなんだー」の発表でお茶を濁すことに定評のある海老原です。
本日のテーマ 身近な OSS 、 symfony の開発プロセ
スを見学してみる(全員向け) symfony 開発の基本背景の紹介 symfony 1.3 開発の課程を紹介 氷山の一角が見えはじめた Symfony 2 につ
いて軽く触れてみる symfony 1.3 のトピックを知り、少なく
とも心だけは準備をしておく( OpenPNE3 系プログラマ向け)
symfony 開発見学ツアー
symfony って? Sensio Labs の CEO 、 Fabien
Potencier 氏が作った PHP フレームワーク
顧客の要求駆動でしか機能を付け加えないというポリシー
明確なメンテナンス期間の提示
symfony の各バージョン http://www.symfony-project.org/installation で、
各バージョンの違いが明確に説明されている
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 になる。現在開発中。
symfony プラグイン http://www.symfony-project.org/plugi
ns/ The plugin section lists 640 symfony
plugins developed by 279 contributors.
symfony プラグインhttp://www.symfony-project.org/plugins/sfFormExtraPlugin
プラグインの個別のページには、
•プラグインの概要• 対応バージョン• ライセンス情報• 開発者情報• バグ作成チケットへのリンク
•Readme•ダウンロード可能なパッケージ一覧•チェンジログ•参加方法の案内
が示されている
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 章までできあがっている
symfony のドキュメント http://www.symfony-project.org/doc/1
_2/ symfony and Doctrine
Symfony で Doctrine を使用するときのリファレンス
7 章まである The Cookbook
Tips 集 (28 個 ) The API Documentation
API ドキュメント
symfony のチュートリアル http://www.symfony-project.org/doc/1
_2/ Getting Started
symfony のセットアップまでのチュートリアル 最近できた
What's new? チュートリアル……?
My First Project モデルから自動生成したモジュールに味付けをし
ていく感じで進めていくチュートリアル
symfony のコミュニティhttp://www.symfony-project.org/communityで、コミュニティの動向が追える
メーリングリスト symfony-users symfony-devs
Wiki 更新履歴 フォーラム更新履歴 Snippets 更新履歴 symfony について言及しているブログのフィード
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 や提案などがよくポストされている
symfony のコミュニティ Snippets
http://snippets.symfony-project.org/ ユーザが投稿した Tips 集 コメントがつけられる
たまにコアチームの人々が「これいいねえ」とか「こんなことしなくてもこうすればいいじゃん」とか言っているのを見かける
symfony のコミュニティ コミュニティを巻き込んだイベントが催さ
れることがある User voice (後述) 1 day = 1 ticket (後述) Askeet チュートリアル連載中の機能提案 Jobeet チュートリアル連載中のデザインコン
テスト symfony キャンプ( symfony1.1 のトレーニ
ング) プラグイン開発者の日
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 より
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 より
Symfony Components
Symfony Components
Symfony 2 ではフレームワークを支える部品を Symfony とは独立して利用できるようにする
現時点でリリース可能なコンポーネントを本体に先駆けてリリースしている
それぞれのコンポーネントは、充分すぎるほどのドキュメントとテストと一緒にリリースされている
詳細は http://components.symfony-project.org/
symfony 1.3 ってなんなんだー
dev 環境では新しくクラスを追加しても symfony cc をしなくてよくなった
symfony のオートローディングで見つけられなかったクラスは、 sfAutoloadAgain という新しい機構によりもう一度オートロードし直して見つけてくれる
dev 環境では設定ファイルの変更も即座に反映されるので、開発時に symfony cc し忘れてハマるのはルーティングルールの変更時だけになる?(といいね)
generate:app タスクのセキュリティ対策オプションがデフォルト
ON に いままでは escaping_strategy と
csrf_secret を generate:app タスク実行時に指定しなければ、 XSS と CSRF に対する防御ができなかった OpenPNE3 は最初から escaping_strategy
は設定していたが、 csrf_secret が OFF になっていたのは年末まで気づかなかった。危なかった
フォームウィジェットのラベルから _id が消える
自動生成されたフォームは、テーブルのフィールド名に応じて、各ウィジェットのラベル名が自動的に付加される
1.3 からは他テーブルとのリレーションに用いられる ****_id のラベルから _id が取り除かれる
フォームウィジェットのラベルから _id が消える
sf 1.2 sf 1.3
使用するフォームフィールドが簡単に指定できるようになった
sfForm::useFields() が追加された configure() メソッド内で以下のように記述
$this->useFields(array('title', 'body', ‘file’)); 今までは、使用しないフォームフィールドを
unset($this[‘id’], $this[‘member_id’], …);とかしていく必要があった
この方法だと、モデル側でカラム追加があった場合に、フォームの更新が漏れていると意図しないフォームフィールド(フォームから入力させるべきでない項目など) が表示される場合があった
実際 Doctrine 化のついでに Timestampable を全モデル適用したときに困ったことになった
フォーム系クラスの親子関係が変わった
sf1.2
{Model}Form
Base{Model}Form
BaseFormDoctrine
sfFormDoctrine
sfForm
※矢印は だと思ってください><
フォーム系クラスの親子関係が変わった
sf1.3
{Model}Form
Base{Model}Form
BaseFormDoctrine
sfFormDoctrine
sfFormObject
※矢印は だと思ってください><
BaseForm
sfFormSymfony
sfForm
← ?
← プロジェクトに特化したフォームクラス
← symfony に特化したフォームクラス (イベント通知をおこなう)
← symfony に特化しないフォームクラス ( sf1.1 からだけど)
フォームが( sfFormSymfony が)新たなイベントを通知
form.post_configure コンストラクタ内で呼ばれる
( sfForm::__construct() をコールした直後) form.filter_values
sfForm::doBind() へのバインド前に値の前処理を書ける form.validation_error
sfForm::doBind() でのバリデーションでエラーになったら呼ばれる
form.method_not_found
そういえば川原君が「フォームクラスに Doctrine のビヘイビアみたいな機構がほしい」とかぼやいていた気がする(ニヤニヤ)
テストが諸々改善される --only-failed を指定すると、前回失敗し
たテストのみ再テストする レスポンスが指定した正規表現にマッチ
ングするかどうかテストできるようになった 携帯用 HTML など、 XML として適切でない文書でもより正しくテストできるように
ProjectConfiguration で設定することで、特定のプラグインのテストを test:* タスクから実行できるようになった
generate:project 時にインストーラスクリプトを指定できるようになった
--installer オプションを指定することで、タスクのコンテキストで任意の PHP スクリプトが実行できるようになった ので、他のタスクを呼んだりとかできる openpne:install をなくせるかも
何も指定しなくても、 ORM 用プラグインのインストール用スクリプトは自動実行される
generate:project 時にインストーラスクリプトを指定できるようになった
コマンド
実行結果
/home/co3k/ube.php
プラグインがデフォルトで無効になった
sfProjectConfiguration::enablePlugins() で ON にしたいプラグインを指定していく
デフォルトでは sfDocrtinePlugin か sfPropelPlugin しか有効にならない
sfProtoculousPlugin などを使う場合は明示的に指定する必要がある
※sf1.2 からのアップグレードの場合は ProjectConfiguration 内で sfProjectConfiguration::enableAllPluginsExcept()を呼んでいるはずなので影響なし
ちなみに plugin:install タスク、 plugin:uninstall タスクを実行すると、 ProjectConfiguration.class.php を自動的に書き換えるというアグレッシブさ
プラグインが {plugin}Configuration.class.php を持てる
ようになった config.php も読み込まれるっぽいけど {plugin}Configuration::initialize() が実
行される 利点
イベントディスパッチャとかアプリケーション設定( sfApplicationConfiguration )とかをプロパティ経由で扱える
OpenPNE 用プラグインが読み込み時に共通で実行する処理とかが書けるとかできるようになる
symfony 1.3 + Doctrine デフォルト ORM が Doctrine 1.2 に
Propel を使いたい場合は、 generate:project タスクで --orm=propel オプションを指定する
Doctrine 1.2 の新機能は川原君が発表しそうな気がするのでここでは割愛
そのモデルのフォームとフィルタを生成するかどうかをスキーマで指定できるようになった(ゴミファイルが減りますね)
存在しないモデル(削除された、リネームされた)に関するファイルをクリアするタスクが追加された
日付型カラムに関するゲッターとセッターが DateTime オブジェクトを受け付けるようになった
デバッグツールバーが進化 View にアサインされている変数や使用し
ているパーシャルなどの情報が見れるように
デバッグツールバーが進化 SQL を実行している箇所がわかるように
(sfDoctrinePlugin)
デバッグツールバーが進化 各 SQL の実行時間と、 SlowQuery が検知できるように (sfDoctrinePlugin)
OpenPNE3 で symfony 1.3 が使いたくなってきた方々へ
残念ながら symfony 1.3 は 11 月リリース( Doctrine と違っておいそれと開発中バージョンを使用するわけにはいかない)
OpenPNE3 では beta がリリースされたあたりからバージョンアップの準備を進めていきたいところ
symfony 1.3 で魅力的な機能があれば OpenPNE3 で先行して対応するというアプローチは有りだと思います
質疑応答タイム