見た目はそっくり、でも正体は別物
ショートカットは一般に.lnk拡張子で保存されるShell Linkです。リンク先のパスだけでなく起動時の引数、作業フォルダー、アイコンなどの情報を持てます。エクスプローラーやShell Linkを扱えるアプリが内容を解釈してリンク先を開きますが、ファイルシステムから見れば通常のファイルです。
シンボリックリンクはファイルシステム上の再解析ポイントとして作られるリンクです。通常のファイルアクセスではリンク先へ解決されるため、多くのコマンドやアプリはリンクのパスを通常のファイルやフォルダーと同じように扱えます。
コマンドプロンプトでdirを打つと違いがわかりやすいです。
dir2026/08/24 (月) 12:53 <SYMLINKD> MyFolder [\Users\User1\Documents]
2026/04/05 (日) 15:59 753 shortcut.lnkフォルダーへのシンボリックリンクは<SYMLINKD>という種類で表示されますが、ショートカットはあくまで「shortcut.lnkという名前の通常ファイル」として表示されます。これが両者の立ち位置の違いをそのまま表しています。
使い分けは「人が開くか」「パスとして使うか」
デスクトップからアプリやファイルを開くならショートカットが向いています。アイコンや起動時の引数を設定できるため人が操作する入口として便利です。
コマンドやアプリから別名のパスとしてアクセスさせたいなら、シンボリックリンクが向いています。通常のパスアクセスではリンク先へ解決されますが、作成権限、リンク先が存在しない場合の扱い、バックアップ時の動作には注意が必要です。
違いはtypeコマンドでも確認できます。ファイルへのシンボリックリンクならリンク先の内容が表示されますが、.lnkに対してtypeを実行するとショートカットファイル自体のバイナリデータが対象になります。start shortcut.lnkのようにWindows Shellへ処理を渡せばショートカットを開けます。
mklinkで作れるリンクは3種類
Windowsで mklink コマンドを使うと、シンボリックリンク以外にもハードリンクとジャンクションが作れます。似たような立ち位置なので混同しがちですが、性質はけっこう違います。
mklink /d MyFolder \Users\User1\Documents
mklink /h MyFile.file \Users\User1\Documents\example.file
mklink /j MyJunction \Users\User1\Documents| 種類 | オプション指定 | 対象 | 別ドライブ・ネットワーク越え | 管理者権限 |
|---|---|---|---|---|
| シンボリックリンク | なし:ファイル /d:フォルダ | ファイル フォルダ | 別ドライブ・UNCパスを指定可能 環境設定の影響あり | 通常は必要 開発者モードなどの例外あり |
| ジャンクション | /j | フォルダのみ | 同じPC内の別ローカルボリュームを指定可能 | 通常は不要 |
| ハードリンク | /h | ファイルのみ | 同じボリューム内のみ | 通常は不要 |
ジャンクションはWindows 2000の頃から存在する仕組みでNTFSの再解析ポイントを使用します。シンボリックリンクだけがVista以降に追加された比較的新しい仕組みとされていて、権限まわりの扱いも独自になっています。
シンボリックリンクの作成には通常、権限が必要
シンボリックリンクの作成には通常SeCreateSymbolicLinkPrivilegeという権限が必要です。既定ではAdministratorsグループに割り当てられていますが、ポリシーで別のユーザーへ割り当てることもできます。
Windows 10のビルド14972以降では開発者モードが有効ならmklinkを管理者として実行しなくてもシンボリックリンクを作成できます。そのため「開発者モードを無効にすると必ず管理者権限が必要」ではなく個別に作成権限が割り当てられている環境も例外です。
アプリ側から見るとこんなに挙動が変わる
代表的な挙動をまとめました。
| ツール | ショートカット | シンボリックリンク |
|---|---|---|
| コマンドプロンプト | .lnkファイルとして扱うstartならリンク先を開ける | 通常のパスとしてリンク先へアクセスできる |
| PowerShell | 通常のファイルとして扱うInvoke-Itemならリンク先を開ける | New-Item -ItemType SymbolicLinkで作成できる |
| Git for Windows | 通常のファイルとして扱う | core.symlinksの設定に応じてリンクとして復元する |
| Java(NIO.2) | 通常のファイルとして扱う | Files.createSymbolicLink()で作成できる |
| robocopy | 通常のファイルとしてコピーする | 既定ではリンク先をたどる/SLならリンク自体をコピーする |
Gitはシンボリックリンクを含むリポジトリをWindowsでcloneしたときcore.symlinksがfalseだとリンク先のパスが書かれた通常ファイルとして展開します。既存リポジトリで有効にする場合は、そのリポジトリ内でgit config core.symlinks trueを実行します。変更後は未保存の作業を保護したうえで、再チェックアウトが必要になる場合があります。
Javaではjava.nio.file.Files.createSymbolicLink()でシンボリックリンクを作成できます。Windowsの開発者モードを利用した非昇格での作成にはJDK側の対応も必要で、JDK 13から対応しました。JDK 12以前や古いJava 8環境では、開発者モードが有効でも権限不足になる可能性があります。
robocopyは既定ではシンボリックリンクのリンク先をたどります。リンク先の内容ではなくシンボリックリンク自体をコピーする場合は/SL、ジャンクション自体をコピーする場合は/SJを指定します。ジャンクションをコピー対象から除外するオプションが/XJです。目的によって使い分けてください。
robocopy C:\source D:\backup /E /SL自分の環境でも確認しておきたいコマンド
自分の環境でリンクの正体を確かめる方法も置いておきます。管理者権限のコマンドプロンプトで以下を実行すると、対象が本当に再解析ポイント(シンボリックリンクやジャンクション)になっているかどうかを直接確認できます。
fsutil reparsepoint query C:\path\to\linkショートカットに対してこれを実行するとエラーになるはずです。ショートカットはあくまでただのファイルであって、ファイルシステムレベルのリンクではないからですね。
身近なIT用語の「なんで?」をゆるく知りたい方はIT雑学・ぷちQAカテゴリもあわせてどうぞ。






