PHPカンファレンス2012 参加メモ(その2)
フラットなPHPからフレームワークへ(前田雅央氏)
Step1 View部分の分離
- HTML部分を別ファイルに分けてrequire
- テンプレートの変更に強い
Step2 アプリケーション(ドメイン)部分の分離
- コントローラは制御するだけ
- コントローラが本来のコントローラに → シンプルなMVC
Step3 Viewにレイアウト機能を追加
- レイアウト機能
- Viewの共通部分を再利用できる仕組み
- ob_start() ... ob_get_clean()
- テンプレートの可用性がUP
Step4 ページを追加する
- Model, Layoutが共通化できている
Step5 フロントコントローラー
- すべてのリクエストを必ず最初に受け付ける1つのファイル
- 設定の読込などの集中管理
- ルーティング機能
Step6 ライブラリを利用する
- Symfony component
- HttpFoundation Componentは今後のデファクトスタンダード
- 簡易的なフレームワークが完成
- 車輪の再開発を防ぐ
- 必要な機能だけ利用できる
- 再利用性が高い
Final フレームワークを使うとは?
Git x Pull Request チーム開発最終奥義(株式会社クロコス 柄沢聡太郎氏)
スライドGitのメリット
- ローカルで気軽にコミット
- ローカルで気軽にブランチを切る
- 賢く、高速なマージ
⇒ これを生かしたブランチ戦略
ブランチ戦略
- master
- 常に、最新の安定したソースコードが手に入る(リリースされたコード)
- develop
- 日々の開発を行う。リリースできるタイミングでmasterにmerge
- release
- リリース前の確認を行う。必要があれば修正する
- feature
- 複数の異なる機能を平行して開発を進める
- developからbranch、完成したらdevelopにmerge
- hotfix
- developの完成を待たずにmasterの修正がしたい
- masterからbranch、完成したらmasterにmerge、developにも反映
ツール
- git-flow
- nvie氏謹製
- git-daily
- クロコスで使われている
- PHP製
Pull Requestを使った開発手法
- ブランチ戦略にPull Requestを入れ込む
- merge前にpull requestでレビュー = 細分化されたコードレビュー
- 変更のコンテキストが明確
- 小さなpatch
-
- パッチのやりとりが可視化され、オープンで、記録残る
- 該当のコードの責任を持つ
Generator入門(Makoto Kuwata氏)
関数の実行の一時中断と再開ができる
Generator関数とは:yieldを使った関数
前回の終了位置から再開
- Generator関数
function gfunc() {
$i = 0;
yield $i;
$i++;
yield $i;
$i++;
yield $i;
}
- 呼び出し側
$g = gfunc(); ← ジェネレータオブジェクトを作成
foreach($g as $x) { ← foreach文で実行
var_dump($x);
}
コツ
- Generator関数:ループの終了条件を指定しない(無限ループにする)
- 終了条件は呼び出し側で指定する
利点
- ループ処理から、汎用性の高い箇所だけを切り出せる
- 1つの大きなループを、複数の小さなループに分解できる
- メモリ消費量が少ない
- データを読み込んだはしから処理できる
ユニットテストのためのクラス設計(t_ishida氏)
ユニットテストのためのクラス設計
- 強い"依存"を徹底的に排除する
- クラス間の依存
- 外部システムへの依存
- 複雑度を下げる
依存の排除(外部システム)
- プロキシパターン
複雑度を下げる
- 同じタイミングで実行されるからと言って関連のないコードを同じ場所におかない
- ifの入れ子になったらメソッドを分割する