Magentoは手軽にMagento Connectやサードパーティのサイト、Githubなどからエクステンションをダウンロードしてインストールできるように設計されています。
ですが、正しくエクステンションのインストールできずにトラブルに陥る方が多いように思います。
このエントリでは、

  • エクステンションのインストール・アップデートの流れについて
  • 正しいエクステンションのインストール・アップデート方法とは

について解説します。 

エクステンションを入手するには

Magentoのエクステンションを入手するには、Magento Connectを使用するのが一番簡単です。
非常に多くのエクステンションが登録されており、様々な条件を使用して(英語のみですが)検索ができます。

その他の方法としては、弊社のようなエクステンション開発元のサイトから入手する方法と、Githubのようなサイトから入手する方法があります。
どちらもインストールする際の手順は同じですが、Githubでは非常に野心的なエクステンションが公開されていることがあります。 

どのようにしてインストール・アップデートするか

Magento Connect経由でインストール・アップデート

ブラウザ経由でできる方法としては、Magento Connectマネージャー経由があります。
Magento Connectで入手したエクステンションキーを貼り付けて、インストールボタンを押すだけでインストールできますし、アップデートやアンインストールもできます。同時に、関連するエクステンションのインストールも一括で行えます。

ただし、この機能を利用するためには以下の条件が必要になります。 

アプリケーションの実行ユーザー(mod_phpの場合はapache, CGIやFastCGIの場合はそれぞれのユーザー)がMagentoのソースに対して書き込み権限を持っていること

一部のディレクトリに対しては書き込み権限を与えないと動作しないMagentoですが、全てのファイルに対して書き込み権限を与えることができない場合は、この方法は利用できません。

エクステンションのファイル一式をアップロードしてインストール・アップデート

この方法は商用エクステンションや、Github、エクステンションベンダーのサイトから入手したエクステンションをインストール・アップデートする際に使用します。
単純に、エクステンションのファイル一式を、Magentoのソースツリーに対して上書きするだけなので、FTP/SFTPなどのツールの操作ができるのであれば、そんなに難しいものではありません。

ただ、Magento Connectとの違いで、関連するエクステンションの自動インストールはできませんし、インストール後のキャッシュ更新も行いません。すべて手動です。 

エクステンションがインストール・アップデートされる流れ

では、実際にエクステンションがどういう流れでインストール・アップデートされるかを説明します。
エクステンションのインストール・ アップデートは、Magentoのキャッシュが更新されたタイミングで始まります。
というのも、Magentoはキャッシュの中に全てのエクステンションのバージョン番号や、設定データを保持していて、キャッシュが更新されない限りはそのデータを使用し続けるからです。 

バージョン番号の確認

まず最初にMagentoはすべてのステータスが有効である、エクステンションのバージョン番号を確認します。
エクステンションのバージョン番号は、エクステンションごとに保持している、config.xmlに記載されていて、この情報とデータベースのcore_resourceテーブルのversion列とdata_version列を照合します。

インストール・アップデートスクリプトの実行

もし、config.xmlのバージョン番号が、データベースのものより新しい場合、Magentoはセットアップ・アップデートスクリプトの実行に移ります。
これらのスクリプトは、エクステンションのディレクトリ内の、

  • data
  • sql

ディレクトリに収められていて、dataが初期データ用、sqlがテーブル定義や制約の定義に使用されます。
このスクリプトは、インストールされていたバージョンと、現在のバージョンの差分をすべて実行するため、テーブル定義の大規模な変更を伴うアップデートの場合には長い時間が必要になることがあります。 

アップデートの完了

スクリプトの実行が完了すると、エクステンションのインストール・アップデートは完了です。
データベースを使用しないエクステンションの場合はほぼ一瞬でインストール・アップデートが終わります。 

エクステンションのインストール・アップデート時に気をつけるべきこと

一見簡単そうに見えるエクステンションのインストール・アップデートですが、注意点がいくつかあります。

一般ユーザーのアクセスを遮断する

エクステンションがデータベースの定義を変更するおそれがあるため、アップデート作業中は一般ユーザーのアクセスを遮断する必要があります。
Magento Connectの場合は、処理中に自動的にメンテナンス表示に切り替える仕組みがあります。
ですが、処理に失敗してしまった場合にはメンテナンス表示が解除されないため、手動でメンテナンス表示を解除する必要があります。

