composerでの8.3.7から8.4へのアップグレードで実際にやるべきことは

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
s-jack's picture

drupal-composer/drupal-projectを利用し、composerでのDrupal 8.3.4から8.4へのアップグレードで、実際にやるべきことは初心者には難しいです。
Drushも一部drushのバージョンを8では障害があるので、9へあげたほうが良いという情報もありました。
drupal-composer/drupal-projectでは、Composerで管理するのでdrush pm-updateは使えないようになってますが、Drush9では単独でもdrush pm-updateが使えなくなる前提とのこと。
また、symfonyのコンポーネントの一部依存があるようですし。
composer.jsonをどう修正したら良いかアドバイスお願いします。

Comments

8.4にならない

s-jack's picture

新規インストールの場合、drupal-composer/drupal-projectに記載のとおり、
composer create-project drupal-composer/drupal-project:8.x-dev some-dir --stability dev --no-interaction
すると、なぜか8.4はダウンロードされず、8.3.7がダウンロードされます。バグですかね。。。

現在のサイトですが、coreを8.3.7から8.4にアップデートしようとすると、何も起こりません。
composer require drupal/core --with-dependencies

composer.jsonは次のようにセマンティックバージョンな記述となっており、なにか記述しなければいけないのでしょうか。。。特にコントリビュートモジュール以外はrequireしてないのですが、8.4にするための依存関係だけをちょっと修正しないといけないとか。

"require": {
"composer/installers": "^1.2",
"cweagans/composer-patches": "^1.6",
"drupal-composer/drupal-scaffold": "^2.2",
"drupal/admin_toolbar": "^1.20",
"drupal/chosen": "^2.4",
"drupal/console": "^1.0.1",
"drupal/core": "~8.0",
"drupal/devel": "^1.0",
"drupal/edit_content_type_tab": "^1.0",
"drupal/extlink": "^1.0",
"drupal/field_group": "1.x-dev",
"drupal/geofield": "^1.0@alpha",
"drupal/geofield_map": "^1.11",
"drupal/geolocation": "^1.11",
"drupal/gtranslate": "^1.13",
"drupal/l10n_client": "^1.0@alpha",
"drupal/module_filter": "^3.0",
"drupal/taxonomy_container": "^1.0",
"drupal/taxonomy_formatter": "^1.0@alpha",
"drupal/tmgmt": "^1.2",
"drupal/tmgmt_google": "1.x-dev",
"drupal/tmgmt_microsoft": "1.x-dev",
"drupal/tmgmt_mygengo": "1.x-dev",
"drupal/token": "^1.0",
"drush/drush": "~8.0",
"harvesthq/chosen": "^1.7",
"webflo/drupal-finder": "^1.0.0",
"webmozart/path-util": "^2.3"
},

composer update でsymfonyなど全体をアップデートしてからでないと、drupal/coreがアップできないとか。
どのような順序で行うのが良いのでしょうか。
Drupal/coreの依存関係が他のrequireに書かれているので、そうするとたのdrupal/core以外の部分を修正しないといけないのでしょうか?

composer why-not drupal/core 8.4.0

Tomotsugu Kaneko's picture

composer why-not drupal/core 8.4.0 でどのパッケージが足を引っ張っているか分かるかもしれません。使い方などは以下を確認してみてください。

Command-line interface / Commands - Composer

twitter: @snize

composer update

s-jack's picture

composer update —with-dependencies は非推奨みたいですが、—dry-runで調べたら行けそうなので、テスト環境なのでやっちゃいました。
次回は教えていただいたcomposerのコマンドをもっと沢山勉強して調べてからにします。
Slackで色々とおしえていただいたおかげで、やっとcomposerでのアップーデートに少し慣れてきた感じです。

Tomotsugu Kaneko's picture

解決されたようで良かったです〜
composer update —with-dependenciesが非推奨とはどういう意味でしょうか?

twitter: @snize

非推奨の記述がありました

s-jack's picture

Update procedure in Drupal 8 | Drupal.org

このドキュメントによると、

Please Note: composer update --with-dependencies updates core and all modules and is not recommended, as it could cause problems in some situations, and it's too difficult to see what's changed with everything being updated at once.

