baserCMSに見られる
CakePHPノウハウ蓄積法


            ×


                 2012年5月23日
                 エガシラリュウジ
自己紹介!

!  エガシラリュウジ@キャッチアップ


!  西区でWebの一部をつくってます。


!  baserCMSをのコアデベロッパー


!  ryuring@twitter


!  ダックスフンド飼ってます。


                     Copyright 2010 baserCMS All rights reserved
baserCMSって                                                        自己紹介


!  国産オープンソースのCMS。


!  WordPressとかMovableTypeとか
   MODxさんとかと同じ類い。


!  シンプルでわかりやすく、日本の文化
   を反映したCMSを目指してます。


!  http://basercms.net


                    Copyright 2010 baserCMS All rights reserved
本題

! 今回のお題である「ノウハウ」とは、プログ
  ラミングにおける知的財産・情報資産等を指
  します。


! 例えば、自社のライブラリ


! 例えば、Webサイトや管理画面の雛形


! 言うなれば、自社のフレームワーク的なもの
        Copyright 2010 baserCMS All rights reserved
注意事項

! 今回のお話は、CakePHP 1.2系ベースです。
  ごめんなさい。。




          Copyright 2010 baserCMS All rights reserved
ノウハウの再利用

! 開発期間を短縮する為、自社のノウハウを再
  利用するのは当たり前ですか?




           Copyright 2010 baserCMS All rights reserved
CakePHPのappフォルダ

! CakePHPでは、コアプログラムを変更する事
  なくアプリケーションを構築する仕組みがあ
  る。


  ! cake フォルダ・・・コアプログラム
  ! appフォルダ・・・アプリケーション


! CakePHPがバージョンアップした場合には、
  cakeフォルダを上書きするだけ

           Copyright 2010 baserCMS All rights reserved
CakePHPの仕組み

! ファイル読み込みの優先順位

          app



          cake




           Copyright 2010 baserCMS All rights reserved
appフォルダ内に配置する前提でライブラリ化

! Component ?
! Behavior ?
! AppController ?
! AppModel ?
! Plugin ?
! Vendor ?
! Lib ?



                Copyright 2010 baserCMS All rights reserved
appフォルダごとライブラリとして扱うには?

! appフォルダをスケルトンとして扱う


! bakeに仕込む




             Copyright 2010 baserCMS All rights reserved
メンテナンスの問題

! 例えば、自社のライブラリ(管理システムの
  雛形等)となる部分をappフォルダ内に配置し、
  お客様ごとにカスタマイズを施した場合、メ
  ンテナンスがめんどい?


! 100社に対し、カスタマイズしたプログラムを
  納品した際、ノウハウ部分にバグが見つかっ
  た場合とか・・・。


        Copyright 2010 baserCMS All rights reserved
バージョン管理システムで解決

! SVN や git などのバージョン管理システムで
  プロジェクトごとにブランチを切る


! バグ発見したらマージ祭り




          Copyright 2010 baserCMS All rights reserved
baserCMSのアップデートの仕組み

! 配布しているのでバージョン管理システムで
  マージなんてできない。


! 最初はEC-CUBEの構成を参考にしたが、
  CakePHPっぽくないのでやめた。
 ※ EC-CUBEでは、コアのクラスを継承する⃝⃝Exクラスをカスタマイズするよ
 うになっている。
 ※ AppControllerを継承するBaserAppControllerを作ったり。




! CakePHPのアップデートの仕組みを踏襲。

               Copyright 2010 baserCMS All rights reserved
ノウハウを別フォルダ化!

!  CakePHPには、コントローラー等の参照先を追加す
   る仕組みがあらかじめ備わってます。


!  ノウハウを詰め込んだファイル群を別フォルダ化でき
   る。


!  別フォルダ化できれば、アップデートは別フォルダを
   丸ごと上書きできる。


!  カスタマイズしたファイルはappに置けばノウハウ部
   分を汚さない。
           Copyright 2010 baserCMS All rights reserved
baserCMSではこんな感じ(1.2系)

!  bootstrap.php
    !    $modelPaths[] = BASER_MODELS;
    !    $behaviorPaths[] = BASER_BEHAVIORS;
    !    $controllerPaths[] = BASER_CONTROLLERS;
    !    $componentPaths[] = BASER_COMPONENTS;
    !    $viewPaths[] = BASER_VIEWS;
    !    $helperPaths[] = BASER_HELPERS;
    !    $pluginPaths[] = BASER_PLUGINS;


!  各定数は、appディレクトリ内と同じ構成にしたbaser
   ディレクトリ内のパスを指定
※ Configure::buildPaths()が定番?

                               Copyright 2010 baserCMS All rights reserved
CakePHPの仕組み

! ファイルの読み込み優先順位

          app



         baser



          cake

           Copyright 2010 baserCMS All rights reserved
読み込みの優先順位

! app_controller.php の場合

/app/controllers/app_controller.php

/baser/controllers/app_controller.php

/cake/libs/controller/app_controller.php

※ baserCMSでは、AppControllerをカスタマイズする場合、baser
  ディレクトリ内のAppController をコピーしてカスタマイズする
  方法を推奨しています。
                 Copyright 2010 baserCMS All rights reserved
CakePHP1.3以降の場合

! App::build というメソッドが用意されていま
  す。
! CakePHP2系については知らないです。ごめ
  んなさい。




           Copyright 2010 baserCMS All rights reserved
ご質問ありませんか?

! ノウハウを貯める仕組みって重要ですよね
! CakePHPを利用されているのであれば
  App::buildを有効活用!


! baserCMSの開発コミッター募集中です。
! ご興味がある方は@ryuringまでDください。




         Copyright 2010 baserCMS All rights reserved
おしまい                                                  おわり



! ご清聴ありがとうございました。




        Copyright 2010 baserCMS All rights reserved

baserCMSにみられるCakePHPノウハウ蓄積法