🧊

Vagrantのsynced_folderはrsyncで

環境はVagrantで、でもコードはGitで、みたいな。
で、Gitのコードはホストにあるので、ゲストにはSynced Folderでーっていう。

ありますよね、こういう経験。

synced_folder

ホスト(=自分のOS環境)と、ゲスト(=Vagrant内)を同期してくれる便利な機能ですが、普通に使うとハマります。

ファイルの量が少ないならいいけど、だいたいのケースでそんなことないはず。

Vagrant.configure("2") do |config|
  config.vm.synced_folder "~/path/to/your/git/folder", "/home/vagrant/path/to/synced"
end

こんなふうにtypeに何も指定しないままだと、あれこれ重くてまったく仕事になりません。
特にRailsとかやってると顕著な気がするけど、

  • rails serverで何分もかかったり
  • ページ開いてもSprocketsが1分/ファイルとか

このままではマジで使えないです。

type: "rsync"

Vagrant 重い」とかで検索すると、type: "nfs"で快適!みたいなのがよく引っかかります。
ただMacでしか使えない上に、パーミッションまわりで謎にハマることが多いので注意。(経験談)

そこでtype: "rsync"!

Vagrant.configure("2") do |config|
  config.vm.synced_folder "~/path/to/your/git/folder", "/home/vagrant/path/to/synced",
    type: "rsync",
    rsync__args: ["--verbose", "--archive", "--delete", "--copy-links", "--times", "-z"],
    rsync__exclude: [".git/"]
end

rsyncに渡すオプションはご自由にですが、だいたいこんな感じでやるとすべてうまく行きます。

RSync - Synced Folders - Vagrant by HashiCorp

あとは`vagrant up`して、`vagrant rsync-auto`ってしとけば、リアルタイムに同期される!素敵!