Rust製のTS/JS静的解析ツール fallow が knip の27倍速い理由
TS/JSの未使用コード・循環依存・重複を検出するfallowはRust製。tscもNodeも不要でnpx一発、preactの解析はknipの2.01秒に対し74ms。
#なぜ今日これを選んだか
Rust学習(#130)と本業のReact(フロントエンド)が一本の線でつながる題材だから。「RustでTS/JSのツールを書く」流れは swc・oxc・Biome に続いて定着しつつあり、fallow はその最新例。自分が毎日触るコードベースを解析対象にできるので、Rustを「読む動機」が具体的になる。
#要点
- TS/JS向けの静的解析ツール。未使用ファイル・export・型・依存、循環依存、コード重複、複雑度ホットスポット(0〜100の健康スコア)、アーキテクチャ境界違反、CSS/CSS-in-JSのデザインシステム逸脱を検出する
- Rust製で、既定は構文解析のみ。TypeScriptコンパイラもNodeランタイムも不要で
npx fallowだけで動く。型を見たい時は--type-awareで TypeScript チェッカーを併用する - ベンチマークでは fastify を 64ms(knip は 205ms)、preact を 74ms(knip は 2.01s、27.1倍)で解析。ただし knip の方が速いプロジェクトもあると公式が明記している
fallow auditでPRゲート、自動修正、LSPサーバー(エディタ連携)、MCPサーバー(エージェント連携)、GitHub Actions を同梱。無料層はMIT、実行時の「hot path / cold path」判定は有料層
#自分にとっての示唆
Rustの価値は「速い」だけでなく「配布が楽」にも出ている。Node不要で単一バイナリだから npx 一発で入り、CIにも置きやすい。これは将来ドローン米の現場(#724)で使う計測ツールや、Rust×ハードウェア(#130 M5: センサー読み取り)でも同じ利点になる。
明日からの一手は2つ。①今携わっているReactのリポジトリで npx fallow を一度走らせ、未使用exportと循環依存の件数をメモする(10分)。②結果が面白ければ fallow-rs のソースで「ファイル走査→依存グラフ構築」の部分だけを読む。Rustlings で学んだ Result と所有権が実コードでどう使われているかを確認する場として、教材より実践的なはず。