VagrantでSymfony開発

Vagrantで
Symfony開発
2014/4/19 @karakaram
Symfony勉強会 #9
14年4月20日日曜日
自己紹介
• @karakaram
• karakaram-blog
http://www.karakaram.com
14年4月20日日曜日
今日話すこと
• VagrantでSymfony開発してみて
• つまずいた所
• どのように解決したか
14年4月20日日曜日
Vagrantとは
• VirtualBoxなどの仮想化ソフトウェアの
操作を自動化するツール
• Chefなどと連携することで、コマンド
一発で仮想環境を構築することができる
14年4月20日日曜日
なぜVagrantを使おうと思ったか
• 業務の都合上、ホストOSはWindows
• VirtualBoxでプロジェクトごとに仮想
Linuxを立ち上げ、その中で開発
14年4月20日日曜日
なぜVagrantを使おうと思ったか
• メールや仕様書はWindows、開発は仮
想OS
•仮想OSとホストOSの移動が面倒
• ホストOSで開発したいとのチームの声
14年4月20日日曜日
なぜVagrantを使おうと思ったか
• Vagrantのsynced_folderを利用した開
発スタイルが良さげ
• 試してみよう
14年4月20日日曜日
Vagrantでの開発スタイル
ホストOS
Windows
Mac
仮想OS
CentOS
$ vagrant up
ソースコード編集
バージョン管理
テスト実行
ブレークポイント
共有フォルダ
synced_folder
PHP実行
テスト結果応答
デバッグステップ実行
動作確認
ホストOSで開発
仮想OSでPHP実行
仮想OSのGUIを使わない
14年4月20日日曜日
synced_folder
• synced_folderで、ホストOSと仮想OS
のフォルダを共有する
• 共有フォルダをWEBサーバのドキュメ
ントルートにして、Symfonyを丸ごと
配置
# Vagrantfile
config.vm.synced_folder "host_folder", "guest_folder", :create => true, :owner=>
'vagrant', :group=>'vagrant', :mount_options => ['dmode=755,fmode=664']
14年4月20日日曜日
synced_folderが遅い
• 便利なsynced_folderだが、Symfony
のような巨大フレームワークと相性が悪
い
• ファイル数が多い場合、パフォーマンス
が落ちる
• 1リクエスト処理に5秒∼10秒かかる
14年4月20日日曜日
速くできないか調べた
• synced_folderのNFS化
• Samba
• SymfonyのキャッシュをRAMディスク
に
• Xdebug無効
14年4月20日日曜日
対策の結果
• 1リクエストあたり5秒∼10秒かかって
いたが、1秒前後に短縮させることに成
功
• まだ少し遅いけど何とか実用レベル
14年4月20日日曜日
synced_folderのNFS化
• ホストOSがMacの場合は
synced_folderのtypeをNFSに
# Vagrantfile
config.vm.synced_folder "host_folder", "guest_folder", type: "nfs"
# MacのNFSを有効化
$ sudo touch /etc/exports
$ sudo nfsd enable
# 仮想OS再起動
$ vagrant reload
14年4月20日日曜日
Samba
• ホストOSがWindowsの場合、NFSを
利用できない
• 仮想OSにSambaを入れてフォルダ共有
• synced_folderはオフに
14年4月20日日曜日
キャッシュをRAMディスクに
• SymfonyのキャッシュとログをRAMデ
ィスクに出力
//app/AppKernel.php メソッドを追加
public function getCacheDir()
{
if (in_array($this->environment, array('dev', 'test'))) {
return '/dev/shm/symfony/cache/' . $this->environment;
}
return parent::getCacheDir();
}
public function getLogDir()
{
if (in_array($this->environment, array('dev', 'test'))) {
return '/dev/shm/symfony/logs';
}
return parent::getLogDir();
}
14年4月20日日曜日
キャッシュをRAMディスクに
• cacheをRAMディスクに出力すると速
くなるが、困ることも
• PhpStormのSymfony2-Pluginは入
力補完のためにキャッシュを利用してい
る
• 共有フォルダ上にキャッシュがないと補
完が効かなくなる
14年4月20日日曜日
キャッシュをRAMディスクに
• 10分に1回、rsyncでRAMディスクの
キャッシュを共有フォルダに同期
• ホストOSのPhpStormからキャッシュ
が見えるようになり、補完が効く
RAMディスク
共有フォルダ
(ドキュメントルート)
/dev/shm/symfony/cache /var/www/vagrant/symfony/app/cache
rsync
cache
参照
14年4月20日日曜日
Xdebugは無効に
• Xdebugは遅いので無効に
• どうしても必要な時だけ有効にする
• デバッガを使わないでテストを書こう
14年4月20日日曜日
Windowsはあと一歩
• Sambaによるファイル共有は、パフォ
ーマンスは問題ない
• 共有フォルダでgitを使うとlinuxとのパ
ーミッションの違いに悩まされることも
• Vagrant1.5で追加されたrsyncによる
共有が状況を打開してくれるかも?
14年4月20日日曜日
rsyncによる共有に期待
• rsyncによる共有は現時点では同期がホ
スト→ゲストの一方通行
• venderとcacheの変更をホストOSに伝
えるのが面倒なので、Symfony開発に
は不向き
• 双方向に同期するissueが出ていたの
で、今後に期待
14年4月20日日曜日
まとめ
• VagrantでSymfony開発は
synced_folderに工夫が必要
• Macでの開発は実用レベル
• Windowsは(個人的には)あと一歩
• synced_folder type: rsyncに期待
14年4月20日日曜日
おまけ
• サンプルVagrantfile + Chef
• CentOSにSymfony環境を構築
• vagrant up 後すぐにSymfonyを試せる
https://github.com/karakaram/vagrant-php-symfony2-sandbox
14年4月20日日曜日
1 of 22

More Related Content

Viewers also liked(7)

Similar to VagrantでSymfony開発(6)

VagrantでSymfony開発