PHPのプログラミングにおいて、ソースコードの可読性やメンテナンス性を左右する最も重要な要素の一つが「命名規則」です。
多人数での開発はもちろん、個人開発であっても、半年後の自分がコードを理解するためには一貫性のあるルールが欠かせません。
現在、PHP界隈ではPHP-FIGが策定した「PSR-12」や、その正統な後継である「PER(PHP Evolving Recommendation)」が標準的な指針として広く普及しています。
本記事では、最新の標準規格に基づいたクラス、変数、メソッドなどの正しい付け方について、具体的な実例を交えて詳しく解説します。
プログラミングのスキルアップを目指す方は、ぜひこの機会に世界標準のコーディング規約をマスターしてください。
PHPにおける命名規則の標準規格「PSR」と「PER」
PHPの世界には、フレームワークやライブラリ間での互換性を保つための標準規格であるPSR(PHP Standard Recommendation)が存在します。
かつてはPSR-2が主流でしたが、現在はPHP 7以降の機能に対応したPSR-12がその役割を担っています。
さらに近年では、PHPの進化スピードに合わせて柔軟に更新される「PER Coding Style」が次世代の標準として採用されています。
PER(PHP Evolving Recommendation)は、新しい言語機能が追加されるたびにマイナーアップデートが行われる「生きた規格」です。
そのため、モダンなPHP開発においては、PSR-12の基礎を押さえつつ、PERの動向に注目することが重要となります。
なぜ命名規則を守る必要があるのか
命名規則を遵守する最大のメリットは、チーム全体での認知負荷を大幅に軽減できる点にあります。
プロジェクトごとに独自のルールが乱立していると、コードを読むたびに命名意図を推察しなければならず、開発効率が著しく低下します。
標準規格に従うことで、外部のライブラリを導入した際にも違和感なくコードを読み進めることが可能になります。
また、静的解析ツールや自動整形ツール(PHP-CS-Fixerなど)を活用する際も、標準規格に基づいているほうが導入のハードルが低くなります。
クラス・インターフェース・トレイトの命名規則
PHPのオブジェクト指向プログラミングにおいて、クラス関連の命名は最も頻繁に行う作業の一つです。
ここでは、PSRおよびPERで推奨されている形式を解説します。
クラス名は「PascalCase(パスカールケース)」
クラス名は、単語の区切りを大文字で始めるPascalCase(UpperCamelCase)で記述するのがルールです。
名詞を使用し、そのクラスが何を表すエンティティなのかを一目で理解できるように命名します。
<?php
// 正しい例:単語の頭文字を大文字にする
class UserProfile
{
// クラスの内容
}
// 悪い例:すべて小文字やスネークケースはNG
class user_profile
{
}
インターフェースとトレイトの区別
インターフェースやトレイトの命名についても、基本的にはクラスと同様にPascalCaseを使用します。
かつてはインターフェース名に「Interface」を付けたり、トレイト名に「Trait」を付けたりする慣習がありましたが、現代のPSR/PERではサフィックス(接尾辞)を必須としていません。
ただし、プロジェクトの規約によっては区別しやすくするために付けることもありますので、周囲のコードに合わせることが大切です。
| 種類 | 命名スタイル | 例 |
|---|---|---|
| クラス | PascalCase | InvoiceGenerator |
| インターフェース | PascalCase | Authenticatable または UserRepositoryInterface |
| トレイト | PascalCase | Timestampable または LoggableTrait |
変数とプロパティの命名規則
変数やプロパティの命名は、開発者の好みが分かれやすい部分ですが、PHP標準では一定の指針が示されています。
プロパティは「camelCase(キャメルケース)」
クラス内で定義するプロパティ名は、最初の単語を小文字で始め、続く単語の頭文字を大文字にするcamelCase(lowerCamelCase)が推奨されます。
PSR-12では「プロパティの命名については特定のルールを強制しない」とされていますが、多くのフレームワーク(LaravelやSymfonyなど)ではキャメルケースが採用されています。
<?php
class Order
{
// 正しい例:キャメルケースを使用
private int $orderId;
protected string $customerName;
// 悪い例:スネークケースはプロパティでは一般的ではない
public $order_date;
}
ローカル変数の考え方
メソッド内で使用するローカル変数については、PSRによる厳格な規定はありません。
しかし、プロパティ名と一貫性を持たせるためにキャメルケースで統一するのが一般的です。
一方で、データベースの物理名と合わせるためにスネークケース(snake_case)を使用する開発現場も存在します。
重要なのは、一つのプロジェクト内でルールを混在させないことです。
メソッドと関数の命名規則
メソッドや関数は「動作」を表すため、命名には動詞を含めるのが基本です。
メソッド名は「camelCase」で統一
クラスのメソッド名は、PSR-12およびPERにおいてcamelCaseで記述することが明示されています。
「何をするのか」が明確に伝わるよう、具体的で簡潔な名前を付けましょう。
<?php
class User
{
// 正しい例:動詞から始めるキャメルケース
public function saveProfile(): bool
{
// 保存処理
return true;
}
// 取得系は getXXX、真偽値を返すものは isXXX や hasXXX
public function isActive(): bool
{
return true;
}
}
グローバル関数の扱い
クラスに属さないグローバル関数については、現在ではあまり推奨されませんが、作成する場合はスネークケースが使われる歴史的な経緯があります。
しかし、モダンなPHP開発ではヘルパークラスのスタティックメソッドとして定義することが多いため、その場合はメソッドの命名規則(camelCase)に従います。
定数とEnum(列挙型)の命名規則
定数やEnumのケース名は、一目で定数であると認識できるように特別なルールが適用されます。
定数はすべて大文字の「SNAKE_CASE」
クラス定数(const)および define() で定義する定数は、すべて大文字で記述し、単語間をアンダースコアで繋ぐUPPER_SNAKE_CASEを使用します。
これは、他の言語とも共通する一般的な慣習であり、PSR-12でも明確に定義されています。
<?php
class Config
{
// 正しい例:すべて大文字とアンダースコア
public const VERSION_NUMBER = '2.1.0';
public const DEFAULT_LANGUAGE = 'ja';
}
Enum(列挙型)の命名
PHP 8.1で導入されたEnum(列挙型)本体の名前はクラスと同様にPascalCaseです。
内部のケース名については、PSR-12の拡張としてPascalCaseで記述することが一般的になっています。
<?php
enum UserStatus: string
{
case Active = 'active';
case Pending = 'pending';
case Deactivated = 'deactivated';
}
名前空間(Namespace)の命名規則
名前空間は、コードの構造を整理し、クラス名の衝突を防ぐために不可欠な要素です。
名前空間の指定には、オートローダーの規格であるPSR-4が密接に関わっています。
名前空間は「PascalCase」で階層化
名前空間の各セグメントは、PascalCaseで記述します。
一般的には「ベンダ名(組織名)\プロジェクト名\サブディレクトリ名」という階層構造を持たせます。
<?php
// 正しい例
namespace MyCompany\Ecommerce\Billing;
class Invoice
{
}
名前空間を適切に設定することで、ディレクトリ構造とクラス名が1対1で対応し、ファイルシステム上での管理が容易になります。
命名において避けるべきアンチパターン
正しい命名スタイル(ケース)を選んでいても、意味の不明瞭な名前を付けてしまっては意味がありません。
ここでは、PHP開発で避けるべき代表的なアンチパターンを紹介します。
意味のない単一文字の変数名
ループのカウンタ変数としての $i を除き、意味を持たない1文字の変数は避けるべきです。
たとえば $u ではなく $user、$d ではなく $data または $date と記述しましょう。
「短さ」よりも「情報の密度」を優先するのがプロフェッショナルのコードです。
否定形の変数名
条件分岐で使用する変数に否定形を使うと、論理が複雑になりバグの原因になります。
たとえば $isNotError という変数に対して if (!$isNotError) と記述すると、二重否定になり理解を妨げます。
常に肯定形(例:$isValid や $isSuccess)で命名し、論理構造をシンプルに保ちましょう。
型名をプレフィックスに含める(ハンガリアン記法)
かつてのPHPでは $strName や $arrUsers のように型を名前に含める手法がありましたが、現代では非推奨です。
PHP 7以降、引数や戻り値に型宣言ができるようになったため、変数名に型情報を含める必要性はなくなりました。
型情報は型ヒント(Type Hinting)で示し、変数名はそのデータの内容を示すことに集中させてください。
命名規則を自動でチェックする方法
人間がすべての規則を手動で守り続けるのは困難です。
そのため、ツールを導入して自動的にチェックする環境を整えることが推奨されます。
PHP_CodeSnifferの活用
PHP_CodeSnifferは、コードがPSR-12などの規約に沿っているかをスキャンしてくれるツールです。
CI/CDパイプラインに組み込むことで、規約違反のあるコードがマージされるのを防ぐことができます。
PHP-CS-Fixerによる自動整形
PHP-CS-Fixerを使用すれば、命名規則の軽微な違反(スペースの有無や大文字小文字など)を自動で修正できます。
開発者はロジックに集中し、フォーマットはツールに任せるのが現代的なワークフローです。
まとめ
PHPの命名規則は、単なる見た目の問題ではなく、プロジェクトの品質と開発速度を担保するための基盤です。
PSR-12や最新のPERに準拠した命名を心がけることで、誰にとっても読みやすく、メンテナンスしやすいコードになります。
クラス名にはPascalCase、メソッド名やプロパティ名にはcamelCase、定数にはUPPER_SNAKE_CASEを使用することを基本としてください。
また、否定形を避け、型情報を名前に含めないといった「意味的」な配慮も忘れてはなりません。
日々のコーディングの中でこれらのルールを意識し、洗練されたPHPプログラムを記述していきましょう。
