ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

2021年9月。最新のPHPコーディング規約(PSR)。静的コードチェックはPSR-12。

php
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

今、PHPのコーディング規約のデファクト・スタンダード(事実上のスタンダード)になっているPSRですが、2年ぐらい見てないうちに番号が相当進んでいました。

PSR-0, PSR-1, PSR-2, PSR-4 ぐらいだと思っていた人は相当古いです。すでに番号は18まで進んでいます。

PSRとは何か?

PSRは PHP Standards Recommendations の略で、PHPのコーディング規約のひとつです。

PHP-FIGが策定したPHP標準勧告のことで、PHP-FIG は PHP Framework Interop Group の略で日本語に訳すと『PHPフレームワーク相互運用グループ』。

PHPプロジェクトが集まって意見を出し合い、お互いの製品の互換性を調整する団体です。

CakePHP や Laravel など有名なフレームワークが多く参加していて、PSR は PHPコーディング規約のデファクト・スタンダードになりつつあります。

PHPを勉強しているなら、まずこのコーディング規約を守るのが一番。

PSRは相当変わってる

ここ2年くらいPSRのことについてチェックしてなかったんですが、相当変わってます。PSR-0, PSR-1, PSR-2, PSR-4 くらいしか見てない人は相当古い。

PSRはコーディング規約を機能ごとに割り振り番号で表現しているんですが、ボクは番号が大きくなると前の番号を含んでいるという認識でした。

PSR-0, PSR-1, PSR-2, PSR-4 の関係

が、改めてドキュメントを見直すとこうなってる。

PSR-0, PSR-1, PSR-2, PSR-4 の関係

元々こうなってるのに気づいていなかったのか、あとで変わったのか今となっては分かりませんが、ボクと同じように思っている人は注意が必要。

PSR-1 が基準

PSRは番号で機能ごとに分かれています。

PSR-0Autoloading Standard
PSR-1Basic Coding Standard
PSR-2Coding Style Guide
PSR-4Autoloading Standard

PSR-0を元に肉付けしていくイメージをしやすいですが、基準はPSR-1。'<?php' で始まっているか? など超基本的な構文。

PSR-0は、ネームスペースとクラス名、それを記述したファイル名、パスの規定。

ベーシックが0になっていないのは、PHPがオブジェクト指向プログラミングを推奨しているからだと思う。

PSR-1は、文字コードはBomなしUTF-8、1行の文字数は120行などのスタイルを規定。PSR-4はPSR-0の拡張版。

PSR-2のコーディング規約を守れば、クラスやインタフェースを用いたオブジェクト指向とそれらを使わない非オブジェクト指向の基本的なコーディング規約を網羅できます。

静的コードチェックと関係が深い PSR-0, PSR-1, PSR-2, PSR-4 。

PSRで0, 1, 2, 4がメインに考えられているのは、PHP_CodeSniffer などを用いた静的コードチェックツールの範疇だから。

PSR-0ならファイル名やクラス名などしかチェックしない、PSR-1ならそれに加えて '<?php' から始まっているか? などのチェック、PSR-2 なら、さらに文字コードはUTF-8、1行は120文字以内に収まっているか? などをチェックします。

PSR-2 でチェックを行えば、PHPコードの基本的な構文は自動的に整形することも可能。

2021年9月。最新のコーディング規約はPSR-12

静的コードチェックツールの範囲内にあるPSRは相当変わってます。2年も放置するこうなるかといういい例。

PSR-0非推奨。
PSR-4を代替にする。
Autoloading Standardの統合。
PSR-2非推奨。
拡張版のPSR-12へ移行。
PSR-1を含む。

Coding Style Guide

Extended Coding Style Guide
PSR-1Basic Coding Standard
PSR-4Autoloading Standard
PSR-12Extended Coding Style Guide
静的コードチェックで使うPSR
PSR-0, PSR-1, PSR-2, PSR-4, PSR-12 の関係

注意が必要なのは、チェックツールがPSR-12に対応しなければ使えません。またツールのバージョンが古ければPSR-0, PSR-2 も使えます。

ただ、共通化団体が非推奨にしたものを使い続けるのはおすすめしません。また、古いソースコードを使ってて新たにPSR-12に対応したくないということもあるでしょう。

そのへんはケースバイケースでいいと思います。先送りの末に放置すると、期間が長くなればなるほど修正箇所が増えるので面倒のリスクが広がりますが。

その他の番号はどういうもの?

PSR-0, 1, 2, 4, 12 以外はどう関係してくるか? ですが、その他の番号は、これらの静的チェックツールの範疇ではありません。

お互い独立していて干渉しません。

(たとえば、PSR-15 は PSR-2 を前提としていないし、 PSR-2 は PSR-15 を守る義務はない。)

だからと言って無視はいけません。たとえばロガー(ログ処理)のインタフェースを定義しているPSR-3やHTTP通信のクラス設計を定義している PSR-7, 15, 17, 18 など、どのシステムでも使えるものもあります。

このように移植しやすいものは、コーディング規約を守ったほうが保守・メンテナンスの面で有用です。同じ処理だったらプロジェクトが変わってもコードが読みやすいし修正しやすいですからね?

こういうことのためにPHP-FIGは存在しています。

『静的チェックツールの範疇ではない』と言いましたが、実情は分かりません。

ツールがHTTP通信のコーディング規約も入れてるということもあるでしょう。

そのへんはツール次第です。

PSR-0, 1, 2, 4, 12 が抜けてることはないです。非推奨にならない限り。

じゃないとツールの性能を疑う。

前の投稿
PHP8, パラメータやリターン値が変わる関数。リターン値の判定は注意が必要。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください