
2026/02/27 3:47
**Show HN:** *Rev‑dep ― Goで実装された20倍高速なKnip.dev代替ツール*
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Rev‑dep は、JavaScript/TypeScript 用の高速 Go ベースの静的解析ツールキットであり、依存関係グラフの衛生状態を強制し、未使用コードを自動的に除去します。500 k+ 行以上のプロジェクトを約 500 ms で監査でき、Madge、dpdm、knip など競合ツールより最大 200 倍高速です。また、循環参照・孤立ファイル・モジュール境界・インポート規約・欠落モジュール・未解決インポート・開発依存関係使用・制限インポートといったすべてのガバナンスチェックを単一の並列走査で実行し、オプションで自動修正も可能です。
このツールは、pnpm、yarn、npm のファーストクラスモノレポワークスペースをサポートし、ワークスペースパッケージを自動検出して
package.json のエクスポート/別名を解決します。また、entry-points、files、resolve、imported-by、circular、node-modules などの探索的 CLI を提供し、臨時問い合わせに対応します。Rev‑dep の設定エンジン(
rev-dep.config.json(c))はパッケージやディレクトリごとに細かいルール制御を可能にし、CLI は --follow-monorepo-packages、--condition-names、--ignore-type-imports、--list-all-issues、--print-deps-count などのフラグを備えています。本プロジェクトはオープンソースで(ポーランド/日本で開発)、ローカルまたはグローバルに利用可能です。エントリポイント・デッドファイル・循環依存関係・逆依存分析などの概念について包括的なドキュメントも含まれています。
本文
Rev‑dep – 依存関係分析・ガバナンスツールキット
概要
モダンな JavaScript / TypeScript プロジェクト向けの高速静的解析。
- 依存グラフの衛生管理を徹底
- 未使用コードを素早く除去するための高速 CLI
- Go で実装し、Node ベースツールより10〜200倍速い性能を実現
Rev‑dep を選ぶ理由
| 機能 | 説明 |
|---|---|
| Monorepo 対応 | pnpm、yarn、npm ワークスペースを扱い、 のエクスポート/インポート、TypeScript エイリアス、クロスパッケージ依存関係を解決 |
| 設定ベースのガバナンス | 1 つの設定ファイルで循環参照・孤立ファイル・モジュール境界・インポート規約などすべてのチェックを一括実行 |
| 探索ツールキット | CLI ヘルパー(、、、 など)で随時分析可能 |
| CI ガード | PR 毎に高速実行が可能 – 約 500k+ 行を ~500 ms で解析 |
主な機能
ガバナンス & メンテナンス(設定ベース)
一括実行:
rev-dep config run
| チェック | 目的 | 自動修正 |
|---|---|---|
| アーキテクチャ境界を強制 | ❌ |
| インポートスタイル規約を強制 | ✅ |
| 未使用エクスポートを検出 | ✅ |
| 死んだ/孤立ファイルを発見 | ✅ |
| 未使用の依存パッケージ | ❌ |
| package.json に欠落しているインポート | ❌ |
| 解決できないインポート要求 | ❌ |
| 循環参照 | ❌ |
| 本番で使われている開発依存 | ❌ |
| 禁止されたインポートをブロック | ❌ |
探索(CLI ベース)
rev-dep entry-points # すべてのエントリポイントを表示 rev-dep files --entry-point src/index.ts # エントリポイントの依存ツリー rev-dep resolve --file src/utils/math.ts # ファイルをインポートしているパス rev-dep circular # 循環依存関係を検出 rev-dep node-modules unused # 未使用 npm パッケージ
インストール
# プロジェクト固有(scripts) npm i -D rev-dep # グローバル(CLI ツール) npm i -g rev-dep
簡易設定を作成:
rev-dep config init # ルートルール + Monorepo 内のパッケージ別ルール
すべてのチェックを実行(ドライラン):
rev-dep config run
自動修正を適用:
rev-dep config run --fix
全ての問題をリスト表示:
rev-dep config run --list-all-issues
設定ファイル (rev-dep.config.jsonc
)
rev-dep.config.jsonc{ "$schema": "https://raw.githubusercontent.com/jayu/rev-dep/main/schema.json", "configVersion": "1.0", "ignoreFiles": ["**/*.test.*"], "rules": [ { "path": ".", "moduleBoundaries": [{ "name":"DomainA","pattern":"src/domain-a/**","allow":["src/domain-b/**"] }], "circularImportsDetection": { "enabled": true }, "orphanFilesDetection": { "enabled": true, "validEntryPoints": ["src/index.ts"] }, "unusedExportsDetection": { "enabled": true, "ignoreTypeExports": true } } ] }
各ルールはサブディレクトリを対象にし、任意のチェックセットを有効化できます。
パフォーマンス比較
| タスク | Rev‑dep (ms) | 代替ツール (ms) | スピードアップ |
|---|---|---|---|
| 循環依存関係検出 | 397 | dpdm-fast 4960 | 12× |
| 未使用エクスポート検出 | 303 | knip 6606 | 22× |
| エントリポイントのファイル一覧 | 229 | madge 4467 | 20× |
| エントリポイント発見 | 323 | madge 67000 | 207× |
6034 ファイル、518,862 行の TypeScript モノレポでベンチマーク。
よく使う CLI コマンド
| コマンド | 説明 |
|---|---|
| 循環インポートを検出 |
| すべてのエントリポイントを取得 |
| ファイルの依存ツリーを表示 |
| をインポートしているパスを表示 |
| 未使用 npm パッケージ |
| package.json に欠落しているインポート |
| フォルダのサイズ |
高度なオプション
-
Monorepo 解決:
(デフォルトは false) – ワークスペース横断解析を有効化。--follow-monorepo-packages -
条件付きエクスポート:
–--condition-names=node,import,default
のpackage.json
を解決する際の優先順序。exports -
型インポート除外:
–--ignore-type-imports
をグラフ構築から除外。import type { … }
用語集
| 用語 | 定義 |
|---|---|
| Dependency | インポートされるファイルまたは npm モジュール |
| Entry point | 他のファイルからインポートされないソースファイル(例:) |
| Orphan / dead file | 実質的に機能しないエントリポイント。削除可能。 |
| Circular dependency | ファイルが直接または間接で自分自身をインポートすること |
| Unresolved import | 参照パスがファイル/モジュールへ解決できない状態 |
コントリビューション
🇵🇱 & 🇯🇵 で 🧠 を込めて @jayu が作成
問題報告やプルリクを歓迎します。役立ったら ⭐ をどうぞ!