サイトがメンテナンス状態であるかどうかを判断するのは、ドキュメントルートに「maintenance.flag」というファイルがあるかないかで判断しています。
このファイルがある間は、Magentoはずっとメンテナンスモードのままで、削除するまで関係者であってもアクセスができなくなります。
しかし、index.phpをカスタマイズし、関係者のIPアドレスだけはメンテナンスモードを回避する設定をすることで、関係者だけはメンテナンス中もサイトにアクセスができるようにすることも可能です。

いずれにしても、エクステンションのインストール・アップデート中は一般ユーザーのアクセスを遮断しなければ、予期しないデータベースの定義変更によって、データベースが破損する恐れがあります。
もちろん、インストール作業前にはバックアップを取る、ということは言うまでもありません。 

コンパイラを有効にしている場合は無効にする

比較的忘れがちで、フォーラムなどでも質問が多い現象が、「コンパイラの無効化忘れ」です。
Magentoは非常に多くのファイルから構成されているシステムなので、ファイルを読み込む処理だけでもかなりの時間を要します。
そのため、コンパイラ機能と呼ばれる仕組みを用いて、ソースコードを1つのファイルに集約し、読み込むことでこの時間を短縮することができます。劇的な向上は見込めませんが、負荷の高いサイトの場合は僅かな改善であっても、大きな差になることがあります。

しかし、この機能がエクステンションのインストール・アップデート時に邪魔になります。
というのも、コンパイル処理を行ったあとはMagentoが app/code/ 以下のプログラムを読みこまなくなってしまうため、新たにインストール・アップデートしたエクステンションが読み込まれなくなってしまうからです。
ですから、エクステンションをインストール・アップデートする前には、必ずこの機能を無効化しておく必要があります。
忘れると、サイトがダウンしてしまうため、本当に注意が必要です。 

エクステンションの競合

比較的よくある現象として、エクステンションの競合というものがあります。
基本的にエクステンションベンダー同士は連絡を取り合っていないことが多く、それぞれの会社がそれぞれの目的・意図で開発したコードをエクステンションとしてパッケージしています。
このため、A社のコードとB社のコードが似たような箇所をカスタマイズしていた場合には容易に競合してしまいます。
この場合、どちらかのコードしか利用されません。

影響が軽微な場合は、片方のコードが動かないという程度で済むのですが、重症になるとサイトがダウンします。
このような場合は片方のエクステンションをアンインストールするか、両方の機能を活かした形にプログラムを調整する必要が出てきます。 

エクステンションの不具合

エクステンションによっては、インストールした直後にサイトがダウンするものがあります。
これは単純に不具合なのですが、対応バージョンの違いであったり、単に完成度が低いといった場合もありえます。
正直、入れてみないとわからないということが大半なので、注意してください、としか言えないのですが、先ほどの競合のケースもありえるので、インストール・アップデートの際には注意が必要です。 

安全にエクステンションをインストール・アップデートするために

では、安全にエクステンションをインストール・アップデートするにはどうしたらいいのでしょうか。

テスト環境を用意する

手間はかかりますが、本番環境と全く同じ構成のテスト環境を用意します。
できれば商品やカテゴリ、デザインなどもほぼほぼ同じ構成のものが望ましいです。
この環境の上であれば、たとえエクステンションをインストール・アップデートして破壊しても、サイトの運営には影響しません。
また、エクステンションのインストール・アップデート時にかかる負荷や処理時間を計測することもできるので、メンテナンス時間の見積もりにも使えます。 
もちろん、この環境の上であっても、作業時にはバックアップを取ることは言うまでもありません。 

本番環境ではMagento Connectマネージャーでエクステンションをインストールしない

Magento Connectマネージャーでエクステンションをインストール・アップデートできるのは便利なのですが、これまで説明してきたように、いきなり本番で作業するのは大変危険です。
ですから、まずテスト環境でインストールし、問題がないことを確認してから本番環境に適用するという手順を踏んでいただきたいと思います。

終わりに

Magentoのエクステンションは大変便利でよく考えられた仕組みになっています。
簡単にインストール・アップデートできる反面、その利用方法にはいくつかの落とし穴が潜んでいます。
もしこれからエクステンションをインストールしようというのであれば、このエントリで解説した内容をよく理解して作業を行なっていただきたいと思います。