CIVICTHEME JOURNAL 28

DrupalのUpDate 24/09/11

約7,600文字 読了目安:約16分

この記事の目次

DrupalのUpDate 2024/09/11

先日Drupa 10.3.2  > 10.3.3 のUpDateをしたのですが、あまり日を置かず10.3.3  > 10.3.4の案内が来ていたので早速アップデートをしました。さらに日を置かず1日後に10.3.4  > 10.3.5のアップデートが来たので、急を要求する内容と考え、内容を確認するとバグフィックスによるアップデートのようなので、どのような内容かをもう少し詳しく確認してみます。

[Releace Note]

This release reverts #3471741: Fix null $cid in CacheCollector classes, released in 10.3.4, which conflicted with Menu Trail by Path, Entity Manager and Gin Toolbar modules.

————訳————

このリリースは、Menu Trail by Path、Entity Manager、およびGin Toolbarモジュールと競合するため、10.3.4でリリースされた#3471741の修正(CacheCollectorクラスでのnull $cidの修正)を元に戻します。

10.3.5の変更内容

DrupalCore 10.3.4のUpDateで変更したcidの初期化処理を元に戻しています。具体的な内容を確認するためGitlabに記載されている10.3.5で変更されたコードを確認します。

  • core/lib/Drupal/Core/Asset/LibraryDiscoveryCollector.php
  • core/lib/Drupal/Core/Menu/MenuActiveTrail.php

の初期化処理を元に戻す変更になっています。

