この記事の要点
- PHPコーディング規約は「PSR」
- PSRの中でも代表的なものが「PSR-1」と「PSR-12」
- PHPフレームワークLaravelやCMSであるWordPressにもコーディング規約がある
以前、PHPとはどんなプログラミング言語で、どのようなサービスを使って学習するのがおすすめかご紹介していました。
PHPシステム開発において、誰が読んでも理解できるコードを書くためにコーディング規約が欠かせません。
PHPコーディング規約には「PSR」があり、特に代表的なものが「PSR-1」と「PSR-12」です。
この記事では、PSR-1とPSR-12、そしてLaravelやWordPressのコーディング規約についても解説します。
目次
PHPのコーディング規約とは?どうして必要?
コーディング規約とは、コーディングをするうえで最低限のルールを定めたものを指します。
コーディングの書き方や書き癖は、プログラマーによってさまざまです。
一行に複数のロジックを入れ込んだコンパクトな書き方が好きな人もいれば、一行ずつロジックとコメントを細かく記述するのがいいという人もいます。
システム開発の現場では複数人で開発を進めるのが一般的です。
そんななか、プログラマーそれぞれが自由な書き方でコーディングをすると、統一感のないプログラム群が出来上がってしまいます。
そこで、誰が見てもわかるシンプルなコードになるように、PHPエンジニア全体が守るべきルールを定めているのです。
PHPのコーディング規約「PSR」ってなに?
PHPのコーディング規約には、PHP-FIG(PHP Framework Interop Group)と呼ばれるグループが策定している「PSR(PHP Standards Recommendations)」があります。
PHP-FIGは、直訳すると「PHPフレームワーク相互運用グループ」。
SymfonyやReactPHP、CakePHPなどの有名なPHPフレームワークのプロジェクトが集まり、意見を出し合って製品の互換性を確認・調整している団体です。
PSRにはさまざまな種類が規定されており、それぞれ枝番で管理されています。
2022年9月現在、承認されているPSRの規約は以下の13種類です。
- PSR-1 Basic Coding Standard(基本的なコーディング標準)
- PSR-3 Logger Interface(ロガーインターフェース)
- PSR-4 Autoloading Standard(オートローダー標準)
- PSR-6 Caching Interface(キャッシングインターフェイス)
- PSR-7 HTTP Message Interface(HTTPメッセージインターフェース)
- PSR-11 Container Interface(コンテナインターフェース)
- PSR-12 Extended Coding Style Guide(拡張コーディングスタイル)
- PSR-13 Hypermedia Links(ハイパーメディアリンク)
- PSR-14 Event Dispatcher(イベントディスパッチャー)
- PSR-15 HTTP Handlers(HTTPハンドラ)
- PSR-16 Simple Cache(シンプルキャッシュ)
- PSR-17 HTTP Factories(HTTPファクトリ)
- PSR-18 HTTP Client(HTTPクライアント)
PSRのステータスとは
PSRでは、Accepted(承認)のステータスに至るまでのワークフローが定められています。
具体的には、以下のようなフローで決定します。
↓
Draft(草案)
↓
Review(レビュー、審査)
↓
Accepted(承認)
Pre-Draftが提案として適切と判断されると、Draftとしてリストに記載されます。
Acceptステータス以外は非承認のため、使用する際には注意が必要です。
特にDraftは草案段階であり、今後大幅に変更される可能性があります。
また、ReviewはDraftに比べるとマイナーな変更になります。
上記の他に、以下のステータスもあります。
- Deprecated(非推奨)
- Abandoned(放棄)
コーディング規約PSR-1の特徴
代表的なコーディング規約であるPSR-1の特徴についてご説明します。
PSR-1とは
PSR-1は、「高レベルの技術的相互運用性を保証するために必要な標準コーディング要素」として定められている規約です。
つまり、PHPプログラミングの記述方法に関して最もベースとなる決まりということになります。
PSR-1では、PHPタグの記述方法のほか、文字コードの規定、名前空間とクラス名の決まり、クラス名やクラス定数の命名規約などを規定しています。
PSR-1の規定を解説
PSR-1で規定されている内容に関して、具体的に見ていきましょう。
PHPタグの規定
PHPファイルは、「<?php」あるいは「<?=」タグを使用するものとします。
文字コードの規定
PHPを記述するファイルの文字コードは、UTF-8のみ使用するものとします。
UTF-8を含むUnicodeには、「BOM無し」と「BOM付き」の2種類が存在しますが、PSR-1ではBOM無しのものを使用します。
禁止事項の規定
以下を含む内容を、同一ファイル内に記載することを禁止します。
- クラスや関数、定数を使用する際の宣言
- ファイル出力など環境に何らかの影響を及ぼす可能性がある処理
名前空間とクラスの規定
名前空間とクラスに関しては、「オートローディング」を規定しているPSR-4に準拠する必要があります。
クラス名の命名規則
クラス名の命名は 「スタッドリーキャップス(StudlyCaps)」で宣言します。
スタッドリーキャップスとは、文字の先頭と単語の区切りを大文字で記載する命名規則のことです。
クラス定数の命名規則
クラス定数の命名は、アンダースコア(_)を区切り文字とし、すべて大文字で宣言する必要があります。
メソッド名の命名規則
メソッド名の命名は 「キャメルケース(camelCase)」で宣言します。
キャメルケースとは、先頭を小文字、それ以外の区切りを大文字で記載する命名規則のことです。
大文字が「らくだのこぶ」のように見えることから、このような名称がつけられました。
コーディング規約PSR-12の特徴
代表的なコーディング規約であるPSR-12について解説します。
PSR-12とは
コーディング規約PSR-12は、コーディング標準PSR-1を拡張し、PHPのコーディングスタイルを規定します。
従来のコーディングスタイルガイドは「PSR-2」でしたが、PHP7対応のため現在は「非推奨」のステータスになっています。
PSR-2の代替として、現在ではPSR-12が推奨されています。
すべては紹介しきれませんが、PSR-12に規定されている内容の一部をご紹介しましょう。
一般
PSR-12はPSR-1に準拠し、以下のような内容が規定されています。
- 全てのPHPファイルは行末をUnix LF(ラインフィード)とし、最終行は空白行にする
- PHPのみ記述されたファイルでは、終了タグ(?>)を省略する
- 行の長さに厳しい制限を設けない
- 1行に複数のステートメントを書かない
- インデントにタブは使用せず、4つのスペースとする
- PHP定数であるtrue、false、およびnullは小文字で記述する
名前空間と使用宣言
namespace、useは一般的にPHPファイルの冒頭で宣言されるステートメントです。
PSR-12では、これらの記載順序について規定されています。
- namespaceの後には必ず空白行を入れる
- useインポートがある場合は必ずnamespaceの後ろに記述する
- useブロックの後には必ず空白行を入れる
例:
<?php namespace Vendor\Package; use FooClass; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; // ... additional PHP code ...
※PSR公式サイトより引用
クラス、プロパティ、およびメソッド
PHPで使用されるクラス、インターフェースやプロパティ、メソッドの記載方法や順序について規定されています。
- 「extendsand」「implements」はクラス名と同一行で宣言する
- クラスの中括弧({})は、それぞれ改行して単独で記述する
- クラス変数などのプロパティは「public」「private」のような形で可視性を宣言する
- メソッドは「public」「private」のような形で可視性を宣言する
- メソッドの引数リストは、各コンマの後ろにスペースを1つ空ける(コンマ前にスペースは不要)
- abstract宣言およびfinal宣言は、可視性宣言の前に記述する
- static宣言は可視性宣言の後ろに記述する
- メソッドや関数の呼び出し時にメソッド名や関数名の間にスペースは付けない
例:
<?php namespace Vendor\Package; use FooClass; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class ClassName extends ParentClass implements \ArrayAccess, \Countable { public $foo = null; public function fooBarBaz($arg1, &$arg2, $arg3 = []) { // method body } }
※PSR公式サイトより一部引用
もっと知りたい!コーディング規約
PHPにコーディング規約についてご紹介しましたが、システム開発の現場ではさまざまなコーディング規約が存在しています。
ここでは、PHPの代表的なフレームワークであるLaravelと、世界的に人気のCMSであるWordPressについてご紹介しましょう。
Laravelのコーディング規約
PHPのフレームワーク人気No.1のLaravel(ララベル)のコーディング規約は、PSR-2コーディング規約とPSR-4オートローディング規約に準拠しています。
すでにご紹介した通りPSR-2は非推奨となっていますので、実際には後継のPSR-12に準拠していることになります。
なお、目視でコーディング規約のチェックをするのは煩雑なため、チェックツールを導入するのが一般的です。
PSR-12に対応しているツールとして、php_codesnifferというものがあります。
導入にはcomposer環境が必要ですが、コマンドで簡単にコーディングチェックが行えるため大変便利です。
Laravelの使い方と学び方については、こちらの記事を参考にしてください。
WordPressにもコーディング規約がある!
世界のウェブサイトの40%超で利用されている人気のCMS・WordPress(ワードプレス)にもコーディング規約があります。
WordPressコーディング規約の適用範囲は、コアコードからテーマ、プラグインに至るすべてのソースコードであり、広く規約の順守が求められています。
WordPressのコーディング規約は言語ごとに分かれており、以下の4つの種類が規定されています。
- CSS コーディング規約
- HTML コーディング規約
- JavaScript コーディング規約
- PHP コーディング規約
WordPressのPHPコーディング規約では、中括弧({})の改行やインデントなど、PSR標準と一部異なる部分もあるため、利用する際には注意が必要です。
なお、WordPressコーディング規約のチェックは公式からWordPress Coding Standardsツールがリリースされており、自動的にチェックを行うことができます。
まとめ
PHPのコーディング規約PSRのなかでも、代表的なPSR-1とPSR-12についてご紹介しました。
システム開発は複数人数で行うのが一般的なため、自分勝手なコーディングをしていてはプロジェクト全体に迷惑が掛かります。
コーディング規約に則った美しいコードの記述方法をマスターし、実際の開発に活かしていきましょう。
また、初心者でも学習しやすいPHPですが、PHPフレームワークを使えるようになれば、仕事がさらに広がります。
2022年最新のPHPフレームワークベスト10と、初心者におすすめのフレームワーク3つをご紹介していますので、参考にしてください。