とあり日本語訳も一応記しておきますが、
ご注意ください:composer update --with-dependenciesはコアとすべてのモジュールを更新しますが、状況によっては問題を引き起こす可能性があるため、推奨されていません。

おそらくつまり、コアをアップデートするときは、単純にdrupal/core --with-dependencies でコアに関連するものだけ段階的に限定してあげるように、ってことじゃないでしょうか?

Tomotsugu Kaneko's picture

なるほど、これは引用された文章の直前も含める必要がありcomposer update drupal/modulename --with-dependenciesであれば指定したモジュールとそれの依存するパッケージがアップデートされることに対して、composer update drupal/modulename --with-dependencies はおっしゃる通りすべてのモジュール及び依存パッケージがアップデートされるので推奨しない。という意味だと思います。

Then do: composer update drupal/modulename --with-dependencies for each module you require.

Please Note: composer update --with-dependencies updates core and all modules and is not recommended, as it could cause problems in some situations, and it's too difficult to see what's changed with everything being updated at once.

https://www.drupal.org/docs/8/update/update-procedure-in-drupal-8

twitter: @snize

順序がきになる

s-jack's picture

はい、おっしゃるとおりです。
いきなり全体でupdate --with-dependenciesはかけるなと。
そこでアプデの順序が気になるわけです。

1 コアを除くcontributeモジュールを、drupal/modulename --with-dependenchiesでアップデートし、

2 次にコアを、drupal/core --with-dependenchiesでアップデートし、

3 最後にcomposer update (ここで--with-dependenciesをつけるかはよく分からない)ということなのでしょうか?

あってますでしょうか。。。

Tomotsugu Kaneko's picture

良いのではないでしょうか。僕の場合は小まめにcomposer updateしているので直接モジュールやコアの指定をすることは多くないですが、あえてアップデートを控えた場合などで後からまとめてアップデートするときは、大体ご提示の手順で行います。

twitter: @snize

こまめにアップデート

s-jack's picture

こまめにcomposer updateをされているというのは、--with-dependenciesをつけずに単純にcomposer updateをされているということでしょうか?

どうも--with-dependenciesの使い所がイマイチ理解できません。
ライブラリやモジュール単体が依存する他のライブラリやモジュールがある場合、それをまとめてアップデートするというのはわかるのですが。。。

Drupal/coreはそもそもsymphonyやその他のライブラリが「全部」依存なのでは?
下位互換性がある場合に限り、--with-dependenciesつけなくても、kanekoさんのとおり単純に全体にcomposer updateで良いのではないか?

うーん、難しいです(笑)

そうです、単純に普段はcomposer

Tomotsugu Kaneko's picture

そうです、単純に普段はcomposer updateしています。

多分、モジュールをwhitelistにモジュールを指定しないcomposer update --with-dependenciescomposer updateは等価なのだと思います。

composer.lockを比較してみるとスッキリするかもしれないですね。

twitter: @snize

追加で教えてくいただけませんか?

s-jack's picture

@Tomotsugu Kanekoさん、追加で教えてくいただけませんか?
Composer updateですが例えば、
当初インストールしたcomposer.jsonで、drupal/hogehoge:^8.1.1とかなっていて、
しばらくcomposer updateでdrupal/hogehoge:8.1.5くらいまでアップデートすると.jsonは当初のまま、.lockは現バージョンが記載されてると思いますが、
8.1.6がリリースされた時に、.jsonファイルを書き換える意味でcomposer require drupal/hogehoge:^8.1.6とかすると(requireの上書き)入れ替えてくれるわけですが、つまり毎回requireしても良いんでしょうか?(笑)

もう1つですが、
drupal/hogehoge:1.x-devみたいな開発版いれたときのアップデートってどうすれば良いのでしょうか?
新規に入れる時は引っ張ってきてくれるが、dev版もcomposer updateでアップデート対象がないと言われてしまいます。
dev版なのでUIでモジュール更新で良いんでしょうか?
drush upでdevの後に数字が付いているのを見かけますが、dev版も細かい識別番号があるのでしょうか?