PSR-12コーディング規約、議論より一貫性を自動化する

PSR-12とは、インデントや波括弧の位置、1行の長さの目安などを定めたPHPのコーディングスタイル標準です。条文を暗記するより、cs-fixer で自動整形して一貫性を保つのが実用的です。

細部を全員で覚える必要はない

PSR-12 はPHPのコーディングスタイルの標準で、インデントは4スペース、波括弧の位置、1行の長さの目安など、見た目のルールを細かく定めています。ただ、これを人間が全部暗記して守るのは現実的じゃないと思います。大事なのは規約の条文そのものより、チームのコードが一貫していることですね。

<?php

declare(strict_types=1);

namespace App\Service;

class UserService
{
    public function find(int $id): ?User
    {
        // メソッドの波括弧は次の行、制御構文は同じ行
        if ($id <= 0) {
            return null;
        }
        return $this->repo->find($id);
    }
}

cs-fixerに任せて手を止めない

スタイルは PHP-CS-Fixer や PHP_CodeSniffer に任せるのが一番だと思います。設定ファイルにルールセットを書いておけば、コマンド一発で整形してくれます。レビューで「ここスペースが」みたいな指摘に時間を使わずに済むのが大きいですね。人は中身の議論に集中したいところです。

# インデントや空白などを自動修正
vendor/bin/php-cs-fixer fix src/

# 変更せず違反箇所だけ確認(CI向け)
vendor/bin/php-cs-fixer fix --dry-run --diff

設定を配って、CIで見張る

設定ファイルをリポジトリに置いて全員が同じルールで整形するのがポイントです。さらに CI で dry-run を回して、規約から外れたコードはマージ前に弾くようにしておくと、一貫性が勝手に保たれます。ルールを「守らせる」のではなく「守られている状態を仕組みで作る」感覚ですね。

// .php-cs-fixer.dist.php
return (new PhpCsFixer\Config())
    ->setRules([
        '@PSR12' => true,
        'array_syntax' => ['syntax' => 'short'],
    ]);

まとめ

PSR-12 の条文を丸暗記するより、cs-fixer に整形を任せて、その設定をチームで共有するほうがずっと実用的だと思います。CI で違反を弾く仕組みまで作れば、スタイルの話は自動化の向こう側に消えていきます。おかげでレビューが本来見たいロジックの議論に集中できるので、私はどのプロジェクトでも真っ先にこれを入れるようにしています。

よくある質問

Q. PSR-12 のルールは全部覚える必要がありますか?
A. 覚える必要はありません。PHP-CS-Fixer などに整形を任せれば、条文を意識しなくてもチームのコードが一貫します。人は中身の議論に集中すればいいと思います。

Q. 全員が同じスタイルで整形するにはどうすれば?
A. 設定ファイルをリポジトリに置いて共有し、さらに CI で dry-run を回して規約から外れたコードをマージ前に弾くと、一貫性が仕組みで保たれます。

類似投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です