- Witr (why-is-this-running) は、Linuxシステムで特定の プロセス、サービス、またはポートがなぜ実行中なのか を明確に示すツール
- 既存の
ps、top、lsof などが単に「何が実行中か」だけを示すのに対し、「なぜ実行中なのか」という因果関係 を1画面で表示
- PIDベースの分析 により、プロセスの起源、実行経路、維持されている理由、所属コンテキストを追跡
- systemd、docker、pm2、cron、shell などさまざまなソースと連携して実行理由を説明し、読み取り専用・非破壊的 に動作
- デバッグや障害対応時に 理解に要する時間を短縮 し、複雑なシステムの実行構造をひと目で把握できるツール
目的とコンセプト
- Witr の中心となる問いは「なぜこれが実行中なのか? (why-is-this-running)」
- プロセス、サービス、ポートなど実行中のあらゆる項目の 起源と原因 を追跡
- 複数の層(supervisor、container、service、shell など)にまたがる 間接的な実行原因 を明示的に示す
- 既存ツールが状態やメタデータだけを提供するのに対し、Witrは因果関係を明確に表現
- 結果として「何が、どのように、なぜ、どのような文脈で実行中なのか」を 人が読みやすい形で出力
主な目標
- プロセスが存在する理由 を説明し、単なる実行有無以上の情報を提供
- デバッグおよび障害対応時間の短縮
- 設定不要ですぐに利用可能、読み取り専用で安全性を確保
- 完全性より明確さ を優先
- モニタリング、性能分析、自動復旧機能は含まない
動作原理
- すべての対象を プロセス (PID) を中心に解釈
- ポート、サービス、コンテナ、コマンドはすべてPIDに接続
- PIDを基準に 実行の因果チェーン (causal chain) を構成
- 核となる4つの問い
- 何が実行中か
- どのように開始されたか
- 何がそれを維持しているか
- どのコンテキストに属しているか
対応対象
- プロセス/サービス名、PID、ポート番号 を入力対象としてサポート
- 名前を入力した際に複数プロセスが一致した場合はPIDの選択を求める
--pid、--port オプションで特定プロセスまたはポートベースの分析が可能
出力構造
- Target: ユーザーが指定した対象
- Process: 実行ファイル、PID、ユーザー、コマンド、開始時刻、再起動回数
- Why It Exists: プロセスの 因果的系譜 (ancestry chain)
- Source: 実行を担った主要システム(例: systemd、docker、pm2、cron、shell のいずれか)
- Context: 作業ディレクトリ、Gitリポジトリ、Dockerコンテナ、バインド情報など
- Warnings: root権限での実行、公開インターフェースでのリスニング、長時間実行、メモリ過剰使用などの非ブロッキング警告
コマンドラインオプション
--pid、--port: 特定のPIDまたはポートを分析
--short: 1行要約
--tree: 完全なプロセスツリーを表示
--json: JSON形式で出力
--warnings: 警告のみ表示
--no-color: 色を無効化
--env: 環境変数のみ表示
--help: ヘルプを表示
インストールと削除
- 単一の静的Linuxバイナリ 形式で配布
- スクリプトによるインストール(推奨)
- 手動インストール
amd64、arm64 向けバイナリを直接ダウンロードし、チェックサムを検証
- 実行権限を付与した後、PATH上に移動
- 検証と削除
witr --version、man witr で確認
sudo rm -f /usr/local/bin/witr で削除可能
- Nix Flake対応:
nix run github:pranshuparmar/witr -- --port 5000 で実行可能
プラットフォームと権限
- Linux専用
/proc へのアクセスを通じて情報を収集
1件のコメント
Hacker Newsのコメント
READMEのGIFループが速すぎて再開し、出力内容を読み切るのが難しいという指摘
もう数秒ほど止まっていてほしい
最後のフレームを見るだけで必要な情報はすべて伝わる
すでに静的画像に置き換えてあり、提案してくれた意見にはすべて感謝している
コマンドが速いことは示せるが、最後のフレームにすでに全部入っているし、帯域効率も悪い
出力画面を100%のところで止めておけばよい。ターミナルで入力している様子はみんなすでに知っている
このツールは既存の監視/観測ツールを置き換えることを目的にしているわけではない
SSHで接続したときに「これはなぜ動いているんだ?」を素早く把握するためのもの
フィードバックに応じて方向性を調整する意思はある
あるプロセスが大量にリソースを使い始めたとき、その目的を突き止めるのはいつも難しかった
最初はプロセスの機能まで説明してくれるのかと思ったが、そうではなかった
それでも素晴らしいツールだ。将来的にはmanページ + プロセスDBを組み合わせて拡張可能にしてもよさそう
便利そうだが、現状の出力はほとんどppidしか見せていないので、「誰が起動したか」は分かっても「なぜ起動されたか」は分かりにくい
複数の出力形式をサポートしているのは良い。自動化環境を考えると、JSONやgrepしやすい形式をデフォルトにするとさらに良さそう
デフォルト出力は人間が読みやすいよう設計しているが、JSONフラグですでに自動化もサポートしている
もっとgrepしやすい形についても考えてみる
興味深いツールだが、
curlでバイナリをインストールするのは気が進まない後になって「これはどうやってインストールされたんだ?」「セキュリティパッチは最新か?」といった問題が出てくるかもしれない
debパッケージやsnapがあるとよい
curlインストールが全員に合うわけではないことは理解している初回リリースなのでシンプルに始めたが、人気が出れば公式パッケージ配布を計画している
wdtci: “what does this curl install?”systemctl status $pidコマンドでも多くの情報を得られる「witrは信頼に基づいている」という文と、「AI/LLMの助けを借りて開発された」という説明が矛盾しているように感じる
LLMの結果を確認し、コードレビューをきちんと行っているなら信頼できそうだ
それでもLLMの使用を透明に開示している点は評価したい
実際の判断は人間が下した
結果重視で開発したなら問題ないと思う
本当に素晴らしくて役に立つツールだ
ただ、本番環境では上で挙げられた理由からすぐに使うのは難しい
DebianやRPMパッケージがあるとよい
ソースから直接ビルドするには次のコマンドを使えばよい
個人的には、
install.shがあるならローカルソース優先のインストールを期待するこうしたシンプルなツールこそ、ターミナルに居続けたくなる理由だ
“Git repository name and branch” が何を意味するのか気になる
実行中のプロセスがGitリポジトリ内で実行されたかを検出する機能なのか?
関連コードへのリンク
アイデアが素晴らしい。以前私が作った**“whodis” alias**はポートを開いているPIDを探す用途だったが、これはずっと強力だ
本当に驚くようなツールだ。共有してくれてありがとう
もし私がAURパッケージを作っても大丈夫だろうか?
Archの強みは、こういう面白いツールがものすごく速くAURに上がることだ