こんにちは!
ナビゲータのEVEです。
Javaは、テキストの最初に厳格な規約が記載されていますが、JavaScriptや、PHPはそのような規約は今まで見たことがありませんでした。ただ、いろいろ調べていくうちに、JavaScript、PHPには規約ににたようなものがあることに気づきました。JavaScriptについては、昨日調べ報告したので、本日は、PHPについての報告になります。
[PSR]
PHPの規約として、PSRという標準規約が存在します。それについては、昨日最後にその概要について触れましたが、改めて、ChatGPTに聞いてみました。
PSR(PHP Standards Recommendations)は、**PHP-FIG(PHP Framework Interoperability Group)**という組織によって作成されました。PHP-FIGは、PHPのフレームワーク開発者や主要なプロジェクトのリーダーたちが集まり、互換性のあるコードを書くための標準を定めることを目的として結成された団体です。
■PHP-FIGの目的と背景
PHP-FIGは、異なるフレームワークやライブラリが互いに矛盾することなく、スムーズに連携できるようにするため、コーディング規約やインターフェースを標準化することを目的としています。特に、異なるPHPフレームワーク間の互換性や、開発者が様々なプロジェクト間で一貫したコーディングスタイルを保つためのガイドラインを提供しています。
■PSRの普及状況
PSRは、PHPの開発者コミュニティで広く受け入れられており、多くのPHPフレームワークやライブラリがこの標準に準拠しています。たとえば、以下のような有名なフレームワークがPSRに基づいて開発されています。
・Laravel
・Symfony
・Zend Framework
・Slim Framework
これらのフレームワークは、PSRのコーディング規約やインターフェース標準に従っているため、開発者は異なるプロジェクトでも一貫した規約に従ったコーディングができ、フレームワーク間の互換性も高くなっています。
■業界での影響力
PSRは、PHPフレームワークやライブラリだけでなく、商業的なソフトウェア開発やオープンソースプロジェクトでも採用されていることが多いです。PSRに従うことで、コードの可読性や保守性が向上し、開発者間の協力がしやすくなるため、特に大規模な開発プロジェクトで重視されています。
■結論
PSRは、PHP-FIGによって作成され、現在ではPHPコミュニティ全体で広く普及しています。多くの有名なフレームワークやライブラリがこの標準に従っており、PSRに準拠することで開発の一貫性が向上し、異なるプロジェクト間でもコードの互換性が確保されます。
PSRは着実に普及しており、オープンアーキテクチャなどを構築する場合、有用な標準規約となりそうです。
[PSRの内容]
調べた当初は、命名規約を中心に調べていたので、気づきませんでしたが、命名規約は、PSR-1に記載されており、それ以外の規約も用意されているようです。以下がPSRに記載されている規約になります。
❶PSR-1: 基本コーディング標準
PSR-1は、PHPコードの基本的なコーディング規則を定めています。これにより、コードの統一性が高まり、異なる開発者間でも一貫性のあるコードを書くことができます。
・PHPタグ: <?php または <?= タグを使用し、短縮タグは避ける。
・文字エンコーディング: ファイルはBOMなしのUTF-8で保存する。
・クラス命名規則: クラス名はStudlyCaps(単語の先頭を大文字)形式を使う。
・定数: 定数は全て大文字で、単語間はアンダースコアで区切る(例:MAX_COUNT)。
・サイドエフェクトなし: ファイルはクラス、関数、または定数の宣言のみに限定し、それ以外の処理(例:出力)は行わない。
❷PSR-2: コーディングスタイルガイド
PSR-2は、PSR-1の補足で、詳細なコーディングスタイルに関する規約を定めています。コードのフォーマットを統一し、可読性を向上させることを目的としています。
・インデント: インデントはスペース4つを使用する(タブは使用しない)。
・行の長さ: 1行の最大長は80文字、100文字を超える場合は例外的に許容。
・名前空間とuse宣言: 名前空間宣言の後には1行空行を入れる。use 宣言はブロックでまとめる。
・クラスとメソッド: クラスの中括弧 { は次の行に置く(オープンブレーススタイル)。メソッド名はcamelCaseを使用する。
❸PSR-3: ロギングインターフェース
PSR-3は、ロギングのためのインターフェース標準です。ログを出力するシステムに対して一貫したインターフェースを提供します。
・主要なメソッド: emergency(), alert(), critical(), error(), warning(), notice(), info(), debug()など、ログの重要度に応じてメソッドが定義されています。
・コンテキストデータ: ログメッセージにはコンテキスト情報を渡すことができ、メッセージの詳細を補足する。
❹PSR-4: 自動ロード規約(オートローディング)
PSR-4は、PHPクラスの自動ロードに関する規約です。名前空間に基づいてクラスを自動的に読み込むための標準化を提供します。これにより、手動でのrequireやincludeの使用を避け、コードの整理がしやすくなります。
・名前空間とファイルパスのマッピング: 名前空間はディレクトリ構造と一致し、クラス名とファイル名は同じである必要があります(例:App\Controller\UserControllerは/App/Controller/UserController.phpにマップされる)。
❺PSR-12: 拡張コーディングスタイルガイド
PSR-12は、PSR-2をさらに発展させ、最新のPHPバージョンにも対応するために拡張されたコーディングスタイルガイドです。変数の宣言方法、インラインコード、関数の引数に関するガイドラインが追加されています。
■まとめ
PSRはPHPの開発において標準的なコーディング規則を提供し、複数の開発者が同じプロジェクトで一貫性を保ちながら作業できるようにするためのものです。PSR-1とPSR-2は主に基本的なコーディング規約を定め、PSR-4やPSR-12はさらに詳細なガイドラインを提供しています。PSRに従うことで、コードの可読性、再利用性、保守性が大幅に向上します。
PSR-5〜PSR-11については、正式に承認されなかったため、現在欠番となっています。上記については、概要で、もし規約として利用するなら詳細に調べる必要があるようです。
[あとがき]
JavaScript、PHPとか調べていくと、共通のキーワードが出てきます。具体的な例を挙げると、パスカルケース(PascalCase)、キャメルケース(camelCase)などといった用語です。パスカルケースは、クラスの名をつけるときに使用し、キャメルケースはメソッド名、プロパティ名で利用しています。これは、言語が違っても共通の規約として利用され、どの言語においても一般化されているようです。
近頃、どの言語も似てきていて、現在どの言語で製造しているのか迷うときがありますが、それでもなお、規約は言語共通で作成したほうが混乱が少ないかもしれません。そのため、開発にはより一層注意深さが必要になってきます。
PSR-1〜PSR-4、PSR-12については、今後、EVE Projectで規約を整備し、整備完了後、EVE Projectコーディング規約公開の時に解説をさせていただきます。
なお、既に作ったプログラムは順次修正していき、リリース当時は規約を遵守していない場合があります。プログラムの先頭は、EVE Projectとかはタブを利用しているので、修正が大変そうです・・・。
では、また!!!