[PHPのはじめ方] Part30: PSR規約とコードスタイル

PHP

チーム開発を円滑にし、読みやすいコードを目指しましょう!

はじめに:PSRって何? 🤔

PHPの開発を進めていくと、「PSR」という言葉を耳にする機会が増えるでしょう。PSRは PHP Standard Recommendation の略で、PHPコードの書き方に関する「推奨される標準規約」です。

この規約は、PHP-FIG (PHP Framework Interop Group) という、主要なPHPフレームワークやプロジェクトの代表者で構成されるグループによって策定されています。

  • コードの可読性向上: 統一されたスタイルで書かれたコードは、誰が見ても理解しやすくなります。
  • チーム開発の円滑化: メンバー間でコーディングスタイルが異なると、レビューや修正に余計な時間がかかります。PSRに従うことで、スムーズな共同作業が可能になります。
  • フレームワークやライブラリとの互換性: 多くのモダンなPHPプロジェクトはPSRに準拠しています。PSRを理解していると、これらのツールを効率的に利用できます。
  • 保守性の向上: 整然としたコードは、将来の修正や機能追加が容易になります。

PSRは複数存在し、それぞれ異なる側面をカバーしています。今回は、特に重要なPSRについて見ていきましょう!

主要なPSR規約を見てみよう 🧐

数あるPSRの中でも、特に初学者が意識すべき基本的な規約をいくつか紹介します。

最も基本的なルールセットです。

  • PHPタグは <?php<?= のみを使用します。<?<script language="php"> は使用しません。
  • PHPファイルの文字エンコーディングは UTF-8 (BOMなし) を使用します。
  • クラス名は StudlyCaps (例: MyClass)、クラス定数は大文字のスネークケース (例: MY_CONSTANT)、メソッド名は camelCase (例: myMethod) で命名します。
  • 1つのPHPファイルには、シンボル(クラス、関数、定数など)の宣言と、副作用(設定変更、出力生成など)のどちらか一方のみを記述することが推奨されます。

PSR-1を拡張し、より具体的なコーディングスタイルを定めた規約です。(以前はPSR-2が主流でしたが、現在はPSR-12が推奨されています)

  • インデントにはスペース4つを使用し、タブは使用しません。
  • 1行の長さは、80文字を目安(ソフトリミット)とし、最大でも120文字(ハードリミット)を超えないようにします。
  • if, elseif, else, switch, case, while, do-while, for, foreach, try, catch, finally などのキーワードの後にはスペースを1つ入れます。
  • 制御構造の波括弧 {} の使い方(開始括弧は同じ行、終了括弧は次の行など)が細かく定められています。
    <?php
    // 正しい例 (PSR-12)
    if ($condition) {
        // do something
    } elseif ($anotherCondition) {
        // do something else
    } else {
        // do another thing
    }
    
    foreach ($iterable as $key => $value) {
        // process
    }
    
  • クラス、メソッド、プロパティの宣言方法、use宣言のグルーピングや順序なども規定されています。
    <?php
    
    declare(strict_types=1);
    
    namespace Vendor\Package;
    
    use Foo\Bar; // use宣言はnamespace宣言の後、クラス定義の前に記述
    use Other\Lib as OtherLib; // 必要に応じてエイリアスを使用
    use Vendor\Package\Exception\MyException;
    
    class MyClass extends BaseClass implements MyInterface
    {
        public const MY_CONSTANT = 1; // 定数
    
        private string $property; // プロパティ
    
        // コンストラクタ
        public function __construct(string $propertyValue)
        {
            $this->property = $propertyValue;
        }
    
        // メソッド
        public function myMethod(int $arg1, ?string $arg2 = null): bool
        {
            // メソッド本体
            if ($arg1 > 0) {
                return true;
            }
    
            return false;
        }
    
        // 可視性は必ず宣言する (public, protected, private)
        protected function protectedMethod(): void
        {
            // ...
        }
    
        private function privateMethod(): void
        {
            // ...
        }
    }
    

PSR-12は非常に詳細な規約ですが、すべてを暗記する必要はありません。後述するツールを使えば、自動でチェック・修正が可能です。

