こんにちは、阿久津です。一般的なOSでは実存するファイルに対して、参照性を高める場合や別名を付けるため、"リンク"を作成する機能が備わっています。OSによって呼称は異なりますが、Windows OSでは拡張子「.lnk」を持つショートカットがそれにあたり、初期状態では拡張子が非表示になっているため、意識される方は多くないでしょう。

その一方で以前から実装されながらも、あまり表に出ることのなかったジャンクションやシンボリックリンクといった機能は、Windows Vista以降から活用されるようになりました。例えばWindows 7のユーザーフォルダーはジャンクションによって下位互換性を実現しています(図01)。

図01: ユーザーフォルダーではいくつかのフォルダーがジャンクションとしてリンクされており、コマンドラインからの移動は可能です

まずはジャンクションの話から始めましょう。そもそもリンクにはハードリンクとソフトリンクという二種類が存在し、両者とも特定のファイルやフォルダーに対して別名で参照するという役割は同じながらも、実装時期やNTFSのバージョンなどによって機能が異なります。

ハードリンクの場合、ベースとなるファイルを編集しても、リンク先のファイルを編集しても結果は同じように反映されます。これは元となるデータが存在し、ハードリンクによって作成されたファイルも元のファイルも同列に扱われますので、ベースとなるファイルを削除しても、ハードリンクで作成したファイルに影響を及ぼすことはありません(図02~08)。

図02: しかし、エクスプローラーでジャンクションとしてリンクされたフォルダーにアクセスすることはできません

図03: コマンドプロンプトから「mklink /h {作成するファイル名} {元のファイル}」と実行するとハードリンクが作成できます

図04: 元のファイルをメモ帳で開き、適当に内容を編集してから保存します

図05: ハードリンクで作成したファイルを開きますと、元のファイルで編集した内容が反映されます

図06: 今度はハードリンクで作成したファイルを、編集してから保存します

図07: 再び元のファイルをメモ帳で開きますと、図06で編集した内容が反映されたことを確認できます

図08: ファイルがハードリンクされた否かを確認するには、「fsutil hardlink list {対象となるファイル}」と実行します。画面の例では「ハードリンク.txt」の元となるファイルは「元のファイル.txt」であることが確認できました

ソフトリンクはシンボリックリンクなどと呼ばれることもありますが、OSの実装形式によって名称が異なります。Windows OSでは、UNIX系OSが実装しているシンボリックリンクの一部機能を踏襲したショートカットを当初から搭載し、Windows 2000からはUNIXのシンボリックリンクに似た機能を持つジャンクション、Windows Vista以降はUNIXの同名機能と同等のシンボリックリンク機能を用意するようになりました。

まずショートカットは拡張子「.lnk」(通常は非表示)を持つリンクファイルを作成する機能で、あくまでも実体となるファイルを参照するための情報ファイル。ジャンクションは後述するシンボリックリンクの下位機能なので割愛します。

そのシンボリックリンクは、ジャンクションと異なりファイルへのリンクやUNCパス上のファイルにリンクを張ることができるため、本来のソフトリンク機能として活用することが可能です。また、ファイルの内容に対する操作結果はハードリンクと同じですが、あくまでもソフトリンクのため、元となるファイルを削除しますと、シンボリックリンクで作成したファイルは意味をなしません(図09~13)。

図09: コマンドプロンプトから「mlkunk {作成するファイル名} {元のファイル}」と実行するとシンボリックリンクが作成できます

図10: 「dir /a」と実行すれば、どのファイルがシンボリックリンクファイルなのか確認できます

図11: プロパティダイアログに<ショートカット>タブが現れますが、ほとんどの操作ができないようにグレーアウトしています

図12: シンボリックリンク元である「元となるファイル.txt」を削除します

図13: するとシンボリックリンクファイルである「シンボリックリンク.txt」を開いても、内容を操作することはできません

