VagrantでSymfony開発

4,747 views

Published on

Published in: Software
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,747
On SlideShare
0
From Embeds
0
Number of Embeds
3,209
Actions
Shares
0
Downloads
2
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

VagrantでSymfony開発

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

×