ファイル master へのシンボリックリンク symlink を作りたいとき、ln -s master symlink だったっけ?ln -s symlink master だったっけ?と毎回迷いませんか?
検索したり、今ならAIに聞いたり。
正解は ln -s master symlink (ln -s [実体ファイルのパス] [作りたいリンクのパス])
なぜ、これをどうしても覚えられないのか、少しだけ考察しました。
Webリンクにおける共通認識
まず、私たちが日常的に触れている「Webリンク」における、リンク元・リンク先という言葉の共通認識を整理します。
| 文脈 | 「リンク元」が指すもの | 「リンク先」が指すもの |
|---|---|---|
| Webの感覚 (アクセスする流れ) | 「次へ」などの、クリックしようとしているリンク (ここを踏んで) | クリック後にページ遷移する先 (ここへ辿り着く) |
シンボリックリンクの「データ構造」
シンボリックリンクには、Webリンクのようなわかりやすい画面遷移がありません。ファイル名を見ただけでは、実体ファイルなのかシンボリックリンクなのかを見分けることができません。
しかし、データ構造としては 「シンボリックリンク → 実体」 という参照関係になっています。
実際、ls -l を表示すると、僕らの脳内モデルと一致した矢印が表示されます。
ls -l symlink
lrwxrwxrwx 1 aoki aoki 6 Jun 27 09:00 symlink -> masterCode language: Bash (bash)
この文脈での関係性は以下の通りです。
| 文脈 | 「リンク元」が指すもの | 「リンク先」が指すもの |
|---|---|---|
| データ構造 (アクセスする流れ) | シンボリックリンク (ここを踏んで) | 実体(オリジナル) (ここへ辿り着く) |
ln -s コマンドの「引数の順序」
そして問題の、シンボリックリンク作成コマンド `ln -s` です。これが引数の並びを覚えられないやつです。
ln -s master symlinkCode language: Bash (bash)
「実体へのリンク」を作るという意味ですが、この引数の並びはデータ構造の矢印とは逆の 「実体 → リンク」 という順序になっています。
| 文脈 | リンク元(第一引数) | リンク先(第二引数) |
|---|---|---|
ln -s コマンドの引数(ファイルを作る流れ) | 実体(オリジナル) (これを元にして) | シンボリックリンク (新しく作成する) |
まとめ:なぜ脳内バグが起きるのか?
私たちが普段使っている「Webの感覚」や、ls -l で目にする「データ構造」の流れのままコマンドを叩こうとすると、「手前(シンボリックリンク)から先に書くのかな?」 と脳が自然に判断してしまいます。
その結果、ln -s [シンボリックリンク] [実体] と書いてエラーになってしまうわけです。
| 文脈 | 矢印の手前(左側) | 矢印の奥(右側) |
|---|---|---|
| Webの感覚(アクセス) | クリックする場所 | 遷移先のページ |
| データ構造(アクセス) | シンボリックリンク | 実体(オリジナル) |
ln -s 引数(コマンド) | 実体(オリジナル) | シンボリックリンク |
もちろん、ln -s [実体ファイルのパス] [作りたいリンクのパス] の引数順序の設計を批判する意図はまったくありません。
ただ、コマンドの引数順序を覚えられないのは、僕たちの記憶力が悪いんじゃなくて、人間の脳の認知特性とコマンドの設計が完全に衝突しているから、という性質の悪い罠なんですね。
