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 までお寄せください。