Magentoを拡張するためにはエクステンションを使用するのが一般的です。
MagentoにはMagento Connectに登録されている無料のエクステンションが4000以上、有償のものはそれ以上存在していて、サイトの目的・用途に合わせて導入ができるようになっています。(2013年10月現在) 

さて、無料のエクステンションであれば気軽に導入して、その動作を試すことができます。そのため、Magentoの導入を検討される方の多くは、この無料エクステンションの導入から始められることが多いのではないでしょうか。

ところが、エクステンションをインストールしたものの、目的に合わなかったり、不具合があって動作しなかったためにアンインストールしたくなることがどうしても出てきます。

このエントリではエクステンションをアンインストールする方法と、アンインストール時に起き得る障害とその解決方法について説明します。

エクステンションをアンインストールするには

エクステンションをアンインストールするには、3つの方法があります。

  1. Magento Connect Managerでアンインストールする
  2. mageコマンドでアンインストールする
  3. app/etc/modulesにある、エクステンションの設定ファイルを書き換えて無効化する

 1と2ではエクステンションのファイルは全て削除されます。これに対し、3の方法ではエクステンションのプログラムファイル自体はそのままサーバ上に残り続けます。

有償のエクステンションの場合は3の方法で一旦エクステンションを無効化しておき、後でゆっくりと対象のファイルを削除していくということもできます。

アンインストール後に残るもの

アンインストール方法に1と2を選んだ場合、ファイルは全て削除されます。
ですがそれでも残ってしまうものがあります。

それはデータベース上のデータです。
エクステンションの中には、

  • テーブル
  • 制約
  • データ

をデータベースに作成するものがあります。これらのデータはエクステンションのアンインストール後も残り続けます。
独立したテーブルであれば、単にデータベースサイズが大きくなるだけで済むのですが、他のテーブルのデータと密接に関連しているものは、一筋縄でいかないトラブルに発展することがあります。 

アンインストール後に起きるトラブルの例

MagentoにはEAV(Entity - Attribute - Value)という独特なテーブル構造を持つデータが存在しています。
Magentoの柔軟性を支えている重要な要素なのですが、このうちAttribute(属性)についてはエクステンションが自身のインストール・アップデート時に追加することがあります。 

そしてこの属性、frontend_modelとbackend_modelというデータを持っています。
この2つのデータには、その属性が依存するデータを取り扱うModelクラスと呼ばれるMagentoのモジュールを指定することができます。

もしもこのfrontend_modelとbackend_modelにエクステンション固有のModelクラスが指定されていた場合、Magentoはクラスが見つからないという理由で、サイトをダウンさせてしまいます。
そうなると、その属性のデータをデータベース上から削除しなければならなくなります。
ですが、属性には数種類あり、Community Edition / Enterprise Editionともに、管理画面から削除できるのは、「ユーザー定義属性」だけなのです。
もしもエクステンションが作成した属性が、「システム属性」であった場合は管理画面から削除ができません。

削除をするためには、データベースに直接アクセスし、SQL文を実行するか、Magentoのエクステンション開発の作法に則って、問題のある属性を削除するためだけのエクステンションを作成することになります。

なぜ、Magentoのエクステンションは作成したデータを消さないのか

実はMagentoはエクステンションをインストール・アップデート・アンインストールする処理の中に、データのアンインストールに関する処理を用意しようとした形跡があります。

また、インストールが不成功に終わった場合に、データベースをロールバックする処理も検討はしていたようです。
ですが実際には何も実装されていません。

実装されていないものは動作しないので、他のCMSやソフトウエアでは、拡張機能のアンインストール時に行われる、不要なデータのクリーニング処理は、Magentoでは行われないようになっています。

あくまで私見ですが、データが複雑なMagentoにおいては、安易にデータベース上のデータを削除することが大変に危険であると判断されたのではないでしょうか。そのため、途中まで検討したアンインストール・ロールバック処理については未実装のままで残されることになったと。

もちろん、未実装で残されることは困りますが、強制的にデータも含めて削除されるのは場合によっては困ることではあります。

まとめ

Magentoのエクステンションをアンインストールするには冒頭で紹介した3つの方法があります。
ですが、アンインストールしても、データベースに対してはなんの変更も行われません。その結果、場合によってはトラブルになることがありえます。エクステンションをアンインストールする際は、必ずテストできる環境を用意して、問題が起きないことを事前に確認してから行う必要があります。

そうでなければ、あなたのサイトはダウンしてしまい、復旧するまでの間、機会損失になってしまうでしょう。
エクステンションをインストールすることは簡単ですが、アンインストールするさいはよくよく注意が必要です。