SUPEE-8788がリリースされてはや数日。
StackExchangeなどのQAサイトでは多くのSUPEE-8788に関連する質問が交わされています。
Magento自身もこのパッチの改訂版を出すなど、重要なパッチであるにも関わらず、スムーズに適用できないケースが毎回のことながらあるようです。

弊社で適用作業をする際によく起きるケースをまとめましたので、うまくいかない方は参考にしてみて下さい。(それでもどうしてもうまくいかない方はご相談を)

パッチの適用がうまくいかないケース

パッチを適用する際、まず躓くのは適用前の段階です。
幾つかパターンがありますが、概ね以下の3つに分類されます。

コアハックしている

やってはいけない、とあちこちで言われているにも関わらず、app/code/coreやlib, jsといったMagentoが配布しているコードを直接改変しているサイトが後を絶ちません。

このような改変をしてしまうと、セキュリティパッチの適用時に必ず失敗します。
正しい作法的には、カスタマイズはエクステンションとして実装するか、app/code/localに配置するのが良いとされています。

コアハックをするとパッチ適用だけでなく、バージョンアップの際にも問題になることがあります。
まず、パッチ適用で躓く場合は、コアハックを疑いましょう。

競合する他のパッチ既に適用している

今回のSUPEE-8788の場合であれば、SUPEE-1533が該当します。
SUPEE-1533の適用対象であるバージョンのMagentoに、既にSUPEE-1533を適用している場合、SUPEE-8788の適用に失敗します。

なお、この問題はSUPEE-8788 v1.1で改善されていますが、SUPEE-1533を一旦非適用にしてからSUPEE-8788 v1.1を適用するという手順になっているため、些か面倒です。

その他、稀にパッチ同士が競合関係にあることがあり、そのようなケースではパッチが上手く当たらないことがあります。
このような場合は、人力でどうにかするか、改善版のパッチを待つしかありません。

なにか標準ではないことをしている

  • 一部のファイルが欠損している
  • ファイル自体は存在し、改変もしていないが、何故か古い(あるいは異なる)

このようなケースが時折発生します。
これらの場合は、パッチ適用対象の正しいファイルを手に入れることが重要です。

ただし、複数のパッチ適用が必要なる場合は、諦めてバージョンアップを考えても手間的には変わらないこともありえます。

パッチの適用後に問題が起きるケース

パッチが無事に適用できた後にも問題が起きることが多々あります。
例えば以下のようなケースがありえます。

いきなりエラーが出てサイトが開かない

エクステンションインストール時にもよく起きる問題ですが、Magentoのコンパイル機能を有効にしているとこのような問題が起きます。
原因としては、パッチ適用によって変更を受けた内容が、コンパイル機能に反映されていないためです。
パッチを適用する、エクステンションをインストールするといった作業の前には、必ずコンパイル機能をオフにすることをおすすめします。

使用中のテーマとbase/default, rwd/defaultの実装に相違がある

これは非常に起きえる現象です。
Magentoでサイトを構築する場合、base/defaultやrwd/defaultといったテーマをベースにするか、サードパーティ製のテーマを導入する事になります。
問題はこれらのテーマの実装と、パッチ適用後のbase/defaultやrwd/defaultの実装が往々にして異なってしまうケースです。
このような場合は、目視でパッチ適用前後の改変内容を調べ、それを使用中のテーマにも適用してやる必要があります。

エクステンションに付属するテンプレート・JavaScriptに問題がある

エクステンションをインストールすると、テンプレートやJavaScriptが付属することがあります。
これらのファイルはMagento本体のものではないので、パッチ適用の恩恵に与ることはできません。

よってパッチ適用後には、エクステンションが使用しているファイルに影響がないかを調べ、必要に応じて人力でパッチの内容を適用する必要が出てきます。

終わりに

パッチの適用は、Magento1系で作られたサイトを安全に保つには不可欠な作業です。
実際にパッチの適用を怠ったため、情報漏えいや改ざん被害にあったサイトも多く報告されています。
自社のサイトが以下のような状態にないか、開発・保守担当者に確認の上、パッチが公開された後は速やかに適用を行ってください。

  • コアハックされていないか
  • 過剰なテンプレートの改造をしていないか
  • エクステンションによる過剰な機能拡張が行われていないか