【ツール活用|豆知識】秘伝のタレを整理せよ!ts-pruneで実現する不要コードの自動断捨離術

導入

開発を長期間続けていると、かつての機能変更で不要になった関数や、使われなくなったコンポーネントがコードベースに溜まっていきませんか?これらは「デッドコード」と呼ばれ、開発者の混乱を招くだけでなく、ビルド時間の増大や不要なテスト実行といった技術的負債を蓄積させます。本記事では、TypeScriptプロジェクトにおける不要なエクスポートを自動検出し、コードベースを健全に保つための手法を解説します。

基礎知識

デッドコード解析とは、プログラムの実行フローや参照関係を静的に分析し、一度も呼び出されていないコードを特定する手法です。特にTypeScriptのようなモジュールシステムを採用している環境では、あるファイルで定義された関数が、プロジェクト内のどのファイルからもインポートされていない状態を検知することが重要です。これを自動化することで、手作業による調査ミスを減らし、安全なコード削除が可能になります。

実装/解決策

TypeScriptプロジェクトにおけるデッドコード解析には、ts-pruneというツールが非常に有効です。ts-pruneは、エクスポートされているものの、どこからもインポートされていない識別子を一覧表示してくれます。

導入手順は以下の通りです。
1. プロジェクトルートで npm install –save-dev ts-prune を実行。
2. package.jsonのscriptsに解析コマンドを登録。
3. コマンドを実行し、出力されたリストを元に不要なエクスポートを整理。

サンプルプログラム

以下の設定を package.json に追加することで、プロジェクト内のデッドコードをすぐにチェックできます。

{
“scripts”: {
// ts-pruneを実行し、未使用のエクスポートを検出する設定
// –projectを指定してtsconfig.jsonを参照させます
“find-dead-code”: “ts-prune –project ./tsconfig.json”
}
}

// 例: 使用されていない関数がある場合、以下のような出力が得られます
// src/utils/math.ts:10 – calculateComplexValue (exported but never used)
// この場合、math.tsの10行目にある関数がどこからも参照されていないことが分かります

応用・注意点

現場で活用する際のポイントと注意点を挙げます。

1. 動的インポートとリフレクションの扱いに注意
ts-pruneは静的解析ツールです。文字列による動的インポートや、依存性注入(DI)コンテナ経由で呼び出されるクラスなどは、ツール側が「未使用」と誤判定することがあります。解析結果を鵜呑みにせず、必ず開発環境で動作確認を行ってください。

2. CI/CDパイプラインへの組み込み
デッドコードを放置しないために、CIのパイプラインに解析コマンドを組み込むことを推奨します。ただし、初導入時は大量の警告が出る可能性があるため、まずは「警告ログを出す」段階から始め、徐々にコードをクリーンアップしていくのが現実的です。

3. 破壊的変更の防止
ライブラリとして公開しているコードの場合、外部から利用される可能性がある関数を削除しないよう注意が必要です。公開APIとして定義しているものは、解析対象から除外する設定を適切に行いましょう。

コードベースの「断捨離」は、チームの生産性を高める第一歩です。まずは一度、ツールを流して何が眠っているか確認することから始めてみてください。

タイトルとURLをコピーしました