mcpField
D
drupal-debugging

drupal-debugging

github.com/edutrul開発7350 回インストール21 週間前に更新
リポジトリ

drupal-debugging について

Drupal 開発者向けのデバッグスキルです。Drush ログ、PHP と Twig の確認、キャッシュ、サービス、モジュール、DDEV での XDebug など、よくある問題の診断方法をまとめています。

主な機能

  1. 01Drush ログの絞り込みと確認
  2. 02Drupal 環境で PHP を実行
  3. 03Twig テンプレートと候補のデバッグ
  4. 04サービス、モジュール、フックの確認
  5. 05キャッシュの消去と応答ヘッダーの確認
  6. 06DDEV による XDebug の操作

活用シーン

  1. 01Drupal ログのエラーを追跡
  2. 02サービスやクラスの読み込みを確認
  3. 03Twig テンプレートが使われない原因を特定
  4. 04キャッシュやフックの動作を調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/edutrul/drupal-ai --skill drupal-debugging

インストール後、Claude Code で/drupal-debuggingを入力して読み込まれたか確認します。

同梱ファイルREADME.md

詳細

Drupal のデバッグ

Drush のログ監視

# Watch all errors
ddev drush ws --severity=error

# Last 20 entries
ddev drush ws --severity=error --count=20

# Watch all log levels
ddev drush ws --count=50

# Specific type
ddev drush ws --type=php --count=20

PHP のインラインデバッグ

# Run PHP in Drupal context
ddev drush php:eval "var_dump(\Drupal::config('my_module.settings')->getRawData());"

# Check if service exists
ddev drush php:eval "var_dump(\Drupal::hasService('my_module.my_service'));"

# Check class autoloading
ddev drush php:eval "class_exists('Drupal\my_module\Service\MyService') ? print 'Found' : print 'Not found';"

# Inspect an entity
ddev drush php:eval "
\$node = \Drupal::entityTypeManager()->getStorage('node')->load(1);
print_r(\$node->toArray());
"

Twig のデバッグ

sites/default/services.yml で有効にします:

parameters:
  twig.config:
    debug: true
    auto_reload: true
    cache: false

次に、テンプレート内で設定します:

{{ dump(content) }}
{{ dump(node) }}
{{ dump(_context|keys) }}

ソース内の HTML コメントにテンプレート候補が表示されます:

Devel モジュール

# Install devel
composer require drupal/devel
ddev drush en devel -y

PHP 内で:

// Dump and die
dpm($variable);        // Krumo output in message area
ksm($variable);        // Krumo output (devel module)
dvm($variable);        // Var dump

// Krumo (in Twig via Devel)
// {{ devel_dump(node) }}

キャッシュのデバッグ

# Clear all caches
ddev drush cr

# Rebuild theme registry only
ddev drush php:eval "\Drupal::service('theme.registry')->reset();"

# Check cache hit for a page (Drupal page cache)
# Look for X-Drupal-Cache: HIT in response headers
curl -I https://my-project.ddev.site/

# Check Big Pipe and render cache
ddev drush state:get drupal.maintenance_mode

サービスコンテナのデバッグ

# List all services matching a pattern
ddev drush devel:services | grep my_module

# List all services
ddev drush devel:services

# Check container definition
ddev drush php:eval "
\$def = \Drupal::getContainer()->getDefinition('my_module.my_service');
var_dump(\$def);
"

モジュール/フックのデバッグ

# List all enabled modules
ddev drush pm:list --status=enabled

# Check which modules implement a hook
ddev drush php:eval "
\$modules = \Drupal::moduleHandler()->getImplementations('form_alter');
print implode(', ', \$modules);
"

# Check module info
ddev drush pm:info my_module

よくある問題と解決策

問題解決策
クラスが見つからない名前空間と .info.yml の PSR-4 を確認し、composer dump-autoload を実行します
サービスが見つからないservices.yml の構文を確認し、ddev drush cr を実行します
テンプレートが使用されないTwig のデバッグを有効にし、HTML コメント内のテンプレート候補を確認します
フックが実行されないクラスが services.yml に登録されていることを確認し、Hook 属性を確認します
設定が保存されないconfig/schema/ に設定スキーマがあることを確認します
移行に失敗する詳細を確認するには ddev drush ws を実行し、フィールドのマッピングを確認します

DDEV での XDebug

# Enable XDebug
ddev xdebug on

# Disable XDebug (performance)
ddev xdebug off

# Check XDebug status
ddev xdebug status

IDE(PHPStorm)で、ポート 9003 のリッスンを設定します。

コメント