Help us understand the problem. What is going on with this article?

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

More than 5 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 で無視してやる必要があります。

gyohk
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away