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 ライブラリを利用する

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氏)

  • ジェネレータ => セーブ機能
  • ジェネレータ関数 => ゲームシナリオ
  • ジェネレータオブジェクト => 冒険の書(セーブデータ)
  • yield文 => 宿屋(セーブポイント

関数の実行の一時中断と再開ができる
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の入れ子になったらメソッドを分割する