はじめに
Windowsで使われているファイル システムのNTFSではリパースポイント(再解析ポイント)をサポートしています。
実際には存在しない場所にあたかもファイルやディレクトリがあるように配置することができます。
ジャンクション
対象: ディレクトリのみ
例えば C:\Users\All Users は C:\ProgramData へのジャンクションです。
作成方法
コマンド プロンプト
MKLINK /J 作成先ディレクトリ名 リンク元ディレクトリ
シンボリックリンク
対象: ファイルとディレクトリ、ネットワークの共有フォルダへのリンクも作成可能、相対パス設定可
作成方法 (ファイルの場合)
管理者権限 もしくは開発者モード コマンド プロンプト
MKLINK 作成先ファイル名 リンク元ファイル
作成方法 (ディレクトリの場合)
管理者権限 もしくは開発者モード コマンド プロンプト
MKLINK /D 作成先ディレクトリ名 リンク元ディレクトリ
ハードリンク (リパースポイントではない)
対象: 同じ物理パーティション内のファイルのみ
作成方法
コマンド プロンプト
fsutil hardlink create 作成先ファイル名 リンク元ファイル
何に使うの?
シンボリックリンク
ディレクトリを固定しておきたいけど、中身は動的に変えたい。
例えば、C:\Application というディレクトリに 1.00 1.20 2.00 3.10 のようなディレクトリがあるとして、Latest という名前のシンボリックリンクを作成してショートカットを作成しておけば、
新しいバージョンのディレクトリを作成したらそこへのリンクを Latest に作り直すだけで、
C:\Application\Latest\Application.exe は常に最新のアプリケーションを指す、という仕掛けを作ることができます。
ハードリンク
C:\Application\bin\Release\Application.exe というファイルがあるとします。
これを C:\Applications\Application.exe にリンクしておけば、
C:\Application\bin\Release\Application.exe をビルドし直すだけで C:\Applications\Application.exe も最新になる、という仕掛けを作ることができます。
ハードリンクは一度削除してしまうとリンクが切れます。
例えばVisual Studioでアプリケーションを"ビルド"で作成した場合は問題ありませんが、"リビルド"をすると一度ファイルが削除されてしまうので、新しくビルドされたファイルはリンク先とは異なる中身になります。
但しリンク元が削除されてもリンク先が消滅するわけではなく、消滅した瞬間にリンク先がリンク解除直前のリンク元と同じものになるという特殊な振る舞いをします。
リンクされた状態では複数のファイルが同じものを指すため、リンク個数分のディスク領域を消費することがありません。
ジャンクションはディレクトリのシンボリックリンクとほぼ同じ振る舞いなので現在ではあまり使い道はありません。
(ジャンクションはWindows 2000からサポート、シンボリックリンクはWindows Vistaからサポート)
リンクの削除
リンク先を削除すると、リンク元に影響を与えずに削除することができます。
便利なツール
コマンドを入力するのが得意な人には良いかもしれませんが、Windowsはエクスプローラのようなシェルを使うのが一般的です。
エクスプローラのコンテキスト メニューからリンクを作成する機能を呼び出すには、以下のようなツールを使うのが便利です。
Link Shell Extension - Gerhild's & Hermann's Site
ファイルやディレクトリをエクスプローラで右ドラッグ、作成したディレクトリやその背景でボタンを離すと、ここにリンクを作成... → ハードリンク / シンボリック リンク のメニューが現れます。
ご利用は自己責任でお願いします
濫用は禁物
紹介しておきながらですが、リパースポイントやハードリンクは別の場所のディレクトリやファイルをリンクしますが、別の場所を利用するという目的だけで濫用すべきではありません。
あくまでアプリケーションやバッチファイル等のプログラムに対して柔軟な動作させるのには向いていますが、
特にユーザーに対して別の場所のものを提供するだけであればこれらのリンクではなくショートカットの方が適しています。
特にハードリンクはほぼコピーと同じような振る舞いを与える事ができますが、リンク関係の把握や通常のファイルとの区別、リンク切れの管理がしにくいため使いどころは限られます。
リパースポイントもハードリンクも、エクスプローラからファイルのプロパティを開く事でリンクを確認することができます。
ジャンクションやシンボリックリンクは、上位のディレクトリへリンクする事で無限ループの階層を作成することも出来てしまいます。