Appearance
コーディング規約
このドキュメントは、CI で自動チェックされない項目を中心に、レビュー時に確認すべき規約をまとめたものです。自動チェックされる項目は各ツールの設定・CI に任せ、ここでは「何でチェックされるか」の記載にとどめます。
CI で自動チェックされるもの
- コーディングスタイル・命名: WordPress Coding Standards を採用。PHPCS で自動チェック。
- 型・静的分析: PHPStan(Level 4)で自動チェック。
- レイヤー依存関係: Deptrac で自動チェック。
- PSR-4: 名前空間とファイルパスの対応を CI で自動チェック(ローカルコマンドは コマンド一覧 参照)。
- 単体テスト: PHPUnit で自動チェック。
レビューで確認する項目(自動チェック外)
以下は CI では検出されないため、レビュー時に意識して確認する。
0. パス・オートロード・メッセージ
- パス: PathConstants(
get_templates_path()等)またはROOT/VERSIONを使用。個別ファイル用定数は作らない。 - 読み込み: Composer PSR-4 +
useで自動化。vendor/autoload.phpは connector.php で読み込み済みのため重複しない。 - メッセージ文言: すべて
core_src/Constants/Messages.phpで定義し、呼び出し側はMessages::定数名を参照。
メッセージ定義の例外(P-WORLD archive 管理サブシステム)
上記 Messages を原則とするが、P-WORLD メールアーカイブ等の管理専用サブシステムでは、サイト全体向けの定数と分けるため次に置きうる。
- 管理画面 UI ・ AJAX 応答のユーザー向け文言:
PworldArchiveCopy(core_src/Constants/PworldArchiveCopy.php) - ログ用(
error_log等):PworldArchiveErrorLog(core_src/Constants/PworldArchiveErrorLog.php)
Deptrac により Service 層等が App\Admin 配下に専用定数を定義しづらい一方、上記は App\Constants に置くことで層の依存を保ちながら P-WORLD 専用の文言を集約できる。新規の P-WORLD 管理系向け文字列を追加する際はこの方針に従う。
1. 型宣言・DocBlock・use 文(PHPStan で拾いきれない部分)
- DocBlock では
@param string[],@return array<int, Entity>など具体型を記載。 - クラス参照は
useでインポートし FQCN を避ける(例外:\wpdb,\DateTime等)。
2. 配列マージ
- 型推論を保つため、配列の結合は
[ ...$a, ...$b ]を優先。array_mergeはmixed[]になりやすい。数値キーはどちらも再インデックスされる。
3. 責務分離
- 配列の有無・要素数だけで判定できる内容は View 側で判定し、バックエンドで冗長なフラグを追加しない。複雑なビジネス判定・セキュリティ上の理由がある場合はバックエンドで判定可。
4. 依存性注入・名前付き引数
- 依存はコンストラクタで注入。コンストラクタ内で
newして実装に直接依存しない。 - 名前付き引数(必須): 引数 2 つ以上は名前付きで記述。
5. SQL
- N+1 を避け、IN 句などで一括取得。ORDER BY 等はホワイトリスト(Entity 定数・
['ASC','DESC'])で組み立て、生の文字列連結禁止。
6. Entity 定数・キャッシュ
- DB カラム参照は Entity の定数(例:
$row->{Entity::COLUMN_NAME})を使用。 - 読み取り頻度の高いデータは
wp_cache_get/wp_cache_setを検討。
7. セキュリティ
- 外部取得は
wp_remote_get/wp_remote_retrieve_body等の WordPress API を優先。file_get_contents( $url )等は避ける。
命名規則(参考)
WordPress Coding Standards に準拠。PHPCS で自動チェック。対象ごとの規則は下表のとおり。
| 対象 | 規則 | 備考 |
|---|---|---|
| クラス・インターフェース | PascalCase | 例: HallRepository, DailyArticleServiceInterface |
| 関数・メソッド | snake_case | 例: get_templates_path(), find_by_ids() |
| 変数 | snake_case | 例: $post_id, $result_list |
| 定数 | UPPER_SNAKE_CASE | 例: Messages::ERROR_INVALID_ID, Entity::COLUMN_NAME |