ちょっと 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 のターミナル上で変更をかけても即座に反映される。