Cakeboxのsynced_folderでrsyncやNFSを使う

No Photo

iPhone 6s Plus で大手キャリアからMVNO事業者に乗り換えようと思っているタナカです。今日はCakePHP開発環境のCakeboxを快適にするTipsを紹介します。

以前弊社カガタkagata's logoが紹介したCakebox、便利ですね。クライアントワークだと実運用環境と同等のPHPバージョン・PHPエクステンションなどの構成にしたいので、 centos | Atlas by HashiCorpbento | 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 が使えます

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