mcpField
D
dependency-updates

dependency-updates

github.com/acquia開発10121 回インストール今日更新
リポジトリ

dependency-updates について

Composer で Drupal の依存関係を更新するためのスキルです。ブランチ作成からパッケージ更新、競合解決、検証までを案内し、コミットやデプロイの判断も促します。

主な機能

  1. 01更新前の新規ブランチ作成
  2. 02古いパッケージの確認
  3. 03Drupal コアとモジュールの更新
  4. 04依存関係の競合診断
  5. 05バージョン・安全性・起動状態の検証

活用シーン

  1. 01古い Drupal パッケージの確認
  2. 02コアまたはコントリビュートモジュールの更新
  3. 03Composer のバージョン競合の解決
  4. 04コミットやデプロイ前の更新確認

インストール

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

$npx skills add https://github.com/acquia/acquia-skills --skill dependency-updates

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

詳細

Composer を使用した Drupal の依存関係の更新

次の場合に使用します:

  • 古くなったパッケージを確認する
  • Drupal コアを新しいマイナーリリースまたはパッチリリースに更新する
  • コントリビュートモジュールまたはライブラリを更新する
  • 更新後に Composer のバージョン競合を解決する

開始前 — ブランチを作成する

この手順は必須です。新しいブランチを作成して確認するまで、Composer コマンドを実行しないでください。 main または master でパッケージを直接更新しないでください。

まず現在のブランチを確認します:

git branch --show-current

ユーザーが main、master、または保護されているブランチにいる場合は、作業を中断し、次のように尋ねます:「今回の更新用に、新しいブランチにどのような名前を付けますか?」

名前が決まっていない場合は、デフォルトの名前を提案します(例:deps/drupal-updates-YYYY-MM-DD)。

git checkout -b <branch-name>

続行する前に、新しいブランチがアクティブであることを確認します:

git branch --show-current

保護されていないブランチであることが出力で確認できてから、次の手順に進みます。


古くなったパッケージを確認する

composer outdated

新しいバージョンが利用可能なすべてのパッケージが表示されます。列:現在のバージョン → 利用可能な最新バージョン。

直接依存関係のみを確認する
composer outdated --direct
特定のパッケージを確認する
composer outdated drupal/core-recommended

特定のパッケージを更新する

composer update drupal/package --with-all-dependencies
複数のパッケージを一度に更新する
composer update drupal/package1 drupal/package2 --with-all-dependencies

Drupal コアを更新する(マイナーまたはパッチ)

Drupal コアはいくつかのパッケージに分かれています。すべてをまとめて更新します:

composer update drupal/core-recommended drupal/core-composer-scaffold drupal/core-project-message --with-all-dependencies

注: マイナーアップグレード(例:10.2 → 10.3)では、まず composer.json のバージョン制約を緩和する必要がある場合があります:

"drupal/core-recommended": "^10.3"

その後、上記の更新コマンドを実行します。

インストール済みのバージョンを確認する
composer show drupal/core | grep versions

すべてのパッケージを更新する

既存の composer.json の制約の範囲内で、すべてを更新します:

composer update

これにより composer.lock は更新されますが、composer.json のバージョン制約は変更されません。古いメジャーバージョンに固定されているパッケージは、その境界を越えて更新されません。


すべての Drupal コントリビュートモジュールを更新する

composer update "drupal/*" --with-all-dependencies

競合の解決

「要件を解決できませんでした」

更新を妨げているものを特定します:

# What requires the package you're trying to update?
composer why drupal/package

# What prevents the target version?
composer why-not drupal/package 2.x

composer.json の競合している制約を調整して、再試行します。

2 つのコントリビュートモジュール間の競合
# Check full dependency chain
composer depends drupal/module-a
composer depends drupal/module-b

Composer が互換性のある組み合わせを見つけられるよう、両方をまとめて更新します:

composer update drupal/module-a drupal/module-b --with-all-dependencies
問題のある更新を元に戻す

composer update によってリグレッションが発生した場合は、バージョン管理から以前のロックファイルを復元して、再インストールします:

git checkout composer.json composer.lock
composer install

更新がすでにコミットされている場合は、コミットを取り消します:

git revert HEAD
composer install

更新を検証する

# Confirm installed versions
composer show drupal/core-recommended
composer show --outdated

更新後は composer audit を実行し、新たなアドバイザリが発生していないことを確認します:

composer audit
Drupal のブートストラップが引き続き成功することを確認する

Drush がローカルで利用可能な場合:

drush status

期待される結果:Drupal bootstrap: Successful。ブートストラップに失敗した場合はコミットせず、先に原因を調査してください。

検証後は、必ず次の質問を順番にユーザーに尋ねてください:

1. 「これらの変更をコミットしますか?」

  • はいの場合:
    git add composer.json composer.lock
    git commit -m "Update Drupal dependencies"
    
  • いいえの場合 → 続行する前に、composer.json と composer.lock が未コミットであることをユーザーに伝えます。

2. 「これらの変更を Acquia 環境にデプロイしますか?」

3. デプロイ後: 作業完了とする前に、対象環境でデータベース更新を実行します:

drush updb --yes
drush cr

トラブルシューティング

問題コマンド
更新が無視される — パッケージが古いままcomposer.json の制約を確認し、必要に応じて緩和します
更新後に composer install が失敗するcomposer why-not package version を実行して競合を特定します
予期しないパッケージが変更されたコミットする前に git diff composer.lock を確認します
メモリ制限エラーCOMPOSER_MEMORY_LIMIT=-1 composer update

関連

コメント