こんにちは!開発現場の第一線で、日々コードの海と格闘されている皆さん。
突然ですが、あなたが今関わっているプロジェクト、なんだか最近動作が重かったり、どこがどう動いているのか把握しづらくなっていませんか? 長く続いているWeb開発の現場では、仕様変更やリファクタリングの歴史の中で「誰も使っていないのに、怖くて消せないコード(デッドコード)」が必ずと言っていいほど蓄積していきます。
「これ、本当に使われてるの?」と怯えながら検索窓を叩く日々とは、今日でサヨナラしましょう。
今回は、世界最高峰のPHP統合開発環境であるPhpStormを使い、プロジェクト全体の未使用クラスやメソッドを完全に、そして一滴の涙(=バグ)も流さずに安全に消し去る戦略を、優しく丁寧にお伝えします。
これをマスターすれば、毎日のコーディングが劇的に楽になり、コードベースの美しさに惚れ直すこと間違いなしですよ!
—
なぜ「デッドコード」は悪なのか? 放置するコスト
まず、なぜデッドコードを放置してはいけないのか、その本質を共有させてください。
「動いているなら、消さなくてもいいじゃないか」と思われるかもしれませんが、それは大きな誤解です。使われていないコードがコードベースに存在することは、以下のような深刻なデメリットを生みます。
1. 認知負荷の増大: 新機能を追加する際やバグ修正の際、エンジニアは「このメソッドはどこから呼ばれているんだ?」と無駄な思考リソースを消費します。
2. リファクタリングの阻害: 既存の構造を変えようとした時、デッドコードのせいで依存関係のグラフが複雑化し、手がつけられなくなります。
3. セキュリティリスク: 忘れ去られた古いエンドポイントや認証バイパス用のテストコードなどが残存していると、思わぬ脆弱性の温床になります。
しかし、手動でコードを一つひとつ検索して消していくのは、人間のやることではありません。ヒューマンエラーで「実は使われていた重要なメソッド」を消してしまい、本番環境で致命的なエラー(Fatal Error)を引き起こすリスクが高すぎるからです。
だからこそ、IDEの静的解析エンジン(PhpStorm)に仕事を任せるのです。
—
基礎セットアップ:PhpStormの「目」を極限まで鋭くする
PhpStormでデッドコードを正確に検知するためには、まずIDEにプロジェクトの構造を完璧に把握させる必要があります。ここがすべての土台です。
1. インスペクション(静的解析)の確認
PhpStormには、コードの不審な点を見つけ出す「インスペクション(Inspection)」という強力な機能が備わっています。
1. メニューバーの `Settings`(Macなら `Preferences`)を開きます。
2. `Editor` > `Inspections` へ進みます。
3. 検索窓に `Unused` と入力してみてください。
PHPの項目の中に、以下のようなチェック項目が並んでいるはずです。
- Unused class(未使用のクラス)
- Unused method(未使用のメソッド)
- Unused property(未使用のプロパティ)
- Unused local variable(未使用のローカル変数)
これらがすべて「有効(チェックが入っている状態)」になっていることを確認してください。PhpStormは、これらを使ってプロジェクト全体を監視しています。
—
実践:『Run Inspection by Name』でデッドコードを丸裸にする
準備が整ったら、いよいよプロジェクト全体のスキャンを実行します。ここで使うのが、知る人ぞ知る神機能『Run Inspection by Name』です。
ステップ1: インスペクションの呼び出し
キーボードショートカットで一発呼び出しが可能です。
- Windows / Linux: `Ctrl + Alt + Shift + I`
- macOS: `Cmd + Option + Shift + I`
ポップアップが表示されたら、そこに `Unused declaration`(未使用の宣言)と入力してEnterを押します。
ステップ2: スコープ(範囲)の指定
「どこを検査しますか?」と聞かれます。基本的にはプロジェクト全体をスキャンしたいので、`Whole Project` を選択しましょう。
—
【ここに注目】
PhpStormは、単に文字列としてその名前が存在するかどうかを探しているのではありません。PHPの構文木(AST: Abstract Syntax Tree)を解析し、依存関係(Dependency Graph)を完全に追跡した上で、「本当にどこからも参照されていないコード」のリストを瞬時に生成します。
—
ステップ3: 検出結果の確認
スキャンが完了すると、下部の「Inspection」タブに、プロジェクト内のすべての未使用コードがツリー状に美しくリストアップされます。
Inspection Results
└ PHP
└ Unused declarations
├ 📁 app/Http/Controllers
│ └ 📄 OldUnusedController.php (Class is never used)
└ 📁 app/Services
└ 📄 PaymentService.php
└ ⚙️ legacyRefundMethod() (Method is never used)
おお…! ここに表示されているものこそが、これまでプロジェクトを重くしていた「悪の根源(デッドコード)」たちです。
—
安全策の極み:依存関係を壊さない「セーフデリート(Safe Delete)」
リストが出たからといって、そのままファイルをゴミ箱にドラッグ&ドロップしてはいけません! もしかしたら、動的な文字列結合で呼ばれていたり、リフレクション(Reflection)で使われていたりする可能性がゼロではないからです。
ここで、PhpStormの真骨頂である「Safe Delete(安全な削除)」を使います。
使い方
1. 検出されたクラスやメソッドをリストから選択(またはプロジェクトツリー上で直接選択)。
2. ショートカットキーを押して削除コマンドを実行します。
- Windows / Linux: `Alt + Delete`
- macOS: `Cmd + Delete` (または右クリックから `Refactor` > `Safe Delete`)
3. 確認ダイアログが表示されます。
ここで、必ず以下のチェックボックスに注目してください。
- [x] Search in comments and strings(コメントや文字列内も検索する)
- [x] Safe delete (with usages search)(使用箇所を検索して安全に削除する)
そのまま「OK」を押すと、PhpStormが最後の念押しチェックを走らせます。
> 「おい、本当にこのコードはどこからも使われていないか?」
もし、どこかから参照されていた場合、以下のような警告ダイアログ(Usages Detected)がポップアップします。
Safe Delete – Usages Detected
The following elements are safely deleteable, but usages were found in comments/strings:
- legacyRefundMethod() is referenced in app/Console/Kernel.php (Line 42)
Do you still want to delete?
「おっと、コメントや別の場所で名前だけ言及されていたぞ」と教えてくれるわけです。ここで安全にキャンセルできるため、本番環境でコードが吹っ飛ぶような事故を100%未然に防ぐことができます。
何も警告が出ず、スッとファイルやメソッドが消えたなら、それは「完全に誰からも愛されていなかった、真のデッドコード」です。おめでとうございます、コードベースがまた一段と美しくなりました!
—
チーム開発における運用戦略:CI/CDとの連携を見据えて
個人でこれをやるだけでも素晴らしい効果がありますが、チーム開発で行う場合は少しコツが必要です。
1. 一度に大量に消さない:
初めてこの機能を使うと、何百個もの未使用コードが見つかることがあります。一気に消すとGitのコンフリクトやレビューの地獄を見るため、プルリクエスト(PR)を機能別やディレクトリ別に分割してマージしていくのが定石です。
2. マジックストリングに注意:
Laravelのサービスコンテナや、動的なメソッド呼び出し(`$this->$methodName()` のような記法)は、PhpStormの静的解析でも見落とされが「偽陽性(False Positive)」になることがあります。消す前には必ず、そのレイヤーの仕様を軽く思い出すか、テストコードを走らせる習慣をつけましょう。
—
まとめ:美しいコードは、快適な開発体験から生まれる
今回は、PhpStormを使ったデッドコードの特定と、安全な一括削除の戦略について解説しました。
- `Run Inspection by Name` でプロジェクト全体をスキャンする。
- リストアップされたものを、ただ消すのではなく `Safe Delete` で依存関係の安全性を担保しながら消す。
たったこれだけの習慣を取り入れるだけで、あなたのプロジェクトは常に軽快で、見通しの良い状態を保つことができます。コードが綺麗になると、毎日のコーディングが驚くほど楽しく、ストレスフリーになりますよ。
「これをマスターすれば、毎日のコーディングが劇的に楽になりますよ」
さあ、今すぐPhpStormを開いて、あなたのプロジェクトのデッドコードを狩りに出かけましょう! 健闘を祈ります!