Linux(≒ UNIX系のOS) 使っている人が Windows 使っていて、時々欲しくなるの、シンボリックリンク ですよね。
「シンボリックリンクって何それ?おいしいの?」
とか
「シンボリックリンクってショートカットと何が違うの?」
という声も聞こえてきそうですが、ひとまずシンボリックを作成する方法を・・。
Windows で シンボリックリンク の作成
Windows でシンボリックリンクを作成するには、コマンドプロンプトで次のようなコマンドを実行します。
mklink [[/d] | [/h] | [/j]] <link> <target>
パラメータ | 説明 |
---|---|
/d |
ディレクトリのシンボリックリンクを作成します。デフォルトでは、このコマンドはファイルシンボリックリンクを作成します。 |
/h |
シンボリックリンクではなく、ハードリンクを作成します。 |
/j |
ディレクトリジャンクションを作成します。 |
<link> |
作成されるシンボリックリンクの名前を指定する。 |
<target> |
新しいシンボリックリンクが参照するパス(相対パスまたは絶対パス)を指定します。 |
シンボリックリンクを環境変数 PATH と絡めて考える
早速実際にシンボリックリンクを作成するシチュエーションを紹介してみたいと思います。
この例では、ディレクトリに対してリンク を貼ってみます。ていうか、Windows でファイルに対してシンボリックリンクをはる良い例が思いつかなかったので、今回はディレクトリに対するリンクで、シンボリックリンクの紹介をしたいと思います。
以下のように、D:\opt
には以下のようなディレクトリが存在しています。
D:\opt>dir
ドライブ D のボリューム ラベルは ボリューム です
ボリューム シリアル番号は 4EDB-9F10 です
D:\opt のディレクトリ
2022/07/29 09:45 <DIR> .
2022/07/29 09:45 <DIR> ..
2019/04/12 15:15 <DIR> apache-maven-3.3.3
2019/04/12 15:15 <DIR> apache-maven-3.5.4
2019/05/08 12:29 <DIR> apache-maven-3.6.1
2019/11/07 12:32 <DIR> apache-maven-3.6.3
見てわかるように、ここには apache-maven の各バージョンのファイル群があります。
それぞれのディレクトリの直下の bin
ディレクトリに、Apache Maven の実行コマンドである mvn
コマンドがあります。
D:\opt\apache-maven-3.6.3\bin のディレクトリ
2019/11/07 12:32 <DIR> .
2019/11/07 12:32 <DIR> ..
2019/11/07 12:32 228 m2.conf
2019/11/07 12:32 5,741 mvn
2019/11/07 12:32 6,349 mvn.cmd
2019/11/07 12:32 1,485 mvnDebug
2019/11/07 12:32 1,668 mvnDebug.cmd
2019/11/07 12:32 1,532 mvnyjp
6 個のファイル 17,003 バイト
2 個のディレクトリ 579,030,134,784 バイトの空き領域
Windows のコマンドプロンプトでこの mvn
コマンドを実行するには、コマンドのあるディレクトリ、例えば上の例の場合 D:\opt\apache-maven-3.6.3\bin
に移動して実行するか(現実的ではありませんね)、環境変数 PATH
に、
”パスを通す”
というおまじないが必要です。
どのようなおまじないでパスを通すのかはググって貰えればいいと思うのですが、環境変数 PATH に、
PATH=C:\Windows\system32;C:\Windows..[中略]..;D:\opt\apache-maven-3.6.3\bin
のようにして、mvn
コマンドの実行パスを追記することで、どこのディレクトリからでも mvn
コマンド一発で実行できるようになります。
しかし、ここでちょっと想像してみましょう。もし、最新版の Apache maven、例えば、Apache Maven 3.8.6 を導入した場合 は、どうすればよいのでしょうか?
先程の例の環境変数 PATH
の apache-maven-3.6.3\bin\mvn.exe
の部分を削除して、新たに D:\opt\apache-maven-3.6.3\bin
を追加する事で新しいバージョンの mvn
コマンドを実行することができますが
・・なんだか面倒くさい
と感じると思います。
そこで シンボリックリンク
そこで、その面倒臭さをシンボリックリンクの作成で解決してみましょう。
次のようにして、apache-maven
という名前のシンボリックリンクを作成してみます。
D:\opt>mklink /d apache-maven apache-maven-3.6.3
apache-maven <<===>> apache-maven-3.6.3 のシンボリック リンクが作成されました
すると、以下のように <SYMLINKD>
が作成されます。これはおそらく、「ディレクトリのシンボリックリンク」を意味していると思われます。
D:\opt>dir
ドライブ D のボリューム ラベルは ボリューム です
ボリューム シリアル番号は 4EDB-9F10 です
D:\opt のディレクトリ
2022/08/02 16:34 <DIR> .
2022/08/02 16:34 <DIR> ..
2022/08/02 16:34 <SYMLINKD> apache-maven [apache-maven-3.6.3]
2019/04/12 15:15 <DIR> apache-maven-3.3.3
2019/04/12 15:15 <DIR> apache-maven-3.5.4
2019/05/08 12:29 <DIR> apache-maven-3.6.1
2019/11/07 12:32 <DIR> apache-maven-3.6.3
この場合、apache-maven
というシンボリックリンクは apache-maven-3.6.3
を指し示していることを意味しています。
エクスプローラで見てみると、その見た目は「ショートカット」と何も変わらないように見えますね。
実際、シンボリックリンクをダブルクリックすると、リンク先に指定したフォルダに入れるので、その挙動はまさにショートカットと同じに見えますね。
でも、これは シンボリックリンクの本質ではありません。
次にコマンドラインで次のようにしてディレクトリを移動してみます。
D:\opt> cd apache-maven
D:\opt\apache-maven>
このように、シンボリックリンクにディレクトリを移動することができました。
念のため、次のようにして確認してみると、apache-maven-3.6.3 の実行ファイルになっている = (イコール)、apache-maven-3.6.3
のディレクトリに正しく移動できている事がわかると思います。
D:\opt\apache-maven>bin\mvn --version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\opt\apache-maven\bin\..
Java version: 11.0.14.1, vendor: Microsoft, runtime: D:\opt\java\jdk-11.0.14.1+1
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
D:\opt\apache-maven>
例えば、ショートカットを使って同じようなことをしようとしても、ショートカットの指し示す先に移動することはできません(もちろん、エクスプローラであれば移動できます)。
D:\opt>cd apache-maven.lnk
ディレクトリ名が無効です。
D:\opt
しかもショートカットは、 コマンドプロンプトで見たときに ~.lnk
という拡張子がついているので、そもそもファイル なんですよね。
このことから、
シンボリックリンクはディレクトリとして振る舞える
という事がわかると思います。
ここで、先程の環境変数 PATH の話に戻りますが、シンボリックリンクで D:\opt\apache-maven
を作成したので、環境変数には、
D:\opt\apache-maven\bin
を指定すれば良いことになります。
この先、仮にD:\opt\apache-maven-3.8.6
を展開したとしても、
D:\opt>mklink /d apache-maven apache-maven-3.8.6
のようにして、改めてシンボリックリンクを貼り直すだけで、環境変数をいちいち触ることなく変更していくことができるようになります。
シンボリックリンクの削除
シンボリックリンクを削除したい場合は、少し気をつける必要があります。
del シンボリックリンク
ってやってしまうと、指し示している先含めて削除されてしまいます。
なので、以下のようにして削除します。
rd シンボリックリンク
まとめ
非常にニッチな機能ですが、シンボリックリンクを使用することで、環境変数の再設定のためにいちいちシステムの詳細設定を開いて・・、などしなくて済むようになるので、個人的にはおすすめです。
個人的には、VSCode のポータブル版を使用していたりするので、バージョンアップの度にレジストリエディタを開いてコンテキストメニューのパスを弄ったりする必要がなくなったのが、最大の恩恵ですね。
もし同じようなことで悩んでいる方がおられたら、一度シンボリックリンクをためしては如何でしょうか。
0件のコメント