Edited at

Windows上のVagrant環境で、ホストOSとゲストOS 間でシンボリックリンクを共有する

More than 3 years have passed since last update.

サーバサイドプログラムの開発をWindows上のVagrant環境で行っているとき、しばしばシンボリックリンクの設定に悩むことがあったのでメモしておきます。


ホストOS (Windows) のシンボリックリンクをゲストOS (Linux)上で認識させる

Windowsのシンボリックリンク機能を使用すれば可能です。

なお、Windows 上で作成できるリンク的な機能としては以下の4種類が存在しますが、ホストOSおよびゲストOS両方で正しく認識できるのはシンボリックリンクのみです。


  • ショートカット

  • シンボリックリンク

  • ジャンクション

  • ハードリンク

シンボリックリンクは「mklink」コマンドを使用して作成することもできますが、「Link Shell Extension」を使用すれば、エクスプローラ上から右クリックメニューで作成することもできて楽です。


ゲストOS (Linux) のシンボリックリンクをホストOS (Windows) 上で認識させる

こちらは、Linuxの「ln」コマンドを使用して普通に作成すれば、ホストOS上でも正しく認識できます。

ただし、Vagrantを管理者権限で起動しておかないと以下のエラーメッセージが表示され、リンクを作成することができません。

$ ln -s Vagrantfile Vagrantfile.link

ln: creating symbolic link `Vagrantfile.link': Protocol error

コマンドプロンプト上から「vagrant up」を実行している場合は、スタートメニュー上のコマンドプロンプトを右クリックして、「管理者として実行」で起動すればOKです。

2015/07/06 追記

注意点として、Linux側でシンボリックリンクを絶対パスで指定した場合、Windows側で正しく参照することが出来ません。

つまり、

$ ln -s Vagrantfile Vagrantfile.link

この書き方はWindowsでもシンボリックリンクとして認識されますが、

$ ln -s /vagrant/Vagrantfile /vagrant/Vagrantfile.link

この書き方だとダメです。

Error Code: 123 のようにエラーになります。


付記

なお、Windows のシンボリックリンクはGitにコミットすることができないので、あらかじめ .gitignore で無視してやる必要があります。