Cakeboxのsynced_folderでrsyncやNFSを使う
iPhone 6s Plus で大手キャリアからMVNO事業者に乗り換えようと思っているタナカです。今日はCakePHP開発環境のCakeboxを快適にするTipsを紹介します。
以前弊社カガタが紹介したCakebox、便利ですね。クライアントワークだと実運用環境と同等のPHPバージョン・PHPエクステンションなどの構成にしたいので、 centos | Atlas by HashiCorpやbento | Atlas by HashiCorpをベースに開発環境を構築することが多いですが、実験的な環境を最速で作るのには最高のツールです。
Cakebox…Vagrantを使ったCakeアプリ開発環境。Cakeアプリ新規作成時の各種作業(DB作成・バーチャルホスト設定など)を自動化してくれるので簡単に新規作成できます
簡単便利ですが、synced_folderでvboxsf?を使っているからなのか、Cakeアプリの動作はちょっと遅いです。新規作成時のデフォルトページ(必要な設定ができてるかチェックしてくれるページ)でも毎回リロードしても600~700ミリ秒かかっています。(Safariの開発ツール)
NFSやrsyncで動作させることができないか調べたところ、Cakebox.yaml - Cakebox には
synced_folders:
# ...略...
- local: /tmp/fast/non-windows/nfs-mounted/folder
remote: /tmp/fast
mount_options: 'type: "nfs"'
# ...略...
と書いてあります。しかし試してみるとフォルダ共有でエラーになってしまいます。CakeboxのVagrantfile はほとんど何も書いて無くて実際の設定は .cakebox/Vagrantfile.rb
に書いてあるようです。そこでこのファイルとCakebox.yaml
を以下のように変更するとnfsに変更すると動作しました。(Windowsならtype: "nfs"
→type: "rsync"
に置き換えてみてください)
.cakebox/Vagrantfile.rb
先頭が-
の行を削除、+
の行を追加してください
@@ -84,7 +84,8 @@ class Cakebox
# Mount small (and thus fast) scripts folder instead of complete box root folder
config.vm.synced_folder '.', '/vagrant', disabled: true
- config.vm.synced_folder '.cakebox', '/cakebox', :mount_options => ["dmode=777","fmode=766"], create: true
+ config.vm.synced_folder '.cakebox', '/cakebox', type: "nfs"
# Temporarily mount .vagrant directory so we can replace the Vagrant 1.7.x
# secure private key until these issues are resolved:
@@ -107,7 +108,11 @@ class Cakebox
# as used on Windows UNLESS the user specifies his own (Vagrant supported)
# mount options in Cakebox.yaml.
unless Vagrant::Util::Platform.windows?
- if folder["mount_options"].nil?
+ if folder["type"] == "nfs"
+ config.vm.synced_folder folder["local"], folder["remote"], type: "nfs"
+ elsif folder["type"] == "rsync"
+ config.vm.synced_folder folder["local"], folder["remote"], type: "rsync", rsync__auto: true, rsync__args: ["--verbose", "--archive", "--delete", "-z", "--chmod=Dug=rwx,Do=rwx,Fug=rw,Fo=rw"]
+ elsif folder["mount_options"].nil?
config.vm.synced_folder folder["local"], folder["remote"], :mount_options => ["dmode=777","fmode=766"], create: true
else
config.vm.synced_folder folder["local"], folder["remote"], create: true, :mount_options => [folder["mount_options"]]
Cakebox.yaml
box_private_key:
synced_folders:
- local: Apps
remote: /home/vagrant/Apps
+ type: nfs
apps:
syncedfolder で NFSを使う方法自体についてはVagrant + VirtualBox で nfs を使って、syncedfolder を速くする - Shin x blogが参考になりますので事前に設定しておいてください。Windowsでrsyncを使う場合はVagrant - rsyncでファイルを同期する(Windows) - Qiitaが参考二なります。
vagrant reload
して再度Safariの開発ツールで計測してみると、150~250ミリ秒になりました。応答時間がだいたい1/3になっています。
まとめ
Cakebox でも rsync / NFS が使えます