コードの内容を以下のアコーディオンメニューにまとめて見ます。

  • LibraryDiscoveryCollector.phpの変更内容

    // core/lib/Drupal/Core/Asset/LibraryDiscoveryCollector.php
      public function __construct(CacheBackendInterface $cache, LockBackendInterface $lock, LibraryDiscoveryParser $discovery_parser, ThemeManagerInterface $theme_manager) {
        $this->themeManager = $theme_manager;
        // 変更前
        parent::__construct('', $cache, $lock, ['library_info']);
        // 変更後
        parent::__construct(NULL, $cache, $lock, ['library_info']);
        $this->discoveryParser = $discovery_parser;
      }
       * {@inheritdoc}
       */
      protected function getCid() {
        // 変更前
        if ($this->cid === '') {
        // 変更後
        if (!isset($this->cid)) {
          $this->cid = 'library_info:' . $this->themeManager->getActiveTheme()->getName();
        }
       */
      public function reset() {
        parent::reset();
        // 変更前
        $this->cid = '';
        // 変更後
        $this->cid = NULL;
      }
    }
    
  • // core/lib/Drupal/Core/Menu/MenuActiveTrail.php
      public function __construct(MenuLinkManagerInterface $menu_link_manager, RouteMatchInterface $route_match, CacheBackendInterface $cache, LockBackendInterface $lock) {
        // 変更前
        parent::__construct('', $cache, $lock);
        // 変更後
        parent::__construct(NULL, $cache, $lock);
        $this->menuLinkManager = $menu_link_manager;
        $this->routeMatch = $route_match;
      }
       * @see ::getActiveTrailIds()
       */
      protected function getCid() {
        // 変更前
        if ($this->cid === '') {
        // 変更後
        if (!isset($this->cid)) {
          $route_parameters = $this->routeMatch->getRawParameters()->all();
          ksort($route_parameters);
          $this->cid = 'active-trail:route:' . $this->routeMatch->getRouteName() . ':route_parameters:' . serialize($route_parameters);
    

10.3.4で行っていたCasheCollectorクラスの修正を元に戻しています。

そもそも私自身がCacheCollectorは何をしている機能かを理解していないのでどのような機能かを調べてみます。

CacheCollector

CacheCollectorクラスは、キャッシュの収集と管理を行うための基盤を提供します。このクラスを使用することで、キャッシュの読み取り、書き込み、削除などの操作を効率的に行うことができます。

Drupalのキャッシュ機能の優秀さは、レンダリングの項で認識しています。キャッシュ機能のアップデートと、アップデート時に生じたエラーの修正と認識する事で、今回のアップデートの目的が見えて来ます。

Drupalのキャッシュ機能において実際に機能する依存性を持った各項目などは理解できていませんが、アップデートにおいてCacheCollectorクラスというものがあるという事を知っただけでも今回、調べてみた価値はあります。

今回の変更

ここで読み込み時にcidの初期化処理を追加したことで、Menu Trail by Path、Entity Manager、およびGin Toolbarモジュールと競合しています。cidの初期化処理を削除し特定の条件下でキャッシュが正しくクリアされない問題が修正されます。

アップデート

今回、初めて、https://www.drupal.org/project/drupal/issues/だけでなくGitlabのhttps://git.drupalcode.org/issue/に記載されている修正内容を見て、アップデートが何を行っているのかを見てみました。私自身が開発者でないので、DrupalCoreのアップデートでどのようなコードの変更がなされているのかを考えた事がなかったのですが、変更内容と変更したコードを見てみる事で、アップデートが何を目的としているかを理解することが出来ます。

コード変更による、具体的な処理と、場合によっては不具合が出てしまうもの、その修正といった開発者の方の行っているプロセスを確認することで、利用しているDrupalの進化を理解する事につながるので、面倒と考えず、今後、アップデートの通知が来たら、内容を確認するようにしようと考えています。

内容が理解出来たのでアップデート10.3.3 > 10.3.4 / 10.3.4 > 10.3.5を行いました。

  • 10.3.3 > 10.3.4 UpDate

    // 10.3.3 > 10.3.4 UpDate
    [recommended-project]$ composer update "drupal/core-*" --with-all-dependencies
    -----UpDate-----
    Gathering patches for root package.
    Loading composer repositories with package information
    Updating dependencies
    Lock file operations: 0 installs, 9 updates, 0 removals
      - Upgrading drupal/core (10.3.3 => 10.3.4)
      - Upgrading drupal/core-composer-scaffold (10.3.3 => 10.3.4)
      - Upgrading drupal/core-project-message (10.3.3 => 10.3.4)
      - Upgrading drupal/core-recommended (10.3.3 => 10.3.4)
      - Upgrading psr/log (3.0.1 => 3.0.2)
      - Upgrading symfony/polyfill-php72 (v1.30.0 => v1.31.0)
      - Upgrading symfony/polyfill-php80 (v1.30.0 => v1.31.0)
      - Upgrading symfony/polyfill-php81 (v1.30.0 => v1.31.0)
      - Upgrading twig/twig (v3.10.3 => v3.14.0)
    Writing lock file
    Installing dependencies from lock file (including require-dev)
    Package operations: 0 installs, 9 updates, 0 removals
      - Downloading psr/log (3.0.2)
      - Downloading symfony/polyfill-php81 (v1.31.0)
      - Downloading twig/twig (v3.14.0)
      - Downloading symfony/polyfill-php80 (v1.31.0)
      - Downloading drupal/core (10.3.4)
    Gathering patches for root package.
    Gathering patches for dependencies. This might take a minute.
      - Upgrading drupal/core-composer-scaffold (10.3.3 => 10.3.4): Extracting archive
      - Upgrading drupal/core-project-message (10.3.3 => 10.3.4): Extracting archive
      - Upgrading psr/log (3.0.1 => 3.0.2): Extracting archive
      - Upgrading symfony/polyfill-php81 (v1.30.0 => v1.31.0): Extracting archive
      - Upgrading twig/twig (v3.10.3 => v3.14.0): Extracting archive
      - Upgrading symfony/polyfill-php80 (v1.30.0 => v1.31.0): Extracting archive
      - Removing symfony/polyfill-php72 (v1.30.0)
      - Upgrading drupal/core (10.3.3 => 10.3.4): Extracting archive
      - Upgrading drupal/core-recommended (10.3.3 => 10.3.4)
      - Installing symfony/polyfill-php72 (v1.31.0)
      - Applying patches for drupal/core
        https://www.drupal.org/files/issues/2023-07-16/3204271-20-missing-layout-exception.patch (Layout builder cannot recover on missing layout: https://www.drupal.org/node/3204271)
    Generating autoload files
    44 packages you are using are looking for funding.
    Use the `composer fund` command to find out more!
    No security vulnerability advisories found.
    -----End-----
    // 完了
    [recommended-project]$
    
  • 10.3.4 > 10.3.5 UpDate

    // 10.3.4 > 10.3.5 UpDate
    [recommended-project]$ composer update "drupal/core-*" --with-all-dependencies
    -----UpDate-----
    Gathering patches for root package.
    Loading composer repositories with package information
    Updating dependencies
    Lock file operations: 0 installs, 4 updates, 0 removals
      - Upgrading drupal/core (10.3.4 => 10.3.5)
      - Upgrading drupal/core-composer-scaffold (10.3.4 => 10.3.5)
      - Upgrading drupal/core-project-message (10.3.4 => 10.3.5)
      - Upgrading drupal/core-recommended (10.3.4 => 10.3.5)
    Writing lock file
    Installing dependencies from lock file (including require-dev)
    Package operations: 0 installs, 4 updates, 0 removals
      - Downloading drupal/core (10.3.5)
    Gathering patches for root package.
    Gathering patches for dependencies. This might take a minute.
      - Upgrading drupal/core-composer-scaffold (10.3.4 => 10.3.5): Extracting archive
      - Upgrading drupal/core-project-message (10.3.4 => 10.3.5): Extracting archive
      - Upgrading drupal/core (10.3.4 => 10.3.5): Extracting archive
      - Upgrading drupal/core-recommended (10.3.4 => 10.3.5)
      - Applying patches for drupal/core
        https://www.drupal.org/files/issues/2023-07-16/3204271-20-missing-layout-exception.patch (Layout builder cannot recover on missing layout: https://www.drupal.org/node/3204271)
    Generating autoload files
    44 packages you are using are looking for funding.
    Use the `composer fund` command to find out more!
    No security vulnerability advisories found.
    -----End-----
    [recommended-project]$
    

参照

// Issue #3471741 Fix null $cid in CacheCollector classesで問題が提案され決議されている内容を参考にしています。10.3でコミットされているコードを参考に記事を書いています。

おわりに

今回、DrupalCoreのアップデートの案内が10.3.3 > 10.3.4 > 10.3.5と日を置かずに来たことで、何か急を要する重要なアップデートではないかと考え、内容の確認をしてみました。詳細を確認するために初めてGitlabのコードを確認しましたが、変更となったコードの処理に関わる内容を理解出来なくても、何を目的としてコードの変更がされているかの理解には繋がっています。

Drupalに限らず、オープンソースに関わるソフトウエアは、昨今Git化されていてコードを見る事が出来ますので、面倒と思わず、目を通す習慣を持つと、自身で開発はしなくても、ソフトを使用する上での理解度が上がり、より深く使いこなせる事につながって行きますので今後、なるべく確認しようと考えています。

CMSとしてDrupalを利用する目的であれば、DrupalCoreに関わるアップデートの詳細は理解していなくても問題なく利用出来ます。私自身もそのスタンスでいましたが、アップデートの内容を理解する事で、利用する上での知識を深められる事がわかった出来事になっています。

本来、CivicThemeでWEBサイトを構築していく記事をまとめる途中での出来事で、私自身のDrupalの理解が少し深まった記事として取り上げています。

10.3.3 > 10.3.4 > 10.3.5の内容を確認してみると、今回の10.3.5の内容がより理解できるので機会があれば、確認してみます。

すべての記事を見る ↗