2023.9.16
terminalでどのようにコマンドが実行できるのかグローバルにインストールされたyarnで確認する
概要
何気なく yarn <command>
を実行している人向けの初歩的な記事です。
そもそもterminalで打ったコマンドがどのように実行されるのかを確認します。
検証
コマンドがなぜ実行できるか
例えば、どこのディレクトリであっても yarn --version
を実行すると私の環境(mac)ではyarnのversionが確認できます。
bash_____terminal_____$ yarn --version
1.22.19
これはnpmを通じてyarnがグローバルにインストールされているからです。
npmの話は別記事にするとして、今回はyarnがどうやって実行されているか確認します。
terminalコマンドは $PATH
に定義されたpathのリストにそのコマンドが存在するか順番に探索され、存在すれば実行されます。
つまり、今回は $PATH
にyarnが実行できるpathがあったということになります。
$PATHを確認する
echoで確認してみます。
bash_____terminal_____$ echo $PATH
~~省略~~/Users/kobayashi/Library/Caches/fnm_multishells/<xxxx>/bin:~~省略~~
結果は上記の部分以外省略していますが、私はNodeをfnmというツールを通じてインストール&バージョン管理しているので、それっぽいディレクトリはこちらもpathとなっていました。
このpathに何があるか確認します。
上記のpathに移動し ls -la
を実行します。
bash_____terminal_____$ ls -la
-rwxr-xr-x 1 kobayashi staff 93138384 6 20 21:59 node
lrwxr-xr-x 1 kobayashi staff 38 7 24 14:22 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxr-xr-x 1 kobayashi staff 38 7 24 14:22 npx -> ../lib/node_modules/npm/bin/npx-cli.js
lrwxr-xr-x 1 kobayashi staff 36 8 14 08:58 yarn -> ../lib/node_modules/yarn/bin/yarn.js
lrwxr-xr-x 1 kobayashi staff 36 8 14 08:58 yarnpkg -> ../lib/node_modules/yarn/bin/yarn.js
ファイルモードを確認すると npm
npx
yarn
などのシンボリックリンクが作成されていることがわかります。
シンボリックリンクはショートカットのようなもので、そのディレクトリにそのファイルがあるかのように振る舞います。
yarnの在り処
上記で確認できたyarnのシンボリックリンク先を見てみます。
bash_____terminal_____ls -la
-rwxr-xr-x 1 kobayashi staff 1025 8 14 08:58 yarn
-rwxr-xr-x 1 kobayashi staff 34 8 14 08:58 yarn.cmd
-rwxr-xr-x 1 kobayashi staff 1015 8 14 08:58 yarn.js
-rwxr-xr-x 1 kobayashi staff 42 8 14 08:58 yarnpkg
-rwxr-xr-x 1 kobayashi staff 30 8 14 08:58 yarnpkg.cmd
先ほどのシンボリックリンクで確認できたように yarn.js
がありました。
ということで yarn --version
を実行したときには上記にある yarn.js
が実行されているということがわかりました。
まとめ
まずはterminalでコマンドを実行したときにどういう流れで実行できているのかが理解できたところで、次はnpmとnpxについて見ていきたいと思います。