PHP開発で
効率を上げるために
やってきたこと
2015-11-24 PHP BLT #1
GMOリサーチ 寺田渉
facebook: 寺田渉
github: waterada
twitter: @wa_terada
自己紹介 (会社)
- PHP (CakePHP) を主に使って開発
- 継続的インテグレーション
- github + git flow で運用
- PHPUnit で カバレッジ 100%
- Behat (Selenium Driver 経由の画面テスト) 利用
- vagrant で開発環境構築
自己紹介 (趣味)
CakePHP 公式ドキュメント 翻訳
自己紹介 (趣味)
ボードゲーム 翻訳
自己紹介 (趣味)
TED 翻訳
自己紹介
プログラミング & 翻訳
大好き人間です
伝えたいこと!
開発効率 を上げた以下の施策
1. vagrant
効果
1. vagrant
特別にしたこと
1. vagrant
2. プロジェクトの setup シェル
プロジェクト単位の開発環境構築シェル。
そのプロジェクトを開発するために
必要な手続きが 全て 書かれている。
効果
2. プロジェクトの setup シェル
特別にしたこと
2. プロジェクトの setup シェル
3. ソースコードの自動生成
DBのテーブル定義を元に
一覧(検索)/追加/削除/変更画面
を自動で生成する。
このような一覧画面は
新人の登竜門的な存在(=単純開発)で、
ボリュームもそこそこあった。
効果
3. ソースコードの自動生成
特別にしたこと
3. ソースコードの自動生成
いっぱいやった:
4. 単体テストが仕様の門番
効果
4. 単体テストが仕様の門番
特別にしたこと
4. 単体テストが仕様の門番
ソースをテストするのでなく、
仕様をテストする。
それは、 仕様を守る門番 を配置するということ。
誰かが仕様と異なる使い方をしたらアラート出るように。
仕様を守るテストとはどんなものなのか。
4. 単体テストが仕様の門番
例えば計算機的なシステムでいうならば:
誤) event に "NUM" がセットされていたら
backupRegisterにその数字をセットする
正) 数字ボタンを入力したら画面にその数字が表示される
前者は、具体的に内部実装に 踏み込み過ぎている。
イケてないコードを リファクタしただけでテストが落ちる。
無駄) イケてないコードを書く→それにあわせてテスト書く
理想) 仕様に合わせて メソッドの枠やテスト項目をまず書く。
→自然と 疎結合 になる
5. 他にも
5. 他にも - Fabricate
単体テストで Fabricate
説明:
- DBのテスト用のデータ生成を行いやすくするプラグイン。
- テストで 使う列の値だけ を指定すればよい。
(それ以外は自動生成される。)
効果:
- テストの 可読性 が著しく上がる。
- テストの メンテ がしやすくなる。
特別にしたこと:
- DBのデータを複数メソッドで 共有するのをやめて、
テストメソッドごとにデータを生成するようにする。
5. 他にも - composer
composer
効果:
- 依存モジュールの見える化。
(構築手順が圧倒的に少なくなる。)
- 依存モジュールの適用が composer install だけに。
(ブランチごとに依存が変わっても対応可能。)
特別にしたこと:
- composer install
composer update xxx/xxx
の使い分けの徹底(composer update は絶対に禁止)。
- composer.json と composer.lock を git 管理。
これで皆がほぼ同じ環境を維持できる。
5. 他にも - gitフロー、PHPStorm
gitフロー
効果:
- 同時での複数機能開発、
ソースレビューが圧倒的に楽になった。
PHPStorm
効果:
- 型チェック してくれる。
- 静的解析して結構 賢く警告/補完 してくれる。
- 差分確認 が楽。
facebook: 寺田渉 github: waterada twitter: @wa_terada
以上です!
詳細に興味がありましたら、ぜひお声がけください。