ベストだと思うWindowsでの環境とか言ってますけど、伝えたいのはフォルダ共有周りの話です。
(ブログの方で公開すればよかったかもなぁ・・・と若干思ってる)
前提
Vagrantを利用して立ててるの前提です。
あと、コマンドプロンプトは管理者権限で開いている状態です。
一時期のシンボリックリンク貼れない問題に関して
一時期まで私はnode_modulesをシンボリックリンクでどうにか貼ろうとして以下の様な記事を書いてます。
windowsでlaravel5をvagrantの共有フォルダで開発しようと思っている人へ。
Virtualboxのバージョンが上がったことでどうやらシンボリックリンクが貼ることが出来るようになったみたいです。
フロントエンドをごりごりされてないようであればシンボリックリンクで対応するのがベストであると思います。
ただし、、、
browserify-shimなどのプラグインはシンボリックリンク経由ではファイルを読めないみたいなのです・・・!
これは知らなかったのでどうしようかどうしようかと考えました。
そして結論としては以下です。
vagrant-winnfsdプラグインとWindows上でNodeを利用する
winnfsdプラグインを知らない人は多いと思うのですが、Macの場合NFSという機能が有り、Vagrantのフォルダ共有が遅いということでググるとよく検索にひっかかります。
そしてWindowsにはNFSの機能が無いのですが、winnfsdプラグインを使うことでこのNFSがWindowsで使えます。
最初に言っていますが、コマンドプロンプトは管理者権限で開いておいてください。
vagrant-winnfsdを利用する
インストールは
vagrant plugin install vagrant-winnfsd
これで。
あとは、Vagrantfileのフォルダ共有のコードにtype: "nfs"
を追加するのです。
これはvagrantの公式でも書かれているので確認してくださいー。
https://www.vagrantup.com/docs/synced-folders/nfs.html
config.vm.synced_folder ".", "/vagrant", type: "nfs"
Homesteadの場合だと、homestead.yamlのfoldersを以下のような指定をします。
通常の場合、普通にtype: nfs
を指定すれば問題ないのですがWindowsの場合は少し変わった書き方にしないと動いてくれません。
folders:
- map: "C:\\product\\laravel"
to: /home/vagrant/laravel
options:
type: nfs
こんな風にoptionsでtype:nfsを指定します。
あとはですね、NFSの対象とするuidとgidを指定しなきゃいけないのです。
通常だとフォルダがrootになってしまうので色々と大変です。vagrantユーザーの場合はどちらも1000番みたいなので、これを指定します。
config.winnfsd.uid = 1000
config.winnfsd.gid = 1000
もしuidとgidが違った場合は仮想環境下で以下のコマンドで調べてください。
UIDの調べ方
$ id -u vagrant
1000
GIDの調べ方
$ getent group vagrant
vagrant:x:1000:vagrant
↑の数字の部分です
ここまで指定したらvagrant upです。
Node周りはNodistで対応
npm installやgulpを利用する場合はWindows環境上で行います。
仮想環境上でやってもいいのですが、以前のシンボリックリンクみたいにしてないと大抵失敗することが多いです。
また、仮想環境でnpm installするよりもホスト環境でやったほうが早いのです。
自分の場合は、Node周りにはNodistというWindows用のNodeのバージョン管理ツールを利用しています。
こいつの導入や、設定に関しては書きません。
終わり
これがベストだと思います。rsyncも有りだとおもいますすす