この記事は、「独学エンジニア」で学んだ内容をもとに、自分自身の理解を深めるための備忘録としてまとめたものです。
PHPのコーディング規約(PSR)や、それをチェックする静的解析ツール「PHP_CodeSniffer(PHP-CS)」について、後から見返しても分かりやすいように整理しました。
1. コーディング規約とは?
- コーディング規約とは、コードを書く際にエンジニアが守るよう定められたルールです。
-
目的:
- プログラムの品質を均一化。
- コードの可読性を向上。
- チーム開発での統一感を確保。
2. PHPのコーディング規約: PSR
PSRとは?
- *PSR(PHP Standards Recommendation)**は、PHPにおけるコーディング規約の標準。
- PHPの主要なフレームワーク(Laravel、Symfonyなど)のルールが統一されていなかったため、フレームワーク間での共通ルールとして定められたもの。
- *PHP-FIG(PHP Framework Interoperability Group)**というグループが策定。
PSRの主な種類
-
PSR-1:
- 基本的なコーディング規約。
- 例:
- クラス名は「StudlyCaps(パスカルケース)」を使用。
- PHPファイルはUTF-8で保存。
- メソッド名はキャメルケースを使用。
-
PSR-12:
- コーディングスタイルのガイドライン。
- PSR-1を基盤に、より詳細なスタイルガイドを提供。
- 例:
- インデントにはスペース4つを使用。
- 行末には余分な空白を入れない。
- 名前空間やクラスを適切に配置。
3. PHP_CodeSniffer(PHP-CS)とは?
概要
- PHP_CodeSniffer(PHP-CS)は、PHPコードがコーディング規約に沿って書かれているかを静的解析するツール。
-
主な機能:
-
PHP-CS:
- コードがコーディング規約を守っているかをチェック。
-
PHP-CBF:
- コードを規約に従って自動修正(フォーマット)する。
-
PHP-CS:
PHP-CS vs PHP-CBF
| 機能 | PHP-CS | PHP-CBF |
|---|---|---|
| 役割 | コーディング規約違反を検出。 | コーディング規約違反を自動修正。 |
| 学習効果 | どの規約に違反しているか学べる。 | 自動修正されるため、何が直ったか分かりにくい。 |
| おすすめ用途 | 初心者や規約を学ぶ段階におすすめ。 | 時間を節約したい場合に便利。 |
4. 静的解析のメリット
(1) コーディング規約を守ることで得られるメリット
- コードの品質が均一化され、読みやすいコードが書ける。
- チーム開発において、コードの保守性と再利用性が向上。
- レビューの効率化につながり、レビューコストが削減される。
(2) PHP-CSを使うメリット
- 規約に違反している箇所を自動的に検出。
- 修正作業を通して、コーディング規約を学習できる。
- コードの問題を事前に発見することで、開発効率が向上。
5. 注意点
-
PHP-CS vs PHP-CBFの使い分け:
- PHP-CSは規約に違反している箇所をリストアップするだけ。
- PHP-CBFは違反箇所を自動修正するが、何が修正されたか分かりにくい。
- 初心者や規約を学びたい場合は、PHP-CSを利用するのがおすすめ。
-
PSRの規約以外にも対応可能:
- PHP-CSはPSR以外の独自の規約にも対応可能。ただし、最初はPSR-1とPSR-12を遵守するのがおすすめ。
6. 今後の学習内容
- 次回以降で、**PHP_CodeSniffer(PHP-CS)**を実際に使ってコーディング規約をチェック。
- PSR-1とPSR-12に準拠した書き方を実践的に学び、規約に沿ったコードを書けるようにする。
7. まとめ
-
コーディング規約:
- コードを書く際のルールで、品質を均一化するために重要。
- PHPでは PSR-1(基本規約)と PSR-12(スタイルガイド)が標準。
-
PHP_CodeSniffer(PHP-CS):
- コードが規約を守っているかをチェックするツール。
- 手動で修正する際に役立つ。
-
静的解析のメリット:
- コードの可読性・保守性向上。
- チーム開発でのレビュー効率化。
- 良いコーディング習慣が身につく。
コーディング規約を理解し、静的解析ツールを活用できるようになることで、読みやすく保守しやすいコードを書く力が身につきます。この記事はあくまで自分のための学習記録ですが、同じように学習中の方にも参考になれば幸いです。
今後は、実際にPHP-CSを使ってPSR準拠のコードを書けるよう練習を続けていきたいと思います。