SlideShare a Scribd company logo
第 4 回 Symfony2 勉強会




Symfony2 で
より良いソフトウェア
を作るために
                     株式会社アイテマン
                     久保敦啓
                     @iteman
                  
     
iteman
   株式会社アイテマン 代表取締役
   Piece Project プロジェクトリード
   Twitter @iteman




               
Piece Framework
   PHP のアプリケーションフレームワーク
   オープンソースソフトウェア
            New BSD License
            Eclipse Public License




                      
歴史
   2005 Stagehand_TestRunner
   2006 Piece_Unity, Piece_Flow
   2009 MakeGood
   2011 ???




                
良いソフトウェアとは?




     
“ ソフトウェアの核心は、
ドメインに関係した問題を
ユーザのために解決する能
力である。”
— エリック・エヴァンスのドメイン駆動設計


         
Symfony2




      
“Build your App,
    not your Tools.”
    —The Symfony2 Book




            
Symfony2 の特徴
   バンドル
   コンフィギュレーション
   サービスコンテナ (DI コンテナ )
   機能テスト
   独立したドメインオブジェクト
   etc...


                 
バンドル
   モジュールシステムの構成単位
   フィーチャの提供単位
   クラス、コントローラ、 Web リソース等を
    束ねたもの
   外部のモジュールとの統合レイヤ
   セマンティックコンフィギュレーションの提供
   他のバンドルの拡張の提供
   自身のバンドルの拡張ポイントの提供

              
バンドルの構成要素と依存関係




Bundle        Classes          Controllers   Web Resources




   Bundles                  Classes           Other Resources




                         
バンドルの拡張

              FrameworkBundle



                      kernel.listener




                                                           ...
web_profiler.debug_toolbar      assetic.request_listener

WebProfilerBundle               AsseticBundle




                         
既存のモジュールシステム
   PEAR パッケージ
   Phar
   Debian パッケージ
   OSGi バンドル
   etc...




              
バンドル設計の原則
   高い凝集度と低い結合度
            一般的なモジュール設計の原則
   パッケージ設計の原則
    — アジャイルソフトウェア開発の奥義
            再利用・リリース等価の原則など 6 つの原則
   ドメインの概念
    — エリック・エヴァンスのドメイン駆動設計


                    
サービスコンテナ
   Dependency Injection
             依存関係逆転の原則
              — アジャイルソフトウェア開発の奥義
   コンポーネント間の疎結合化
   テスタビリティの向上
   コンポーネント構成知識の保存と可視化
             軽量プログラミング言語における
              DI コンテナの価値

                      
依存関係の逆転


Client              Client




Server         Server Interface




                    Server




           
