Sublime Text3で書いたファイルをVagrant仮想環境に同期させる
うちのPython環境はVagrantで作ったゲストOSの中にある。
一方でエディタはSublime Text3を使っている。flake8で補完が効いてらくらく。
なので、ホストOSでSublime Text3を使って書いたファイルを、手間なくゲストOSにも同期させたいと思っていた。
Sublime Text3にはSFTPパッケージがあるので、最初はそれを使おうと思っていたが、それよりもVagrantで共有フォルダの設定をしてしまった方が楽だと気づいた。SFTPパッケージは$30かかるし。
rsyncを使う
ファイルの共有を楽にするためには、vagrantのrsync
機能を使うのがおすすめ。前提としてVagrantのバージョンは1.5以上が必要。
これを使うと、 vagrant rsync
コマンドを打つだけで同期ができる。
さらに、 vagrant rsync-auto
とすれば、共有フォルダを監視してくれて、ファイル更新のたびに自動で同期される。
ちなみに、vagrant rsync
が有効なのは、ホストOS→ゲストOSという流れでファイル共有をするときのみ。
その逆をしたいときは、Vagrantの外部プラグインを使う必要がある。例えばvagrant-rsync-back
などがある。
共有フォルダの設定をする
Vagrantfileの中に設定を書き加えればよい。
このとき、rsync
を使うために、オプションとしてtype: "rsync"
とする必要がある。
設定の例はこんな感じ。
Vagrant.configure("2") do |config| # other config here config.vm.synced_folder "/Users/Udomomo/python_project", "/home/vagrant/python_project/", type: "rsync", owner: "vagrant", group: "vagrant" end
【17/10/15 追記】
上記だけでは足りなかった。以下のようにしなければならない。
config.vm.synced_folder "/Users/Udomomo/python_project", "/home/vagrant/python_project/", type: "rsync", owner: "vagrant", group: "vagrant" rsync__exclude: [".git", ".gitignore", "tmp", "log", "cache"], rsync__chown: false
rsync__exclude
は、ゲストOS上で同期の対象外とするファイルやディレクトリを指定する。.git
や.gitignore
、log
、cache
などを設定するとよい。
これが必要なのは、rsyncによる同期をするとホストOS上にないファイルは全て削除されてしまうから。ゲストOS側でgitレポジトリを作った後に同期をしたら、レポジトリが消えてしまうという痛い目に遭った。
また、rsync__chown
は、rsyncによってゲストOS側のファイルのオーナーやグループ名などが変わらないようにするための設定。v1.6.3から追加されたとのこと。
【追記終】
後はVagrantを再起動させれば、設定が完了する。
vagrant rsync-auto
としておけば、ホストOSのUsers/Udomomo/python_project
配下で更新されたファイルが、ゲストOSの/home/vagrant/python_project/
配下に自動的に同期される。
ちなみにこの設定だが、複数個書くこともできる。新しいプロジェクトが始まるごとにVagrantfileに書き足し、不要なものを消せばよい。
共有フォルダを一つしか設定できないと、毎回そこに行ってファイルを取ってこないといけないので、複数個設定できるのは本当に助かる...。