Workbench Moderationモジュールのアンインストールで困った方へ

最終更新日
2023年5月11日

Workbench Moderationモジュールのアンインストールで困った方へ

こんばんは。 ぴころじーの竹川です。 経験のある方はそう多くはないかもしれません。むしろ、この症状になること自体がおかしいと思うのです。

今回のテーマは、正常にアンインストールできないモジュールです。

正常にアンインストールできないと言っても、アンインストール自体ができないものや、アンインストールするとDrupalの挙動がおかしくなるものがあります。

今回取り上げるのは、私もついこの前、4日間ほどかけて解答を出したモジュール「Workbench Moderation」の話題です。

なお、環境はDrupal 9.5.9、Workbench Moderation 1.7.0となっております。

Workbench Moderationとは

このモジュールは、その名前の通り、モデレーション(編集や公開の権限)を制御するモジュールです。一緒に、Workbenchモジュールと、Workbench emailモジュールをインストールして使います。

コトの経緯

今回のプロジェクトで不要になったため、アンインストールしました。よくあることです。そして、普通にアンインストールが完了しました。ここまではよかったのです・・・。

ふとしたことから、コンテンツタイプの権限管理を確認したことがコトの発端です。

エラーが出るんです。しかも、クリティカルなやつが・・・。
Drupalのクリティカルエラー

これってダメなやつじゃ。と、Workbench Moderationモジュールを再インストールすると治るので、原因のモジュールを特定しました。(この特定までに2日程かかりました。)

特定できたキッカケは、エラーログです。こういったエラーが出たら、エラーログを見ましょう!

問題解決のキッカケはエラーログ

moderation_stateが何とかとか言ってます。これから、なんとなくモデレーション関係のモジュールが原因だと推測できます。WorkbenchモジュールとWorkbench emailモジュールをアンインストールしても現象は出ないので、Workbench Moderationモジュールがビンゴだったのです。

原因の調査に明け暮れる(データベース編)

正直この原因を突き止める作業がしんどかったのです。Workbench Moderationモジュールをアンインストールすると、管理ビューやら何やら色々と残して消えていきます。いわゆる、後片付けをせずに何処かへ行ってしまう大人のような感じです。

moderation_stateとは何?ということから始まりました。

結論を申し上げると、moderation_stateとはデータべースのテーブルにある列です。Workbench Moderationモジュールをインストールするときに追加されます。しかし、アンインストールしてもこの列を消さないのです。

これが原因のひとつ。moderation_stateは、DrupalのContents typeであるカスタムブロック、ノード、タクソノミーターム、メディアを管理するテーブルに追加されるようです。

Drupalでエラーが出た原因のひとつ

試しに、このテーブルにあるmoderation_state列を手動で消してみました・・・が、治りません。

もっともっと深いところに原因があるようです。

原因の調査に明け暮れる(モジュール編)

もうこうなると、どこがおかしいのか分からないんです。Workbench Moderationモジュールのソースをじっくり読む、・・・分からない。時間が流れていきます。

検索!「drupal workbench moderation uninstall moderation_state」グーグル先生お願い!

困っている人がたくさんいるみたいで、日本ではありませんが、海外でいくつかヒットしました。

ヒントになったのがこちらのサイトです。

そして解決の糸口をつかむ

データベースだけでなく、一緒に追加されているデータも消す必要があるということです。手動ではムリです。ほんとに・・・。

そこで、上記GitHubで公開されていたmy_module.install.phpを利用させてもらいました。Workbench ModerationモジュールをアンインストールしておかしくなっているDrupalに対して、my_module.install.phpを組み込んだWorkbench Moderationモジュールをインストールしたのです。

するとどうでしょうか。解決したのです。(ノードだけ)

このファイルの内容は、

  • データベース全体を調べてmoderation_state列があれば削除する。
  • コンテンツタイプnodeに対して、変更された項目を削除する。

というものです。

Drupalで出たエラーを修正するモジュール
※ 手動で消したあと、バックアップから戻して再挑戦したので、消えていることを確認しました!

Drupalで出たエラーを修正するモジュールを編集する
※ ノードに関しては正常に表示されるようになりました。

タクソノミーターム、メディア、およびカスタムブロックでは引き続きエラーが出ていますが、光が差したように思いました、ほんとに。

これで、どのようにすればよいか流れをつかむことができました!

そして、今回適用するのはWorkbench Moderationモジュールのインストールファイルworkbench_moderation.installへ対してのパッチです。パッチはこちらです。

パッチの使い方

  • Workbench Moderationをインストール済みのDrupalを用意する。
  • <document root>/web/modules/contrib/workbench_moderationに上記のパッチファイルを配置する。
  • Workbench Moderationのディレクトリへ移動してパッチを適用する。
    $ patch -u < 2762777-19-facilitate-uninstall.patch
  • Workbench Moderationをアンインストールする。
  • 各コンテンツタイプにて、権限の管理が正常に表示されていることを確認する。
  • データベースにログインして、moderation_state列がないことを確認する。

という流れになります。

私はこの方法で、正常にDrupalを復旧することができましたが、動作の保証をするものではありません。あくまで自己判断、そして、何かあってもいいように必ず事前にバックアップを取りましょう。

Workbench Moderationモジュールをアンインストールする

この問題はまだ解決しない・・・のです

ここまで書いておいて非常に申し訳ないのですが、このパッチを当ててもタクソノミー、メディア、カスタムブロックについては解決しておりません。ノードに関しては解決します。

このパッチは、8.x-1.x用と書いてありましたので、最新版1.7.0には対応しているはずなのですが、もう少し様子を見ていきます。進展があれば、更新していきますね。