セマンティックコンフィギュレーション
# app/config/config.yml
framework:
    secret:          xxxxxxxxxx
    charset:         UTF­8
    error_handler:   null
    form:            true
    csrf_protection: true
    router:        { resource: "%kernel.root_dir
%/config/routing.yml" }
    # ...




                    
トランスフォーメーション
Problem Space                                                Solution Space


                  Parse                        Populate
 ----------
 ----------
 ----------
 ----------
 ------
                          Service Containers

Semantic                                                     Service 
Configurations                                               Definitions
(YAML,XML,PHP)                                               (Objects)


                                               ----------
                                               ----------
                           Parse               ----------
                                                            Service 
                                               ----------   Container
                                               ------
                                                            Configurations
                                                            (YAML,XML,PHP)


                                
ドメイン特化言語
   DSL:Domain Specific Languages
   問題空間の言語
   ドメインに特化した記法を持つ言語
   言語ワークベンチ
   コンフィグレーション DSL
   式 DSL, グラフィカル DSL


               
ドメイン特化言語の開発
   コンフィギュレーション DSL
         YAML
   式 DSL, グラフィカル DSL
         言語ワークベンチ
         Lexer/Parser Generators




                  
機能テスト
class HelloControllerTest extends WebTestCase
{
    public function testIndex()
    {
        $client = $this­>createClient();

        $crawler = $client­>request('GET', 
'/hello/Fabien');

        $this­>assertTrue($crawler­
>filter('html:contains("Hello Fabien")')­>count() 
> 0);
    }
}


                    
テストの対象

   ユーザ側からみた Web アプリの機能
   機能に対するユースケースの粒度
   ルーティング
   ページフロー
   入力・出力
   バリデーション


              
独立したドメインオブジェクト

   Pure PHP オブジェクト
   バリデーションや OR マッピングから
    の高い独立性
   フレームワークからの影響を極小化




               
“Build your App,
    not your Domain 
     Models.”
    —iteman



               
Symfony2でより良いソフトウェアを作るために
なぜフレームワーク
     を使うのか?



       
“ ソフトウェアの核心は、
ドメインに関係した問題を
ユーザのために解決する能
力である。”
— エリック・エヴァンスのドメイン駆動設計


         
ドメイン駆動設計
DDD:Domain­Driven Design




         
“ ドメインモデルをソフトウェア
開発の中心にすえ、コードやコミュニ
ケーションを常にドメインモデルと一
体化させながら、ドメインモデルを反
復的に深化させることでより価値の高い
アプリケーションを生み出していこう
とする考え方”
—Domain­Driven Design のエッセンス
             
ドメイン駆動設計の要点
   ドメインモデルは、ドメイン知識を深めなが
     ら反復的( iterative )に深化させていく
   ドメインモデルが、開発者とドメイン知識を
     もつ人(ユーザ、専門家等)との間の共通言
     語となるようにする
   ドメインモデルと実装コードとがきちんと対
     応付けられるようにする
    —Domain­Driven Design のエッセンス


                 
代表的なパターン
   ユビキタス言語
   モデル駆動設計
      ≠ オブジェクト指向
      ドメイン特化言語


   実践的モデラー




            
ドメイン駆動設計を
     実践するには?



       
プロセス、技法、パラダイム
   アジャイルプロセス (Scrum, XP, …)
   テスト駆動開発 (TDD:Test­Driven Development)
   SOLID
   ビヘイビア駆動開発 (BDD:Behavior­Driven Development)
   リファクタリング




                     
SOLID
   単一責任の原則
    SRP:The Single Responsibility Principle
   オープン・クローズドの原則
    OCP:The Open­Closed Principle
   リスコフの置換原則
    LSP:The Liskov Substitution Principle
   インタフェース分離の原則
    ISP:The Interface Segregation Principle
   依存関係逆転の原則
    DIP:The Dependency Inversion Principle
                     
プロセス、技法、パラダイム
   オブジェクト指向プログラミング
   関数プログラミング
   ジェネリックプログラミング
   アスペクト指向プログラミング
   メタプログラミング




                 
プロセス、技法、パラダイム
   マルチパラダイムデザイン
   ジェネレーティブプログラミング
   プロダクトライン
   Software Factories
   インテンショナルプログラミング
   言語指向プログラミング
   言語ワークベンチ
   Lean Software Architecture




                     
プロセス、技法、パラダイム
   レイヤ化アーキテクチャ
   モデル・ビュー・コントローラ
   DCI: Data, Context, and Interaction




                     
DDD+TDD= アメージング!




      
参考
   『エリック・エヴァンスのドメイン駆動設計 (IT 
     Architects’Archive  ソフトウェア開発の実践 )  』、翔泳
     社、 2011 年、 ISBN 978­4798121963
   [  技術講座 ] Domain­Driven Design のエッセンス 第 1
       回、 http://www.ogis­
       ri.co.jp/otc/hiroba/technical/DDDEssence/chap1.html
   『アジャイルソフトウェア開発の奥義 第 2 版 オブジェクト指向開発の神
     髄と匠の技』、ソフトバンククリエイティブ、 2008 年、 ISBN 978­
     4797347784
   『ジェネレーティブプログラミング (IT Architects’Archive 
     CLASSIC MODER)  』、翔泳社、 2008 年、 ISBN 978­4798113319
   The Symfony2 Book, 
      http://symfony.com/doc/current/book/index.html 



                        

More Related Content

PDF
PHP勉強会 #51
PDF
CodeIgniter入門
PDF
はじめてのCodeIgniter
PDF
WTM53 phpフレームワーク いまさらcodeigniter
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
FuelPHP Osu Nagoya vol.1
KEY
FuelPHPをさわってみて
PDF
10分でわかるFuelPHP @ 2011/12
PHP勉強会 #51
CodeIgniter入門
はじめてのCodeIgniter
WTM53 phpフレームワーク いまさらcodeigniter
15分でCakePHPを始める方法(Nseg 2013-11-09 )
FuelPHP Osu Nagoya vol.1
FuelPHPをさわってみて
10分でわかるFuelPHP @ 2011/12

What's hot (20)

PDF
実"戦"CakePHP Plugin
PDF
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
PDF
Phpstudy44 Zend Frameworkが抱えている問題は多い。
PDF
.htaccessによるリダイレクト徹底解説
PDF
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
PPTX
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
PPTX
php-src の歩き方
KEY
EC-CUBEプラグイン講義
PDF
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
PPTX
.NET Compiler Platform
PDF
Behatで行う、E2Eテスト入門
PDF
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
PDF
はじめての FuelPHP
ODP
PHP Conference Japan 2010 : Zend Framewrok
PDF
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
PPTX
PHP AST 徹底解説
PDF
Ec cube開発合宿 プラグインセミナー
PDF
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
PDF
phpcon2013_zf
PDF
PHPの今とこれから2021
実"戦"CakePHP Plugin
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
Phpstudy44 Zend Frameworkが抱えている問題は多い。
.htaccessによるリダイレクト徹底解説
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
php-src の歩き方
EC-CUBEプラグイン講義
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
.NET Compiler Platform
Behatで行う、E2Eテスト入門
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
はじめての FuelPHP
PHP Conference Japan 2010 : Zend Framewrok
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
PHP AST 徹底解説
Ec cube開発合宿 プラグインセミナー
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
phpcon2013_zf
PHPの今とこれから2021
Ad

Viewers also liked (20)

PDF
Symfony2 Behat/BDD (#Symfony2study 4)
KEY
Silex 入門
PPTX
第4回Symfony2勉強会 基礎編ワークショップ.1
PPTX
第4回Symfony2勉強会 基礎編ワークショップ.0
KEY
Symfony2のフォームフレームワーク
PDF
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
PDF
はじめてのSymfony2
PDF
Symfony2でMongoDBと仲良くする方法
PDF
Twigエクステンションの作り方
KEY
フラットなPHPからフレームワークへ
PDF
オレオレSecurityバンドル作っちゃいました
PDF
Symfony勉強会#9 form
PPT
Dependency management in PHP & ZendFramework 2
PDF
CakePHP Console Application 拡張Tips
PDF
Yet another use of Phalcon
PPT
PHP buildpackでhackとphalconが動いた件について
PPTX
受託開発のPhalcon
PPTX
3流プログラマーから見たPhalconとWISP
PDF
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
PPTX
Phalcon勉強会資料
Symfony2 Behat/BDD (#Symfony2study 4)
Silex 入門
第4回Symfony2勉強会 基礎編ワークショップ.1
第4回Symfony2勉強会 基礎編ワークショップ.0
Symfony2のフォームフレームワーク
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
はじめてのSymfony2
Symfony2でMongoDBと仲良くする方法
Twigエクステンションの作り方
フラットなPHPからフレームワークへ
オレオレSecurityバンドル作っちゃいました
Symfony勉強会#9 form
Dependency management in PHP & ZendFramework 2
CakePHP Console Application 拡張Tips
Yet another use of Phalcon
PHP buildpackでhackとphalconが動いた件について
受託開発のPhalcon
3流プログラマーから見たPhalconとWISP
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
Phalcon勉強会資料
Ad

Similar to Symfony2でより良いソフトウェアを作るために (20)

PDF
Software Development with Symfony
PDF
BPStudy20121221
PPT
ドメインロジックの実装方法とドメイン駆動設計
PDF
ドメイン駆動設計という仕事の流儀
PDF
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
PPTX
Dot netcore multiplatform 2
PPTX
Moot2013 moca ver0.3
PDF
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
PPTX
Cld018 コンテナ go_~あなた
PDF
Cld018 コンテナ go_~あなた
PDF
Net advantage 2012 volume2 最新情報 xaml プラットフォーム編
PDF
Google Compute EngineとPipe API
PDF
Google Compute EngineとGAE Pipeline API
PDF
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
PPTX
Cloudstack user group meeting in osaka
PDF
DDD 20121106 SEA Forum November
PPT
20010127
PDF
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
PDF
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
PDF
RWC2012(ワコムアイティ&テクノプロジェクト)
Software Development with Symfony
BPStudy20121221
ドメインロジックの実装方法とドメイン駆動設計
ドメイン駆動設計という仕事の流儀
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
Dot netcore multiplatform 2
Moot2013 moca ver0.3
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Cld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなた
Net advantage 2012 volume2 最新情報 xaml プラットフォーム編
Google Compute EngineとPipe API
Google Compute EngineとGAE Pipeline API
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloudstack user group meeting in osaka
DDD 20121106 SEA Forum November
20010127
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
RWC2012(ワコムアイティ&テクノプロジェクト)

More from Atsuhiro Kubo (17)

PDF
MPD Osaka Extra 5
PDF
Enaction, Not Design on MPD Osaka Extra 1
PDF
Enaction, Not Design on Symfony Meetup Kansai 2
PDF
The Birth of FormalBears - A new META for BEAR.Sunday applications
PDF
Lean Architecture / DCI Evening Report
PDF
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
PDF
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
PDF
ジェネレーティブプログラミングの世界
PDF
意図を表現するプログラミング
PDF
Introduction to Continuous Test Runner MakeGood
PDF
Getting Started with Testing using PHPUnit
PDF
Introduction to Continuous Testing
PDF
MakeGoodで快適なテスト駆動開発を
PDF
Eclipse PDT + MakeGoodによるPHPコードのテスト
PDF
Eclipse PDT + MakeGood による PHP コードのテスト
PDF
How To Create Custom DSLs By PHP
PDF
Piece Framework 2.0 Background
MPD Osaka Extra 5
Enaction, Not Design on MPD Osaka Extra 1
Enaction, Not Design on Symfony Meetup Kansai 2
The Birth of FormalBears - A new META for BEAR.Sunday applications
Lean Architecture / DCI Evening Report
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
Frameworks We Live By: Design by day-to-day framework development: Multi-para...
ジェネレーティブプログラミングの世界
意図を表現するプログラミング
Introduction to Continuous Test Runner MakeGood
Getting Started with Testing using PHPUnit
Introduction to Continuous Testing
MakeGoodで快適なテスト駆動開発を
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGood による PHP コードのテスト
How To Create Custom DSLs By PHP
Piece Framework 2.0 Background

Symfony2でより良いソフトウェアを作るために