Windowsで開発を行うときに、ちょっと知っていると便利な小技。
Windowsにはショートカットという特定のファイルやフォルダに対してリンクを作る機能がありますが、ショートカットのリンク先をプログラムが解釈できません。(専用のソースコードが必要)
自分でプログラムを書いたソフトなら何とかなるかもしれませんが、世の中のソフトウェアの大半はショートカットを認識するなんて事はしてくれません。
そこで、有効利用できる仕組みがシンボリックリンクという機能。
シンボリックリンクを使えば、リンクファイル(フォルダ)を使うことでソフトウェアからは、リンクファイルの位置にリンク元のファイル(フォルダ)が存在するものとして扱えるようになります。
コマンドプロンプトでの作成方法
作り方はコマンドプロンプト(右クリックで「管理者として実行」を選択)で以下のコマンドを実行します。
MKLINK /D <シンボリックリンク名> <リンク先フォルダ名(相対or絶対パス)> MKLINK <シンボリックリンク名> <リンク先ファイル名(相対or絶対パス)>
ドラッグ&ドロップでシンボリックリンクを作る
この機能を使うために毎回コマンドプロンプトを呼び出して書くのは面倒なので、ドラッグアンドドロップでシンボリックリンクを作るバッチファイルを用意します。(Windows7の場合は、管理者でログインしている場合にしか使えません)
MKLINK /D "%~d0%~p0%~n1" "%1" pause
バッチファイルの作り方は、テキストエディタで上のコードを入力して「<ファイル名>.bat」で保存するだけです。
上記のコードのバッチファイルは「dir_symlink.bat」へフォルダをドラッグアンドドロップすると、「dir_symlink.bat」を置いているフォルダにドラッグアンドドロップされたフォルダと同じ名前のシンボリックリンクを作成する。というものです。
簡単にコードの説明をすると、、、
- %~d0 ・・・ 実行しているバッチファイルの存在するドライブ名
- %~p0 ・・・ 実行しているバッチファイルの存在するパス(ドライブ名、ファイル名を除いたもの)
- %~n1 ・・・ ドラッグアンドドロップによって渡されたフォルダ名
(ちなみに、D&Dしたのがファイルだったらファイル名が渡される) - %1 ・・・ ドラッグアンドドロップによって渡された対象のフルパス。
- pause ・・・ ユーザの入力があるまでコマンドラインを残す。
というコードを組み合わせて、バッチファイルを置いているフォルダへシンボリックリンクを作成する事を実現しています。
Windows7でのシンボリックリンク
Windows7で管理者でログインしていない場合は、コチラの圧縮解凍ソフト(ダウンロード元)をインストールするとデフォルトで右クリックメニューに「シンボリックリンクをここに作成」が追加されます。
念のためインストールする際のインストール先の設定で、「シェル拡張機能を有効にする」にチェックを入れ、「詳細設定」をクリックし、
以下の「「シンボリックリンクをここに作成」を追加(M) *NTFS」にチェックが入っていればExplzhをインストール後、ファイルやフォルダを右ボタンでのドラッグアンドドロップで「シンボリックリンクをここに作成」がメニューに表示されるようになります。
あとがき
これがどういうシーンで活きてくるか?というと、、、
一般的にはSSDを導入したPCで使うことが多いのではないかと思います。
ユーザーの情報(ダウンロードやデスクトップ、ドキュメントなど)を、OSがインストールされたときのままにしておくと、あっという間にSSDを圧迫してしまいます。
しかし、シンボリックリンクを使って別のドライブ(大容量のHDD)へリンクを作ることでSSDの圧迫を回避することができます。(私もSSD+HDDという構成で、書き換えが頻発するフォルダは極力HDDへシンボリックリンクを張るようにしています。)
他にはアプリ、ソフトの開発者に限りますが、大規模な開発になってくるとtrunk、branch、tagといったバージョン別のコード、開発環境管理が必要になってきます。
ソースコードであればファイルを直接開くなり、プロジェクトファイルを開きなおせば環境を変える事ができます。しかしSDKのようにライブラリーはパスを書き換えたり、環境を設定しなおしたり・・・と、1人の開発環境の中に複数バージョンを構成、管理するのはとにかく手間がかかります。
そんなときに、このシンボリックリンクの機能を使えばバージョンを変えてのパス通しが簡単にできます。
フォルダ名をリネームして使えば良いんじゃない?と言われればその通りですが、バージョンであったり、ブランチ情報などがどこかで管理されている必要があります。シンボリックリンクを使えばバージョン番号を含んだフォルダ名をそのまま維持しながら正規のパスでライブラリにアクセスしたりすることが可能になるので、使いこなせば開発が捗ると思います。
トラックバック & ピンバック