Your SlideShare is downloading. ×
0
symfony開発見学ツアー+symfony 1.3 ってなんなんだー<br />KousukeEbihara &lt;ebihara@tejimaya.com&gt;<br />
仕事が忙しいと<br />「なんなんだー」の発表でお茶を濁すことに定評のある海老原です。<br />
本日のテーマ<br />身近な OSS、symfonyの開発プロセスを見学してみる(全員向け)<br />symfony開発の基本背景の紹介<br />symfony 1.3 開発の課程を紹介<br />氷山の一角が見えはじめたSymfony ...
symfony開発見学ツアー<br />
symfonyって?<br />Sensio Labsの CEO、Fabien Potencier氏が作った PHP フレームワーク<br />顧客の要求駆動でしか機能を付け加えないというポリシー<br />明確なメンテナンス期間の提示<br />
symfonyの各バージョン<br />http://www.symfony-project.org/installationで、各バージョンの違いが明確に説明されている<br />
symfonyの各バージョン<br />symfony 1.0 : 2007年から2010年の3年間バグ修正が続けられる旧安定版<br />symfony 1.1 :  1.2 への移行準備用のバージョン。PHP 5.1 以前で動く最終バージョ...
symfonyプラグイン<br />http://www.symfony-project.org/plugins/<br />The plugin section lists 640 symfony plugins developed by 2...
symfonyプラグイン<br />http://www.symfony-project.org/plugins/sfFormExtraPlugin<br />プラグインの個別のページには、<br /><ul><li>プラグインの概要
対応バージョン
ライセンス情報
開発者情報
バグ作成チケットへのリンク
Readme
ダウンロード可能なパッケージ一覧
チェンジログ
参加方法の案内</li></ul>が示されている<br />
symfonyのドキュメント<br />http://www.symfony-project.org/doc/1_2/<br />Practical symfony - Jobeet tutorial<br />1 日1時間、 24 日間でsy...
symfonyのドキュメント<br />http://www.symfony-project.org/doc/1_2/<br />symfony and Doctrine<br />SymfonyでDoctrineを使用するときのリファレンス<...
symfonyのチュートリアル<br />http://www.symfony-project.org/doc/1_2/<br />Getting Started<br />symfonyのセットアップまでのチュートリアル<br />最近できた...
symfonyのコミュニティ<br />http://www.symfony-project.org/community<br />で、コミュニティの動向が追える<br />メーリングリスト<br />symfony-users<br />sy...
symfonyのコミュニティ<br />Wiki<br />http://trac.symfony-project.org/wiki<br />This is the symfony community wiki. It contains us...
symfonyのコミュニティ<br />Snippets<br />http://snippets.symfony-project.org/<br />ユーザが投稿したTips集<br />コメントがつけられる<br />たまにコアチームの人々...
symfonyのコミュニティ<br />コミュニティを巻き込んだイベントが催されることがある<br />User voice(後述)<br />1 day = 1 ticket(後述)<br />Askeetチュートリアル連載中の機能提案<br...
symfony 1.3 開発の流れ<br />フェーズ1: Feature brainstorming<br />user voice ページから投票を受け付け、コアチームはそれを参考に新機能を決定するhttp://symfony.uservo...
1 day = 1 ticket<br />一日のわずかな時間で、コントリビュータにチケットを消化してもらうイベント<br />ドキュメントの改善や、リリースサイクルの改善、自動テストのカバレッジ向上と、バグを直していくことでコアチームが機能開...
Symfony Components<br />
Symfony Components<br />Symfony 2 ではフレームワークを支える部品をSymfonyとは独立して利用できるようにする<br />現時点でリリース可能なコンポーネントを本体に先駆けてリリースしている<br />それぞ...
symfony 1.3 ってなんなんだー<br />
dev 環境では新しくクラスを追加してもsymfony cc をしなくてよくなった<br />symfonyのオートローディングで見つけられなかったクラスは、sfAutoloadAgainという新しい機構によりもう一度オートロードし直して見つけ...
generate:appタスクのセキュリティ対策オプションがデフォルトONに<br />いままではescaping_strategyとcsrf_secretをgenerate:appタスク実行時に指定しなければ、 XSS と CSRF に対する...
フォームウィジェットのラベルから _id が消える<br />自動生成されたフォームは、テーブルのフィールド名に応じて、各ウィジェットのラベル名が自動的に付加される<br />1.3 からは他テーブルとのリレーションに用いられる ****_id...
フォームウィジェットのラベルから _id が消える<br />sf 1.2<br />sf 1.3<br />
使用するフォームフィールドが簡単に指定できるようになった<br />sfForm::useFields() が追加された<br />configure() メソッド内で以下のように記述$this-&gt;useFields(array(&apo...
フォーム系クラスの親子関係が変わった<br />sf1.2<br />sfForm<br />sfFormDoctrine<br />BaseFormDoctrine<br />Base{Model}Form<br />※矢印は   だと思って...
フォーム系クラスの親子関係が変わった<br />sf1.3<br />← symfonyに特化しないフォームクラス<br /> (sf1.1 からだけど)<br />sfForm<br />← symfonyに特化したフォームクラス<br />...
フォームが(sfFormSymfonyが)新たなイベントを通知<br />form.post_configure<br />コンストラクタ内で呼ばれる(sfForm::__construct() をコールした直後)<br />form.filt...
テストが諸々改善される<br />--only-failedを指定すると、前回失敗したテストのみ再テストする<br />レスポンスが指定した正規表現にマッチングするかどうかテストできるようになった<br />携帯用HTMLなど、 XML として...
generate:project時にインストーラスクリプトを指定できるようになった<br />--installer オプションを指定することで、タスクのコンテキストで任意の PHP スクリプトが実行できるようになった<br />ので、他のタス...
generate:project時にインストーラスクリプトを指定できるようになった<br />コマンド<br />実行結果<br />/home/co3k/ube.php <br />
Upcoming SlideShare
Loading in...5
×

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

3,348

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,348
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. symfony開発見学ツアー+symfony 1.3 ってなんなんだー<br />KousukeEbihara &lt;ebihara@tejimaya.com&gt;<br />
  2. 2. 仕事が忙しいと<br />「なんなんだー」の発表でお茶を濁すことに定評のある海老原です。<br />
  3. 3. 本日のテーマ<br />身近な OSS、symfonyの開発プロセスを見学してみる(全員向け)<br />symfony開発の基本背景の紹介<br />symfony 1.3 開発の課程を紹介<br />氷山の一角が見えはじめたSymfony 2 について軽く触れてみる<br />symfony 1.3 のトピックを知り、少なくとも心だけは準備をしておく(OpenPNE3系プログラマ向け)<br />
  4. 4. symfony開発見学ツアー<br />
  5. 5. symfonyって?<br />Sensio Labsの CEO、Fabien Potencier氏が作った PHP フレームワーク<br />顧客の要求駆動でしか機能を付け加えないというポリシー<br />明確なメンテナンス期間の提示<br />
  6. 6. symfonyの各バージョン<br />http://www.symfony-project.org/installationで、各バージョンの違いが明確に説明されている<br />
  7. 7. symfonyの各バージョン<br />symfony 1.0 : 2007年から2010年の3年間バグ修正が続けられる旧安定版<br />symfony 1.1 : 1.2 への移行準備用のバージョン。PHP 5.1 以前で動く最終バージョン。2009 年 6 月までの1 年間保守がおこなわれた。セキュリティフィックスは 2010 年まで。<br />symfony 1.2 : フォームフレームワークや Propel 1.3 へのバージョンアップ、 Doctrine のサポートなど、 1.0 との差異が大きい。このバージョン以降、1.x はPHP 5.2 以上必須に。<br />symfony 1.3 : 1.2 との互換性を意識した機能改善バージョン。デフォルトの ORM が Propel から Doctrine になる。現在開発中。<br />
  8. 8. symfonyプラグイン<br />http://www.symfony-project.org/plugins/<br />The plugin section lists 640 symfony plugins developed by 279 contributors.<br />
  9. 9. symfonyプラグイン<br />http://www.symfony-project.org/plugins/sfFormExtraPlugin<br />プラグインの個別のページには、<br /><ul><li>プラグインの概要
  10. 10. 対応バージョン
  11. 11. ライセンス情報
  12. 12. 開発者情報
  13. 13. バグ作成チケットへのリンク
  14. 14. Readme
  15. 15. ダウンロード可能なパッケージ一覧
  16. 16. チェンジログ
  17. 17. 参加方法の案内</li></ul>が示されている<br />
  18. 18. symfonyのドキュメント<br />http://www.symfony-project.org/doc/1_2/<br />Practical symfony - Jobeet tutorial<br />1 日1時間、 24 日間でsymfony 1.2 を使ってサイトを作成するチュートリアル<br />ブログに連載されたもの<br />The Definitive Guide to symfony<br />500 ページ近くあるリファレンス<br />symfony Forms in Action<br />symfony 1.1 の新機能、フォームフレームワークに関するリファレンス<br />1, 2, 3, 4, 8, 11 章までできあがっている<br />
  19. 19. symfonyのドキュメント<br />http://www.symfony-project.org/doc/1_2/<br />symfony and Doctrine<br />SymfonyでDoctrineを使用するときのリファレンス<br />7章まである<br />The Cookbook<br />Tips集(28個)<br />TheAPIDocumentation<br />APIドキュメント<br />
  20. 20. symfonyのチュートリアル<br />http://www.symfony-project.org/doc/1_2/<br />Getting Started<br />symfonyのセットアップまでのチュートリアル<br />最近できた<br />What&apos;s new?<br />チュートリアル……?<br />My First Project<br />モデルから自動生成したモジュールに味付けをしていく感じで進めていくチュートリアル<br />
  21. 21. symfonyのコミュニティ<br />http://www.symfony-project.org/community<br />で、コミュニティの動向が追える<br />メーリングリスト<br />symfony-users<br />symfony-devs<br />Wiki更新履歴<br />フォーラム更新履歴<br />Snippets更新履歴<br />symfonyについて言及しているブログのフィード<br />
  22. 22. symfonyのコミュニティ<br />Wiki<br />http://trac.symfony-project.org/wiki<br />This is the symfony community wiki. It contains user-contributed documentation, tutorials and resources.<br />http://trac.symfony-project.org/wiki#FAQandHowtos<br />HowToや提案などがよくポストされている<br />
  23. 23. symfonyのコミュニティ<br />Snippets<br />http://snippets.symfony-project.org/<br />ユーザが投稿したTips集<br />コメントがつけられる<br />たまにコアチームの人々が「これいいねえ」とか「こんなことしなくてもこうすればいいじゃん」とか言っているのを見かける<br />
  24. 24. symfonyのコミュニティ<br />コミュニティを巻き込んだイベントが催されることがある<br />User voice(後述)<br />1 day = 1 ticket(後述)<br />Askeetチュートリアル連載中の機能提案<br />Jobeetチュートリアル連載中のデザインコンテスト<br />symfonyキャンプ(symfony1.1のトレーニング)<br />プラグイン開発者の日<br />
  25. 25. symfony 1.3 開発の流れ<br />フェーズ1: Feature brainstorming<br />user voice ページから投票を受け付け、コアチームはそれを参考に新機能を決定するhttp://symfony.uservoice.com/pages/symfony<br />フェーズ2: Development<br />フェーズ3: Release process<br />機能開発をやめ、 1.3 のリリースに向けてバグを直していく<br />http://www.symfony-project.org/blog/2009/01/25/about-symfony-1-3より<br />
  26. 26. 1 day = 1 ticket<br />一日のわずかな時間で、コントリビュータにチケットを消化してもらうイベント<br />ドキュメントの改善や、リリースサイクルの改善、自動テストのカバレッジ向上と、バグを直していくことでコアチームが機能開発に専念できるようにすることが目的<br />毎月 3 人を表彰(景品が貰える)<br />symfony本だったり Doctrine 本だったり Amazon のギフト券だったり PHP の T シャツだったり<br />http://www.symfony-project.org/blog/2009/07/01/symfony-community-event-1-day-1-ticketより<br />
  27. 27. Symfony Components<br />
  28. 28. Symfony Components<br />Symfony 2 ではフレームワークを支える部品をSymfonyとは独立して利用できるようにする<br />現時点でリリース可能なコンポーネントを本体に先駆けてリリースしている<br />それぞれのコンポーネントは、充分すぎるほどのドキュメントとテストと一緒にリリースされている<br />詳細はhttp://components.symfony-project.org/<br />
  29. 29. symfony 1.3 ってなんなんだー<br />
  30. 30. dev 環境では新しくクラスを追加してもsymfony cc をしなくてよくなった<br />symfonyのオートローディングで見つけられなかったクラスは、sfAutoloadAgainという新しい機構によりもう一度オートロードし直して見つけてくれる<br />dev 環境では設定ファイルの変更も即座に反映されるので、開発時にsymfony cc し忘れてハマるのはルーティングルールの変更時だけになる?(といいね)<br />
  31. 31. generate:appタスクのセキュリティ対策オプションがデフォルトONに<br />いままではescaping_strategyとcsrf_secretをgenerate:appタスク実行時に指定しなければ、 XSS と CSRF に対する防御ができなかった<br />OpenPNE3 は最初からescaping_strategyは設定していたが、csrf_secretが OFF になっていたのは年末まで気づかなかった。危なかった<br />
  32. 32. フォームウィジェットのラベルから _id が消える<br />自動生成されたフォームは、テーブルのフィールド名に応じて、各ウィジェットのラベル名が自動的に付加される<br />1.3 からは他テーブルとのリレーションに用いられる ****_id のラベルから _id が取り除かれる<br />
  33. 33. フォームウィジェットのラベルから _id が消える<br />sf 1.2<br />sf 1.3<br />
  34. 34. 使用するフォームフィールドが簡単に指定できるようになった<br />sfForm::useFields() が追加された<br />configure() メソッド内で以下のように記述$this-&gt;useFields(array(&apos;title&apos;, &apos;body&apos;, ‘file’));<br />今までは、使用しないフォームフィールドをunset($this[‘id’], $this[‘member_id’], …);とかしていく必要があった<br />この方法だと、モデル側でカラム追加があった場合に、フォームの更新が漏れていると意図しないフォームフィールド(フォームから入力させるべきでない項目など)が表示される場合があった<br />実際 Doctrine 化のついでにTimestampableを全モデル適用したときに困ったことになった<br />
  35. 35. フォーム系クラスの親子関係が変わった<br />sf1.2<br />sfForm<br />sfFormDoctrine<br />BaseFormDoctrine<br />Base{Model}Form<br />※矢印は   だと思ってください><<br />{Model}Form<br />
  36. 36. フォーム系クラスの親子関係が変わった<br />sf1.3<br />← symfonyに特化しないフォームクラス<br /> (sf1.1 からだけど)<br />sfForm<br />← symfonyに特化したフォームクラス<br /> (イベント通知をおこなう)<br />sfFormSymfony<br />← プロジェクトに特化したフォームクラス<br />BaseForm<br />← ? <br />sfFormObject<br />sfFormDoctrine<br />BaseFormDoctrine<br />Base{Model}Form<br />※矢印は   だと思ってください><<br />{Model}Form<br />
  37. 37. フォームが(sfFormSymfonyが)新たなイベントを通知<br />form.post_configure<br />コンストラクタ内で呼ばれる(sfForm::__construct() をコールした直後)<br />form.filter_values<br />sfForm::doBind() へのバインド前に値の前処理を書ける<br />form.validation_error<br />sfForm::doBind() でのバリデーションでエラーになったら呼ばれる<br />form.method_not_found<br />そういえば川原君が「フォームクラスに Doctrine のビヘイビアみたいな機構がほしい」とかぼやいていた気がする(ニヤニヤ)<br />
  38. 38. テストが諸々改善される<br />--only-failedを指定すると、前回失敗したテストのみ再テストする<br />レスポンスが指定した正規表現にマッチングするかどうかテストできるようになった<br />携帯用HTMLなど、 XML として適切でない文書でもより正しくテストできるように<br />ProjectConfigurationで設定することで、特定のプラグインのテストを test:* タスクから実行できるようになった<br />
  39. 39. generate:project時にインストーラスクリプトを指定できるようになった<br />--installer オプションを指定することで、タスクのコンテキストで任意の PHP スクリプトが実行できるようになった<br />ので、他のタスクを呼んだりとかできる<br />openpne:installをなくせるかも<br />何も指定しなくても、 ORM 用プラグインのインストール用スクリプトは自動実行される<br />
  40. 40. generate:project時にインストーラスクリプトを指定できるようになった<br />コマンド<br />実行結果<br />/home/co3k/ube.php <br />
  41. 41. プラグインがデフォルトで無効になった<br />sfProjectConfiguration::enablePlugins() で ON にしたいプラグインを指定していく<br />デフォルトではsfDocrtinePluginかsfPropelPluginしか有効にならない<br />sfProtoculousPluginなどを使う場合は明示的に指定する必要がある<br />※sf1.2 からのアップグレードの場合はProjectConfiguration内でsfProjectConfiguration::enableAllPluginsExcept()を呼んでいるはずなので影響なし<br />ちなみにplugin:installタスク、plugin:uninstallタスクを実行すると、ProjectConfiguration.class.phpを自動的に書き換えるというアグレッシブさ<br />
  42. 42. プラグインが {plugin}Configuration.class.phpを持てるようになった<br />config.phpも読み込まれるっぽいけど<br />{plugin}Configuration::initialize() が実行される<br />利点<br />イベントディスパッチャとかアプリケーション設定(sfApplicationConfiguration)とかをプロパティ経由で扱える<br />OpenPNE用プラグインが読み込み時に共通で実行する処理とかが書けるとかできるようになる<br />
  43. 43. symfony 1.3 + Doctrine<br />デフォルト ORM が Doctrine 1.2 に<br />Propel を使いたい場合は、generate:projectタスクで --orm=propel オプションを指定する<br />Doctrine 1.2 の新機能は川原君が発表しそうな気がするのでここでは割愛<br />そのモデルのフォームとフィルタを生成するかどうかをスキーマで指定できるようになった(ゴミファイルが減りますね)<br />存在しないモデル(削除された、リネームされた)に関するファイルをクリアするタスクが追加された<br />日付型カラムに関するゲッターとセッターがDateTimeオブジェクトを受け付けるようになった<br />
  44. 44. デバッグツールバーが進化<br />View にアサインされている変数や使用しているパーシャルなどの情報が見れるように<br />
  45. 45. デバッグツールバーが進化<br />SQL を実行している箇所がわかるように(sfDoctrinePlugin)<br />
  46. 46. デバッグツールバーが進化<br />各 SQL の実行時間と、SlowQueryが検知できるように (sfDoctrinePlugin)<br />
  47. 47. OpenPNE3 でsymfony 1.3 が使いたくなってきた方々へ<br />残念ながらsymfony 1.3 は 11 月リリース(Doctrine と違っておいそれと開発中バージョンを使用するわけにはいかない)<br />OpenPNE3 では beta がリリースされたあたりからバージョンアップの準備を進めていきたいところ<br />symfony 1.3 で魅力的な機能があれば OpenPNE3 で先行して対応するというアプローチは有りだと思います<br />
  48. 48. 質疑応答タイム<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×