Drupalのwebformモジュールの更新

(Last Updated On: 2018年8月18日)

Drupal 8のwebfromのバージョンアップをサボっていると、バージョンアップするとパラメータのデータ型が異なる、と致命的なエラーになり動作しなくなります。

最初、エラーメッセージで検索すれば対応策が直ぐに見つかる、と思って検索しました。しかし、的確な対応方法を記載したページが検索されません。対応策は簡単です。FAQ的な情報ですが、誰かの役に立つと思うので対応策を記載します。

問題の原因はデータベーススキーマの更新です。他のデータベーススキーマ更新が必要なモジュールの場合も同様の方法で更新できるはずです。

webformの更新方法

webfromを更新すると動作しなくなる原因はデータベースの内容が更新されていないことが理由です。webformはデータベーススキーマも更新するモジュールです。このため、スキーマも更新しないと正常に動作しません。

データベーススキーマの更新は「各リリース」に「それぞれ」入っています。つまり、今使っているwebfromのバージョンから「一つずつ」バージョンアップし、「一つずつ」update.phpを実行する必要があります。

https://yoursite.example.com/admin/reports/updates/update

にアクセスし、webformに更新があると「webformは手動またはdrushで更新するように」との旨のメッセージが書いてあります。これは「一つずつバージョンアップし、一つずつupdate.phpを実行しなさい」という意味です。

バージョンアップに必要な情報とデータ

  • 現在のwebformのバージョン
    (https://yoursite.example.com/admin/reports/updates/update などで確認。更新版がある場合は表示される)
  • 更新ターゲットとなるwebformのバージョン
    https://www.drupal.org/project/webform/releases/ で確認)
  • 現在のwebformから最新のwebformバージョンまでの、アーカイブ全て
    (curl -OL https://ftp.drupal.org/files/projects/webform-8.x-5.0-XXXX.tar.gz などでダウンロード)
  • webformモジュールのインストール場所
    (tar/zipアーカイブからインストールしている場合ドキュメントルートの/module/webform、composerでインストールしている場合は/module/contrib/webform)

バージョンアップ手順

例えば、執筆時点の最新webformリリースは 

  • webform 8.x-5.0-rc18

です。インストールしているバージョンが

  • webform 8.x-5.0-rc13

だとすると、

  • webform 8.x-5.0-rc14
  • webform 8.x-5.0-rc15
  • webform 8.x-5.0-rc16
  • webform 8.x-5.0-rc17
  • webform 8.x-5.0-rc18

を一つずつ、順番に手動で更新(ソースを入れ替え)し、その後に

  • https://yoursite.example.com/update.php

を実行してスキーマを更新する、を繰り返すと正しくwebfromを更新できます。

Drupal 8用のwebformは開発版扱いなので、スキーマ更新情報は直前のリリースからの差分しか入っていないようです。RC版でも色々と新しい機能が追加されていて、スキーマ更新が必要となっています。

これからのDrupalのインストールと更新

Drupalとそのモジュールのインストール方法と更新方法は迷走していました。

  • ソース配付版からインストール&更新 (Web UI含む)
  • Drushによるインストール&更新
  • Composerによるインストール&更新

3つも方法(Web UIを入れると4つの方法)があり「それで、結局どれを使えば一番良いのか?」という状態でした。

最近、Drupalのオンラインマニュアルが更新されています。どうもComposerによるインストールと更新がこれからのDrupalの標準インストール&更新方法になるようです。

The current/latest release is always found on the Download page. However, the recommended way to get the Drupal source code is to use Composer – a PHP dependency manager. 

今まで安定性重視でソース配付版でインストール&更新していました。しかし、標準の方法がcomposerになるなら移行せざるを得ないでしょう。

試しに、最新のDrupal 8のリリース版にcomposer udpateを実行してみました。最新のDrupal 8リリース版でも、利用するパッケージのメジャーバージョンアップを含めて沢山アップデートされます。

The current/latest release is always found on the Download page.

ソース配付版が「現在/最新のリリース」としていますが、今のところこれは正確ではない表現です。ソース配付版のcomposer.jsonを使っていてもアップデートされるパッケージが多過ぎです。これではテスト無しでは怖くて使えません。

早いペースでDrupalマニュアルのインストールページなどが更新されているようですが、まだ作りかけの部分が見られます。composerベースのインストール&更新に移行するのは少し様子を見た方が良さそうで。(既にcomposerで安定稼働している方はそのままで構わないと思います)

例えば、このブログで取り上げたwebformもcomposerでもインストールできるのですが、/module/webformにインストールされているにも関わらず、/module/contrib/webformにインストールしてしまいます。そして、新しい方(/module/contrib/webform)は無視されます。

教訓

いろいろなインストール&管理方法が使えるのは、必ずしも良いとは限らない。

どのプロジェクトにも言えることですが、全てがベストプラクティス、ではありません。

これは言語やアプリを問わず同じです。例えば、エンタープライズ向けのJavaのフレームワークであるSpringにもいろいろと「こうした方が良い」「こうなっていてくれたら」と思う所が多々あります。

一応開発版であるwebformの更新は暗黙知として「一つずつ更新」が当たり前だと思いますが、マニュアルか更新ページに書いてある方が良いと思いました。マニュアルを書く方の労力も理解るので書いてないのがダメだ!とは言わないですが。(自分も正確かつ網羅的には書いていないので、努力目標にはしたいです)

投稿者: yohgaki