まとめますと、それぞれ実装時期や特徴がありますが、Windows 7をメインOSとして活用している我々としては、シンボリックリンクを主たるリンク機能として活用するのが良いことになります。今回は一例としてアプリケーション本体やデータフォルダーを別ドライブに待避させ、ホストドライブの空き容量を確保するチューニングを紹介しましょう。今回はiTunesを例に手順を進めます。

1.移動先のドライブに「Programs」フォルダーを作成します。
2.タスクマネージャーで稼働中のプロセスを停止させます。
3.対象となるアプリケーションのフォルダーを移動させます。
4.移動先のドライブに「Data」フォルダーを作成します。
5.アプリケーションが使用するデータフォルダーを移動させます。
6.コマンドプロンプトを起動します。
7.「mklink /d "C:\Program Files\iTunes" "D:\Programs\iTunes"」(パスは環境によって異なります)を実行します。
8.「mklink /d "C:\Users\Public\Music\iTunes" "D:\Data\iTunes"」(パスは環境によって異なります)を実行します。

これでチューニングが終了しました。なお、上記の手順は管理者権限を持つアカウントで実行してください(図14~25)。

図14: 移動先となるドライブ(ここではDドライブ)を開き、何もないところを右クリック。メニューから<新規作成>→<フォルダー>とクリックします

図15: フォルダー名を「新しいフォルダー」から「Programs」などわかりやすい名称に変更します

図16: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「taskmgr」と入力して<OK>ボタンをクリックします

図17: <プロセス>タブを開き、「iTunesHelper.exe」を選択して<プロセスの終了>ボタンをクリックします。確認をうながすダイアログが現れたら<プロセスの終了>ボタンをクリックしてください

図18: 続いてProgram Filesフォルダーを開き、「iTunes」フォルダーを図15で作成したフォルダーに移動させます

図19: 再び移動先となるドライブを開き、何もないところを右クリック。メニューから<新規作成>→<フォルダー>とクリックします

図20: フォルダー名を「新しいフォルダー」から「Data」などわかりやすい名称に変更します

図21: <スタート>メニューを開き、<ミュージック>をクリックします

図22: ミュージックライブラリにある「iTunes」フォルダーを図20で作成したフォルダーに移動させます

図23: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「cmd」と入力して<OK>ボタンをクリックします

図24: コマンドプロンプトに「mklink /d "C:\Program Files\iTunes" "D:\Programs\iTunes"」と入力して[Enter]キーを押します。これでiTunes本体のシンボリックリンクが作成されました

図25: 続いて「mklink /d "C:\Users\Public\Music\iTunes" "D:\Data\iTunes"」と入力して[Enter]キーを押します。これでデータフォルダーのシンボリックリンクが作成されました

早速動作を確認してみましょう。iTunes導入時に作成されたショートカットファイルをダブルクリックしてみましょう。問題なくiTunesが起動すればチューニング成功です。上手く動作しない場合は、「mklink」コマンドで作成したシンボリックリンクのパスに間違いがないか確認してください(図26~27)。

図26: ショートカットファイルから起動したiTunes。筆者が確認した限りですが、問題なく動作しています

図27: こちらはiTunesインストール時に作成されたショートカットファイルのプロパティダイアログ。リンク先がCドライブになったままでも問題ありません

読者のなかには本チューニングが無意味だと感じる方もおられるでしょう。もちろんiTunesを導入する際に展開先を変更し、iTunesが参照するデータフォルダーを設定ダイアログから変更すれば、本チューニングは意味をなしません。しかし、だんだんとホストドライブの空き容量が少なくなってきた場合や、再インストールの手間を省きたいといった場面は有効なテクニックとなります。

唯一の欠点はバックアップ作業がホストドライブ一つで完結しない点。本チューニングを行う場合はバックアップ対象に移動先のドライブも含めるように設定を変更してください。

それでは、また次号でお会いしましょう。

阿久津良和(Cactus)