Windowsのシンボリックリンク

恥ずかしながらシンボリックリンクというものはUnix専門と思っていてWinodwsにあるのを知りませんでした.例えば会社ではバージョン管理システムSubversionを使用しています.Subversionはサーバーにあるリポジトリから任意のフォルダを指定して作業コピーとしてチェックアウトすることができます.このためDITA-OTのプラグインを作っていて、頻繁にDITA-OTがバージョンアップされて、お客様の環境に合わせていくつものDITA-OTを取りそろえておかねばならない場合でも、[DITA-OT]/pluginsに目的のプラグインのフォルダをチェックアウトすれば事足ります.(もちろんディスク領域は取りますが)

ところがGitHubのようなバージョン管理システムだとこのよなことができません.クライアントにあるのはあくまでもローカルリポジトリで、センターのリポジトリをクローンしたものです.このようなリポジトリでDITA-OTのプラグインを開発する場合、リポジトリにはプラグインのフォルダだけではなく、README.MDとかテストデータとかいろいろなファイルがあって、[DITA-OT]/pluginsにローカルリポジトリとして作ることはできないからです.(たぶんDITA-OTがおかしくなってしまう)

一体世の中の人はどうやっているのか?とStackoverflowで質問してみたら、シンボリックリンクを用いるのと、選択的にGitHubからローカルリポジトリをクローンする方法があることを教えてもらいました.結局のところ後者は他のプラグインGitHubから引っ張ると競合してしまうためダメなことがわかったので、シンボリックリンクの方を試してみました.

GitHubのローカルリポジトリの使い方

まず会社のPDF5-MLプラグインは通常D:\My_Documents\GitHub\pdf5-mlにローカルリポジトリがあります.ここにcom.antennahouse.pdf5.mlフォルダが存在します.以下はD:\DITA-OT\dita-ot-3.0\pluginsにシンボリックリンクを作成する様子です.Wondows10でかっこをつけてWindows Power Shellを入れてしまったので、ちょっとシンボリックリンクを作るコマンドのmklinkの叩き方が通常のDOS窓コマンドプロンプト)とは異なります.あと管理者権限が必要です.

イメージ 1


こうするとエクスプローラでは、シンボリックリンクを表す矢印が表示され、当たり前ですが、DITA-OTもそこにプラグインがあるかのように動作してくれます.

イメージ 2


今までDITA-OTがバージョンアップするごとにプラグインをローカルリポジトリからコピーしてきていましたが、たまにプラグインの修正がある場合、そこの[DITA-OT]\pluginsで修正をかけて、ローカルリポジトリにコピーしなおしてというSubversionでは考えられないちょっと危険なことをやっていました.

しかしシンボリックリンクを使えば、D:\DITA-OT\dita-ot-3.0\pluginsのプラグインを直せば、それは実体がローカルリポジトリにあるので、そのような危険な手動コピーをせずに済みます.というわけでWindowsシンボリックリンクは結構便利な機能です.