概要
Coder は Drupal プロジェクト向けの自動コード品質分析を提供する開発ツールです。Drupal のコーディング規約とベストプラクティスを適用するための PHP_CodeSniffer ルールを定義しています。
UI 機能を提供する従来の Drupal モジュールとは異なり、Coder は開発ワークフローに統合されるコマンドラインツールとして動作します。PHP、YAML、JavaScript などのコードファイルをスキャンし、Drupal の公式コーディング規約への違反を検出して、修正を提案または自動的に適用します。
このライブラリには2つの主要なルールセットが含まれています。Drupal の公式コーディング規約を適用する「Drupal」と、Drupal モジュールおよびテーマ開発のベストプラクティスをチェックする「DrupalPractice」です。これらのルールセットを合わせると、コメント、命名規則、空白、セキュリティなどをカバーする100以上の個別スニフが含まれています。
Features
- コメント、クラス、命名規則、セマンティクス、空白、ファイル、フォーマット、info ファイル、関数、制御構造、配列、属性、スコープをカバーする65以上のスニフで Drupal 公式コーディング規約を適用
- オブジェクト使用、関数呼び出し、一般的なプラクティス、関数定義、コメント、info ファイル、定数、変数、YAML 検証を含むベストプラクティス用の39以上のスニフを持つ DrupalPractice 規約
- phpcbf(PHP Code Beautifier and Fixer)による多くの違反の自動コード修正
- 複数のファイル形式をサポート:.php、.module、.inc、.install、.test、.profile、.theme、.info、.info.yml、.txt、.md、.yml
- 非推奨関数と安全でないコードパターンを検出
- Drupal フック文書と関数シグネチャを検証
- 翻訳関数(t()、st())の適切な使用をチェック
- .info.yml ファイル構造と必須キーを検証
- 人気の IDE と統合:PhpStorm、VSCode、Atom、Eclipse、Vim、Sublime Text など
- phpcs.xml.dist によるプロジェクト固有の設定が可能
- 未使用または未定義の変数を検出する変数分析
- 外部規約を活用:PEAR、PSR-2、PSR-12、Squiz、SlevomatCodingStandard
Use Cases
コミット前のコード品質チェック
コードをコミットする前に phpcs を実行して、すべての変更が Drupal コーディング規約を満たしていることを確認します。Git の pre-commit フックを設定して自動的に実行:./vendor/bin/phpcs --standard=Drupal --extensions=php,module,inc,install,test,profile,theme path/to/changed/files
継続的インテグレーションパイプライン
CI/CD パイプラインに Coder を追加して、コード品質違反が検出された場合にビルドを自動的に失敗させます。リポジトリに phpcs.xml.dist を作成し、CI スクリプトで ./vendor/bin/phpcs を実行して、すべてのチームメンバーが一貫したコード品質を維持できるようにします。
自動コードフォーマット
phpcbf(PHP Code Beautifier and Fixer)を使用して多くのコーディング規約違反を自動修正:./vendor/bin/phpcbf --standard=Drupal --extensions=php,module web/modules/custom。空白、インデント、その他多くのフォーマット問題を自動修正することで時間を節約できます。
Drupal.org 貢献の準備
Drupal.org プロジェクトにパッチやマージリクエストを提出する前に、Drupal と DrupalPractice の両方の規約を実行して、貢献がコミュニティ規約を満たし、受け入れられる可能性が高くなるようにします。
レガシーコードの修正
レガシー Drupal コードを扱う際に、Coder を使用してコーディング規約違反を特定し、体系的に修正します。まずすべての問題のレポートを生成し、phpcbf で自動修正を行い、残りの問題を手動で対処します。
チームコードレビューの自動化
チームのコードレビュープロセスに Coder を統合します。レビュアーはロジックとアーキテクチャに集中し、Coder がスタイルと規約の適用を担当することで、レビュー時間を短縮し、一貫性を確保できます。
Tips
- プロジェクトルートに phpcs.xml.dist ファイルを作成して、チームと一貫した設定を共有し、CI パイプラインで使用する
- phpcs と同じオプションで ./vendor/bin/phpcbf を使用して多くの違反を自動修正
- カラー化されたターミナル出力のために --colors フラグを追加:./vendor/bin/phpcs --colors --standard=Drupal path/to/code
- 除外設定に役立つスニフ名を出力に表示するために -s フラグを使用:./vendor/bin/phpcs -s --standard=Drupal path/to/code
- 両方の規約を一緒に実行:./vendor/bin/phpcs --standard=Drupal,DrupalPractice --extensions=php,module,inc,install,test,profile,theme,info,txt,md,yml web/modules/custom
- ファイル別の違反概要には --report=summary を、修正可能な変更を確認するには --report=diff を使用
- コーディング中にリアルタイムフィードバックを得るために IDE の PHP_CodeSniffer 統合を設定
- 新規プロジェクトでは最初からゼロトレランスを適用、レガシープロジェクトでは既存の違反を徐々に修正しながら新しい違反を防ぐベースラインアプローチを使用
Technical Details
Troubleshooting 5
./vendor/bin/phpcs -i を実行して Drupal と DrupalPractice がリストに表示されることを確認します。表示されない場合は、dealerdirect/phpcodesniffer-composer-installer が正しくインストールされており、composer.json で Composer プラグインが許可されていることを確認してください。
すぐに対処できないルールを一時的に抑制するためのルール除外を含む phpcs.xml.dist を作成します。<exclude name='Rulename'/> を使用して特定のスニフを無効にし、段階的に対処します。
vendor ディレクトリ、contrib モジュール、または管理外のその他のコードに対して phpcs.xml.dist に exclude-pattern エントリを追加:<exclude-pattern>*/vendor/*</exclude-pattern>
一部のスニフは .tpl.php ファイルから自動的に除外されます。カスタムテンプレートロジックの場合、設定に追加の除外を追加する必要がある場合があります。
--parallel オプションを使用して複数の CPU コアでチェックを実行:./vendor/bin/phpcs --parallel=8 --standard=Drupal path/to/code
Security Notes 4
- Coder には正規表現セキュリティ用の PregSecuritySniff や危険な unserialize() 呼び出しを検出する InsecureUnserializeSniff などのセキュリティ重視のスニフが含まれています
- RemoteAddressSniff はリモート IP アドレスの適切な処理をチェックし、IP スプーフィングの脆弱性を防ぎます
- DrupalPractice.FunctionCalls.CurlSslVerifierSniff は CURL SSL 検証が不適切に無効化されている場合を検出します
- Coder は多くのセキュリティ問題を検出しますが、専用のセキュリティスキャンツールや手動のセキュリティレビューを補完するものであり、置き換えるものではありません