理系学生日記

おまえはいつまで学生気分なのか

cygwin 上のシンボリックリンクの扱い

ちょっと Windows で開発環境を整えようと思って、ひさしぶりに cygwin を入れました。
いままでは cygwin 環境を作ったあと、cygwin シンボリックリンクを作っても cygwin 内でしか使ってなかったんだけど、Windows でも使いたいって思って調べた。

シンボリックリンク

まず、シンボリックリンクは Unix 系だけで使用できるという過去の認識は正さないといけない。
Windows OS でも、Vista/Windows Server 2008 以降はシンボリックリンクがサポートされてる(もちろん、Unix のシンボリックリンクと同一というわけではない)。これによって、リモートサーバ上の共有フォルダや、ファイルに対してもリンクを張れることができるようになった。

一方で cygwin は、Unix 系のシンボリックリンクをどう Windows 上で作成するかについてはいくつかの選択肢を持っていて、この「Windows 上のシンボリックリンク」の仕組みも使うことができるようになってる。具体的な選択肢は以下のとおり。

  • ショートカット
  • NFS のシンボリックリンク (?)
  • Windows のシンボリックリンク

特に指定しなければショートカットが使われる。まぁ、Windows のシンボリックリンクが OS およびファイルシステム(NTFS)が限定されることを考えると妥当だと思う。

選択方法

選択方法としては、CYGWIN 環境変数を使用する。

概要
winsymlinks Windows のショートカットを使用する
winsymlinks:lnk 同上
winsymlinks:native Windows のショートカットを使用する。作成に失敗した場合はショートカットでの実現を試す
winsymlinks:nativestrict Windows のショートカットを使用する。作成に失敗した場合もショートカットは試さない

ハマりポイント

CYGWIN 環境変数の設定は、多くの場合、Windows の環境変数(マイコンピュータを右クリック→環境変数)で設定するもので、ぼくもそうだと思っていたのだけれど、今回はうまくいかなかった。cygwin 用に立ち上げたターミナルから当該の値が参照できない。
ログインシェルのスタートアップスクリプト(ex., .zshrc) で設定したら問題なかった。また、ln -s とかする度に参照されるようで、cygwin のターミナル上で変更をかけても即座に反映される。