【PHP実践|実務向け】PHPコードの「負債」を減らす!実務で見直すべきアンチパターンと改善策

導入

開発現場で「動くけれど読みにくい」「修正するたびにバグが出る」というソースコードに頭を抱えたことはありませんか?PHPは柔軟な記述が可能な言語ですが、その自由度が災いして、知らぬ間に「技術的負債」を積み重ねてしまいがちです。本記事では、実務で頻出する「やってしまいがちな汚いソースコード」を振り返り、明日からコードを劇的に改善するための具体的なアプローチを解説します。

基礎知識

PHPは動的型付け言語であり、短い記述でロジックを組めるのが魅力です。しかし、その手軽さが「命名の適当さ」「ネストの深掘り」「変数の使い回し」を助長します。これらを放置すると、コードの保守性が低下し、チーム開発におけるレビューコストやバグ発生率が跳ね上がります。「コードは書く時間より読まれる時間の方が長い」という意識を持つことが、プロフェッショナルへの第一歩です。

実装/解決策

コードを綺麗に保つための鉄則は、以下の3点に集約されます。

1. 目的ごとに関数を細分化する
ネストが深くなる最大の原因は、一つの関数に処理を詰め込みすぎることです。責務を分割し、関数名を「何をするか(動詞)」で明確にしましょう。

2. マジックナンバーを排除する
意味の不明な数値は定数(const)として定義し、名前を付けます。これにより、修正時に変更箇所が特定しやすくなります。

3. 変数名を省略しない
「$p」や「$arr」のような省略形は、後から読む人にとって解読のクイズになります。日本語のローマ字表記も避け、英語で「何が入っているか」を明示しましょう。

サンプルプログラム

悪い例と、それをリファクタリングした実務的なコード例です。

  • 悪い例:マジックナンバーとネスト、省略形が目立つコード
  • /
    function process($arr) {
    if ($arr[0] == 1) { // 1が何を指すか不明
    for ($i = 0; $i < 10; $i++) { // 処理... } } } /

    • 改善例:定数化と関数分割、命名の明確化

    /
    const STATUS_ACTIVE = 1;
    const MAX_LOOP_COUNT = 10;

    /

    • 有効なユーザーに対してループ処理を行う

    /
    function processActiveUsers(array $userList): void
    {
    if (!isUserActive($userList[0])) {
    return;
    }

    runLoop(MAX_LOOP_COUNT);
    }

    function isUserActive(int $status): bool
    {
    return $status === STATUS_ACTIVE;
    }

    function runLoop(int $count): void
    {
    for ($i = 0; $i < $count; $i++) { // 処理内容をここに記述 } } ?>

    応用・注意点

    現場で役立つコツとして、「早期リターン(ガード節)」の活用を強く推奨します。if文のネストが深くなる場合、条件を満たさない場合に早期にreturnすることで、インデントを浅く保つことができます。

    また、変数の型を意識することも重要です。PHP 7以降では型宣言(引数や戻り値の型)が強化されています。`function calculate(int $a, int $b): int` のように型を明示することで、エディタの補完が効きやすくなり、予期せぬ型変換によるバグを未然に防ぐことが可能です。完璧を目指しすぎず、まずは「昨日書いた自分のコードを読んで理解できるか」という基準から改善を始めてみてください。

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