クラスを自動的に読み込む(オートロードする)ための規約です。ファイルパスと名前空間をどのように対応させるかを定めています。

  • 完全修飾クラス名 (例: \Vendor\Namespace\ClassName) は、特定の構造に従ったファイルパスにマッピングされます。
  • 基本的なルール:
    • ベースとなる名前空間 (例: Vendor\Namespace) は、特定のディレクトリ (例: src/) に対応します。
    • クラス名の中の名前空間区切り文字 \ は、ディレクトリ区切り文字 / に対応します。
    • クラス名の最後は .php ファイルに対応します。
  • 例: クラス \MyVendor\MyPackage\Util\MyUtil は、ベース名前空間 MyVendor\MyPackagesrc/ ディレクトリに対応する場合、src/Util/MyUtil.php というファイルに配置されます。

この規約に従うことで、requireinclude を大量に書く必要がなくなり、Composer などのツールがクラスを自動で見つけて読み込んでくれるようになります。これはモダンなPHP開発には不可欠な仕組みです。

コードスタイルを自動チェック&修正しよう 🛠️

PSR規約を手動で常に守るのは大変です 💦 幸いなことに、コードスタイルを自動でチェックしたり、修正したりする便利なツールがあります。代表的なものを2つ紹介します。

PHP_CodeSniffer(phpcs)は、コードが特定のコーディング規約(PSR-12など)に違反していないかをチェックするツールです。

インストール (Composerを使用):

composer require --dev squizlabs/php_codesniffer

基本的な使い方 (PSR-12でチェック):

./vendor/bin/phpcs --standard=PSR12 src/ # srcディレクトリ内のファイルをチェック

違反が見つかると、ファイル名、行番号、エラーメッセージが表示されます。これを見て手動で修正するか、次に紹介する phpcbf コマンドで自動修正を試みることができます。

自動修正 (可能な範囲で):

./vendor/bin/phpcbf --standard=PSR12 src/

PHP Coding Standards Fixer (php-cs-fixer) は、コードスタイルを規約に合わせて自動で修正することに特化したツールです。phpcsよりも強力な修正機能を持っています。

インストール (Composerを使用):

composer require --dev friendsofphp/php-cs-fixer

基本的な使い方 (PSR-12ルールセットで修正):

まず、プロジェクトルートに設定ファイル .php-cs-fixer.dist.php を作成します。

<?php

$finder = PhpCsFixer\Finder::create()
    ->in(__DIR__ . '/src'); // チェック・修正対象のディレクトリを指定

$config = new PhpCsFixer\Config();
return $config->setRules([
        '@PSR12' => true, // PSR-12ルールセットを適用
        'strict_param' => true, // 追加ルール例: 関数の引数型チェックを厳密に
        'array_syntax' => ['syntax' => 'short'], // 配列構文を短縮形に
    ])
    ->setFinder($finder);

修正実行 (dry-runで確認):

./vendor/bin/php-cs-fixer fix --dry-run --diff # 修正内容の差分を表示(実際には修正しない)

修正実行:

./vendor/bin/php-cs-fixer fix # 実際にファイルを修正

これらのツールを開発プロセスに組み込むことで、常にクリーンなコードを保つことができます 💪

まとめ 🚀

今回は、PHPの標準規約であるPSR、特にコードスタイルに関するPSR-1、PSR-12、そしてオートロードに関するPSR-4について学びました。

  • PSRは、コードの可読性保守性を高め、チーム開発を円滑にするための重要なガイドラインです。
  • PSR-1は基本的な命名規則やファイル形式を定め、PSR-12はより詳細なコーディングスタイルを規定します。
  • PSR-4は、モダンなPHP開発に不可欠なオートロードの仕組みを支えています。
  • phpcsphp-cs-fixerといったツールを活用することで、コーディング規約への準拠を自動化できます。

最初は覚えることが多く感じるかもしれませんが、ツールを使いながら実践していくうちに自然と身についていきます。美しいコードを書く習慣を身につけて、より効率的で楽しいPHP開発ライフを送りましょう! 🎉

次は、いよいよ人気のフレームワークであるLaravelの導入と基本操作に進みます。今回学んだPSRの知識は、Laravelを扱う上でも非常に役立ちますよ!

コメント

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