Why are you in my computer?
Page content
この記事は whywaita Advent Calendar 2025 13日目の記事です。
背景
近年はLLMでコーディングするためのCLIツールが増えてきましたね。 便利な一方で、試しに入れては消し、別の手段でまた入れ……を繰り返していると、「このコマンド、結局どのパッケージマネージャで入れたんだっけ?」がすぐ分からなくなります。
自分は今まで、 whereis コマンドでパスを調べてパスの雰囲気からパッケージマネージャを推測していました。
ただ、毎回同じことをやっているだけなので、自動化できそうです。
そこで今回、「そのコマンドはどこ由来か」を推定して表示する why コマンドを作って公開しました。
why は何をするのか
why <command> で、コマンドのパスとそのパスから推定したパッケージマネージャを表示します。
やっていることは簡単で、PATH に含まれるコマンドのシンボリックリンクを辿って、実体パスを取得して、そのパスから事前に設定したルールに従ってパッケージマネージャを推定します。
文字列処理かつバイナリ配布の容易なNimでLLMを利用して作成しました。
リポジトリ はこちら。
インストール
Linux/macOSの場合は Homebrew からインストールできます。
brew install akriaueno/tap/why
使い方
whyの第一引数にコマンド名を指定します。
why <command>
例
$ why node
Command: node
Provider: Homebrew
Origin Path: /home/linuxbrew/.linuxbrew/bin/node
Real Path: /home/linuxbrew/.linuxbrew/Cellar/node/25.2.1/bin/node
$ why codex
Command: codex
Provider: Homebrew
Origin Path: /home/linuxbrew/.linuxbrew/bin/codex
Real Path: /home/linuxbrew/.linuxbrew/Caskroom/codex/0.72.0/codex-x86_64-unknown-linux-musl
$ why repomix
Command: repomix
Provider: Homebrew
Origin Path: /home/linuxbrew/.linuxbrew/bin/repomix
Real Path: /home/linuxbrew/.linuxbrew/Cellar/repomix/1.9.1/libexec/lib/node_modules/repomix/bin/repomix.cjs
$ why cursor
Command: cursor
Provider: apt/dpkg (cursor)
Origin Path: /usr/bin/cursor
Real Path: /usr/share/cursor/bin/cursor
$ why steam
Hint: Command 'steam' not found in PATH, but found 'com.valvesoftware.Steam' in Flatpak.
Command: steam
Provider: Flatpak
Origin Path: /var/lib/flatpak/exports/bin/com.valvesoftware.Steam
Real Path: /var/lib/flatpak/app/com.valvesoftware.Steam/current/active/export/bin/com.valvesoftware.Steam
$ why why
Checking self-identity...
Command: why
Provider: Homebrew
Origin Path: /home/linuxbrew/.linuxbrew/bin/why
Real Path: /home/linuxbrew/.linuxbrew/Cellar/why/0.1.4/bin/why
今後の展望
- 依存関係の表示機能
npm whyのようにコマンドが依存されているパッケージマネージャを表示する機能を追加したいと思います。
- 同じコマンドが複数インストールされている場合の対応
- 現在は
PATHの先頭から順番に実体パスを取得しているので、複数インストールされている場合は先頭のものが表示されます。
- 現在は
- HomebrewのBottleに対応
- ビルドに2分程度かかってしまいます。
最後に
ぜひご利用ください。 何かご意見があれば、GitHub までお寄せください。