drupal-contrib-mgmt について
drupal-contrib-mgmtは、Drupalのコントリビュートモジュールを保守するための実務ガイドです。Composerでの更新、Drupal 11互換性の確認、パッチの検索・適用、アップグレードのトラブル対応を扱います。
主な機能
- 01Composerによるモジュール更新
- 02Drupal 11互換性の確認
- 03Lenientプラグインの設定
- 04パッチの検索と管理
- 05パッチの検証と修復
- 06Upgrade Statusのスキャンコマンド
活用シーン
- 01コントリビュートモジュールの更新
- 02Drupal 11互換性の評価
- 03モジュールパッチの検索や作成
- 04更新やパッチ適用の失敗対応
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ edutrul/ drupal-ai --skill drupal-contrib-mgmtインストール後、Claude Code で/drupal-contrib-mgmtを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdexamples/create-custom-patch.shfind-and-apply-patch.shmajor-version-upgrade.shupdate-with-patch.shreferences/d11-common-deprecations.mddrupal-patches-workflow.mdissue-queue-rss-feeds.md詳細
Drupal Contrib モジュール管理
コアの更新コマンド
composer require drupal/module_name --with-all-dependencies
composer require drupal/module_name:^3.0 --with-all-dependencies
drush updb -y && drush cr
Drupal 11 との互換性の確認
最も速い方法 — .info.yml を確認します:
cat docroot/modules/contrib/MODULE_NAME/MODULE_NAME.info.yml | grep core_version_requirement
core_version_requirement: ^9.5 || ^10 || ^11 # D11 compatible
core_version_requirement: ^9 || ^10 # Not D11 compatible
upgrade_statusの警告は互換性がないことを意味するわけではありません — モジュールが引き続き^11のサポートを宣言している場合があります- 「手動で確認」ステータスは、誤検知であることがよくあります(実行時のバージョンチェック)
Drupal Lenient プラグイン
バージョン要件がまだ更新されていないモジュール向け:
{
"require": { "mglaman/composer-drupal-lenient": "^1.0" },
"config": { "allow-plugins": { "mglaman/composer-drupal-lenient": true } },
"extra": {
"drupal-lenient": { "allowed-list": ["drupal/module_name"] }
}
}
パッチ管理(cweagans/composer-patches)
重要:2.x を使用してください — git apply を使用するため、信頼性があります。1.x は patch バイナリを使用するため、壊れやすいです。
{
"require": { "cweagans/composer-patches": "^2.0" },
"config": { "allow-plugins": { "cweagans/composer-patches": true } },
"extra": {
"composer-exit-on-patch-failure": true,
"patches": {
"drupal/module_name": {
"Description of patch - Issue #3552531": "patches/module-fix-3552531-2.patch"
}
}
}
}
2.x の注意点:ハッシュベースのキャッシュにより、再インストール後にパッチがひそかに適用されなくなることがあります。
パッチが適用されていることの確認
./scripts/verify-patches.sh # Check all critical patches
./scripts/verify-patches.sh --fix # Auto-reinstall affected modules
確認対象の新しいパッチを追加するには、scripts/verify-patches.sh を編集します:
CRITICAL_PATCHES=(
"docroot/modules/contrib/MODULE:src/File.php:patternToFind:Description"
)
パッチが見つからない場合:
./scripts/verify-patches.shを実行して特定しますcomposer reinstall drupal/module_nameまたは./scripts/verify-patches.sh --fixを実行します- それでも失敗する場合:
composer update --lock
パッチを探す — 作成する前に検索する
最重要:カスタムパッチを書く前に、必ず drupal.org の課題キューを検索してください。
- 正確なエラー文字列を抽出します:例:
"Unsupported operand types: array + null" - 検索します:
https://www.drupal.org/project/drupal/issues?text=Unsupported+operand+types+array+null .patch添付ファイルがある RTBC(コミュニティによるレビューとテスト済み)課題を探しますpatches/にダウンロードし、composer.jsonに追加します
パッチの命名:module-issue-NODEID-COMMENT.patch(例:audiofield-d11-3432063-12.patch)
既存のパッチが更新後に適用できなくなった場合:
- ファイル名からノード ID を抽出 →
drupal.org/node/NODEIDにアクセス → 最新のコメントで更新されたパッチを探します
ローカルパッチの作成
インストール済みの vendor コピーではなく、contrib リポジトリの別のクローンから必ずパッチを作成してください。
cd ~/Sites && git clone [email protected]:project/module_name.git module_name-contrib
cd module_name-contrib && git checkout 1.0.3 # match installed version
# make changes...
git diff > ~/Sites/your-project/patches/module_name-custom-fix.patch
次に composer.json に追加し、composer reinstall drupal/module_name を実行します。
パッチの適用
composer install # Install with patches
composer reinstall drupal/module_name # Re-patch a single module
composer patches-repatch # Re-patch all patched deps
Drupal 11 非推奨項目のクイックリファレンス
| 非推奨 | 置き換え |
|---|---|
REQUEST_TIME | \Drupal::time()->getRequestTime() |
user_roles() | \Drupal\user\Entity\Role::loadMultiple() |
file_validate_extensions() | file.validator サービス |
_drupal_flush_css_js() | AssetQueryStringInterface::reset() |
Upgrade Status スキャン
drush upgrade_status:analyze --all
drush upgrade_status:analyze module1 module2
drush upgrade_status:analyze --all --ignore-contrib # custom code only
トラブルシューティング
| エラー | 解決策 |
|---|---|
Cannot apply patch | モジュールのバージョンが変更されています — drupal.org/node/NODEID で更新されたパッチを探します |
requires drupal/core ^9 | drupal-lenient の許可リストに追加します |
patch has already been applied | パッチは上流に取り込まれています — composer.json から削除します |
drush updb fails | モジュールをアンインストール → 更新 → 再有効化してみてください |