[JP]PHP コーディングスタンダード
--
共通のコーディングスタイルを持っていることが協業のためにすごく助かるということはもうすでに知られています。僕はコードを書く際に基本的に1人なので、その重要さに対して感じていませんでした。
自分のレガシーコードをリファクタリングしようと決めた時、僕はすごく汚いコード(コーディングルールもない、ただ動くのに集中したコードですね)に直面してしまいました。それにショックをうけ、PHPコーディングステンダードが何か勉強してみようと思いました。
PSR-1: 基本コーディングスタンダード
PHPの基本コーディングスタンダードに対してはRFC 2119に記述されています。
- PHPコードには
<?php
と<?=
のオープンタグのみ(MUST)使用可能です。 - PHPコードは必ず(MUST) UTF-8 without BOM 形式で作成しなければなりません。
- ファイルは何かを宣言(クラス、関数、コンスタントなど)したり、サイドエフェクトの原因(アウトプット生成・.ini設定変更など)となる形式で作成されなければなりませんが(SHOULD)、1つのファイルで宣言とサイドエフェクト発生をすべてするのはダメです(SHOULD NOT)。
- 名前空間とクラスは必ず(MUST) PSR-0: Autoloading Standard & PSR-4: Autoloader ルールに従わなければなりません。
- クラスは必ず(MUST)
PascalCase(StudlyCaps)
で宣言しなければなりません。 - クラスのコンスタントは必ず(MUST)
ALL_CAPS_SNAKE_CASE
で宣言しなければなりません。 - メソッドは必ず(MUST)
camelCase
で宣言しなければなりません。
PSR-12: 拡張コーディングスタイル
PSR-12はPSR-2の拡張版であるのでPSR-2をリプレイスします。拡張コーディングスタイルに対してもRFC 2119に説明されています。
大量のルールがPSR-12に規定されているため、今回のポストでは僕がこれから使いそうなルールに限って説明しようと思います。すべてのルールが確認したいという方はこのセクションの1番上にあるリンクを確認してください。
Files
- すべてのPHPファイルは必ず(MUST)
Unix LF
改行文字を使用しなければなりませんし、必ず(MUST)1つのLF
と共にファイルを終了しなければなりません。 - ファイルにPHPコードのみ作成されている場合、クロージングタグ(
?>
)は必ず(MUST)省略しなければなりません。
Lines
- 1つのラインの長さは80文字を超えてはいけません(SHOULD NOT)。
- 行の最後には空欄(trailing white space)があってはいけません(MUST NOT)。
- 可読性の向上のため特別に禁止された場合じゃない時には改行を追加しなければなりません(MAY)。
- 1行に1文章以上を入力してはいけません(MUST NOT)。
Indenting
- 必ず(MUST) 4つのスペースでインデントしなければなりません。
- インデントのためにタブを利用してはいけません(MUST NOT)。
Keywords and Types
- すべての予約されているキーワードとタイプは必ず(MUST)小文字で使わなければなりません。
※TRUE
の代わりtrue
を使用しなければなりません。 - 必ず(MUST)短いタイプのキーワードを使用しなければなりません。
※boolean
の代わりbool
を使用しなければなりません。
Declaration
- 宣言ステートメント(
declare
)には必ず(MUST)スペースを含めてはいけません。
※declare(strict_types=1)
- コメントや文章がクロージングブラケット(
}
)の後ろに位置してはいけません(MUST NOT)。 - クラスを新しくインスタンス化する場合、(
new
)の後ろに丸括弧(()
)は必ず(MUST)作成しなければなりません。
※new TestClass();
extends
とimplements
は必ず(MUST)クラス名とと同じ行に位置しなければなりません。
Regards of Classes
- トレイとを使用する時、
use
キーワードは必ず(MUST)PHPオープンタグの後に位置しなければなりませんし、1つの行には1つの宣言のみ作成しなければなりません(MUST)。複数の宣言を1つの行に宣言してはいけません(MUST NOT)。 - トレイとを使用する時、
use
構文をを作成した後には必ず1つの空行を追加しなければなりません(MUST)。 - 可視性(public, protected, privateなど)の公文はPHPがサポートしている限り、プロパティー・コンスタント・メソッドを定義する時、必ず(MUST)定義しないといけません。
- アンダースコアー(
_
)はprivate
かprotected
などの可視性を表現するために使ってはいけません(MUST NOT)。 - 引数のリストので各コンマのすぐ前にはスペースは禁止されていて(MUST NOT)、コンマのすぐ後ろには必ず(MUST)1つのスペースを追加しなければなりません。
- リターンタイプを定義する時にはコロンのすぐ後ろに必ず(MUST)1つのスペースを追加しなければなりません。NULLABLEリターンタイプを表示するための
はてな
とリターンタイプ
の間にスペースを追加するのは禁止されています(MUST NOT)。 abstract
とfinal
キーワードは必ず(MUST)可視性宣言の前に位置しなければなりません。static
キーワードは必ず(MUST)可視性宣言の後に位置しなければなりません。
Parentheses of the Control Structures(制御構造での丸括弧)
- 制御構造(if, else if, else)で丸括弧の前後には必ず(MUST)1つのスペースを追加しなければなりません。
- 制御構造での丸括弧の内部にはスペースがあってはいけません(MUST NOT)。
Conclusion
PHPはすごく大きなプログラミング言語であり、多くの人々がライブラリー・フレームワークなどを作るためのプロジェクトにさんかしています。その時、より効率な協業ができるため、我々はコーディングスタンダードを守る必要があります。
もちろんすごく多いルールが存在するため、すべてのルールを覚えるのはかなり大変なことです。なので、我々はPHP CSなどのようなCode Snifferを利用してコードを自動的にコーディングスタンダードに変換することも可能です。