fallow:392⭐の Rust 製コード解析ツール、TypeScript プロジェクトの技術的負債を解決
プロジェクト概要
| 属性 | 詳細 |
|---|---|
| 名称 | fallow |
| GitHub | fallow-rs/fallow |
| Stars | 392 ⭐ |
| 言語 | Rust |
| ライセンス | MIT |
| ポジション | TypeScript/JavaScript コード品質解析ツール |
なぜ fallow が必要か?
フロントエンドプロジェクトはビジネスの発展とともに、コードベースに様々な「技術的負債」が蓄積しがちです:
- ゾンビコード:定義された関数や変数が未使用のまま、ファイルが肥大化
- コピペ:同じロジックが数十のファイルに散在し、修正時に漏れが発生
- 循環依存:モジュール A が B に依存し、B も A に依存する構造
- 複雑度爆発:単一関数が数百行に及び、担当者が手を付けられない
従来の ESLint は構文問題を発見できますが、このような「アーキテクチャレベル」の問題には対応できません。fallow の目的はこの空白を埋めることです。
主要機能
1. 未使用コード検出
プロジェクト全体のエクスポートと参照関係をスキャンし、「存在するが使用されていない」コードを特定します:
fallow --unused
出力例:
⚠️ Unused exports found:
- src/utils/helpers.ts: formatDate()
- src/components/LegacyButton.tsx (entire file)
- src/api/types.ts: UserResponse interface
2. 重複コードの識別
単なる文字列比較ではなく、fallow はコードの意味構造を分析し、「変数名を変更しただけのコピペ」を発見します:
fallow --duplicates
3. 循環依存の検出
モジュール間の依存関係を可視化し、循環参照の発生源を特定します:
fallow --circular
4. 複雑度ホットスポット分析
循環複雑度と認知的複雑度に基づき、リファクタリングが最も必要な関数を特定します:
fallow --complexity
なぜ Rust を選んだのか?
fallow は Rust で書かれており、同類の JavaScript ツールと比較して明らかなパフォーマンスアドバンテージがあります:
| シナリオ | fallow (Rust) | 従来の JS ツール |
|---|---|---|
| 10万行コードのプロジェクト | ~2秒 | ~15秒 |
| 100万行コードのプロジェクト | ~20秒 | 数分またはメモリ不足 |
| メモリ使用量 | ~100MB | ~500MB+ |
大規模な monorepo において、このパフォーマンス差はツールの可用性を左右します。
使用方法
インストール
# npm でインストール(プリコンパイルバイナリ)
npm install -g fallow
# または cargo でソースからコンパイル
cargo install fallow
基本的な使い方
# プロジェクト全体をスキャン
fallow
# 特定のディレクトリのみチェック
fallow src/components
# JSON 形式で出力(CI 用)
fallow --format json > report.json
# テストファイルを無視
fallow --ignore "**/*.test.ts"
CI 連携
GitHub Actions で使用する例:
- name: Check code quality
run: |
npx fallow --unused --fail-on-found
プロジェクト状況
| 指標 | データ |
|---|---|
| Stars | 392 |
| Forks | 10 |
| 作成日 | 2026年3月 |
| 最終更新 | 2026年4月(活発に開発中) |
| 主要依存 | OXC(Rust 製 JavaScript コンパイラ) |
同類ツールとの比較
| ツール | 言語 | 未使用コード | 重複コード | 循環依存 | パフォーマンス |
|---|---|---|---|---|---|
| fallow | Rust | ✅ | ✅ | ✅ | 極めて高い |
| Knip | TypeScript | ✅ | ❌ | ❌ | 中程度 |
| jscpd | JavaScript | ❌ | ✅ | ❌ | 中程度 |
| Madge | JavaScript | ❌ | ❌ | ✅ | 遅い |
fallow の優位性は、すべてのコード品質問題を「ワンストップ」で解決し、かつ大規模プロジェクトを処理するのに十分なパフォーマンスを持つことです。
注意事項
- プロジェクトは新しい(2026年3月作成)ため、API が変更される可能性があります
- 一部機能は開発中(Vue/Svelte 単一ファイルコンポーネントのサポートなど)
- Node.js 18+ の実行環境が必要
まとめ
長期的にメンテナンスしている TypeScript プロジェクトがある場合、または新しいプロジェクトでコード品質の基準を設けたい場合、fallow は試す価値があります。Rust コアは同類ツールでは難しいパフォーマンスを提供し、機能カバレッジもほとんどのコードクリーンアップシナリオに対応しています。
関連リンク
- GitHub: https://github.com/fallow-rs/fallow
- ライセンス: MIT