PHPコーディング規約:一貫性のある読みやすいプロジェクトコードの作成方法

2019年5月17日10:50:12

はじめに

現在は随時記載しており、後日体系的に整理します。

PHPのコードスタイルが自由すぎることで、プロジェクト内でN通りの記述方法が混在することが問題です。特に以下のケースが挙げられます:

  • 単純な機能に複数のコールバック関数をネストし、可読性が著しく低下
  • if/else文のコードブロックに{}を省略(IDE依存でエラーになり得る)
  • 匿名関数の多重ネストによりコード再利用性が失われる

これらの記法はPHP特有の甘えであり、他の言語では通用しません。Javaの設計思想に触れることがPHPの質の向上に繋がります。

PSR規約

PSR-1,2,3,4,6,7を部分的に採用していますが、全員が完全順守を求めるのは現実的ではありません。

IDE統一

容器やコールバック関数のサポートを考慮し、可能な限り共通IDEを使用することを推奨します。

命名規約

キャメルケースを統一し、変数名は英語の可読単語を採用してください。


namespace App\Service;

class OrderProcessingService {
    public static function getInventoryList(int $storeId, int $orderId) {
        // 処理内容
    }
}

注釈タグはIDEで自動補完されるため、必須です。

コードレイヤー

  • Controller層
  • ServiceInterfaceインターフェース
  • Service実装層
  • Abstract抽象層
  • Models層
  • APIバージョン管理層

抽象層とインターフェースはインスタンス化不可であり、依存注入で多態を実現します。

コーディングルール

  1. UTF-8無BOM形式を使用し、文字化けを防止
  2. MySQLはutf8mb4を推奨
  3. インデントはIDEの自動フォーマット機能を使用
  4. PHPキーワードは小文字必須
  5. if/else文は必ず{}で囲む
  6. switch/caseは複雑な値比較を避ける
  7. foreach内での参照渡しは性能向上に
  8. final修飾子やprivateの適切使用
  9. 定数は大文字+アンダースコア
  10. 静的メソッド呼び出しはコンテナ経由

セキュリティ


$orderId = htmlspecialchars(trim($_POST['id']), ENT_QUOTES, 'UTF-8');

入力パラメータの型指定とエスケープは必須です。

データベース設計

  • 論理削除はis_deleted(10=有効,99=無効)で表現
  • 小数型はdecimalのみ使用
  • varcharは5000文字以内(長すぎる場合はtext型に分離)
  • 必須フィールド:id, created_at, updated_at

索引最適化

  • 3テーブル以上のJOINは禁止
  • varcharのインデックスは長さ指定必須
  • order byは索引の左寄せを活用
  • 区分度の高いカラムを索引左端に

その他のベストプラクティス

  • try-catch-finallyの必須使用
  • 変数は事前に宣言・初期化
  • 多重ループは内側に頻度が高い処理
  • @エラー抑制演算子の使用禁止

設計パターン

FactoryやProxyなどの設計パターンを名前から明確に示す。


interface PaymentGateway {
    public function processPayment();
}

インターフェースと実装クラスの分離により柔軟性を確保します。

Redisキャッシュ

Socketフレームワーク

マイクロサービス

タグ: PHP PSR規約 laravel コーディング標準 データベース設計

6月6日 23:59 投稿