Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

VagrantでSymfony開発

5,083 views

Published on

Published in: Software
  • Be the first to comment

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日日曜日

×