おはようございます!埼玉県川越市を拠点にWordPressのお悩み解決を行っている、矢部@エーデルハーツです。
少し前に、Shortcodes Ultimateのアップデートが原因と思われるサイト停止トラブルについて記事を書きました。
その際は、プラグイン内の freemius/start.php が見つからず、WordPress全体が停止してしまうという問題でした。
ところが、その記事を書いて間もなく、今度は別の方からこんなご相談をいただきました。
「サイトは表示されているけれど、スポイラー(アコーディオン)だけ動かなくなりました」
一見すると軽微な不具合に見えます。しかし、こういう時ほど原因の切り分けが重要です。
今回は、Shortcodes Ultimateの最新版で発生したJavaScriptエラーを調査し、WordPress公式SVNから旧バージョンを取得して復旧した記録をご紹介します。
発生した症状
サイト自体は正常に表示されていました。
管理画面にもログインできます。
そのため、前回のような「重大なエラー」ではありません。
しかし、ページ内のアコーディオンがまったく反応しない状態になっていました。
実際に使われていたショートコードは次のようなものです。
|
1 2 3 4 5 |
[su_accordion] [su_spoiler title="Spoiler Title" open="yes"]Hidden content[/su_spoiler] [su_spoiler title="Spoiler Title" open="no"]Hidden content[/su_spoiler] [su_spoiler title="Spoiler Title" open="no"]Hidden content[/su_spoiler] [/su_accordion] |
HTMLは出力されています。
しかしクリックしても開閉せず、JavaScriptが正常に動作していないように見えました。
Chromeのデベロッパーツールで確認
こういう時はまずChromeのデベロッパーツールを開きます。
Consoleタブを確認したところ、次のエラーが発生していました。
|
1 2 3 4 |
Uncaught Error: Cannot find module '5' at r (_prelude.js:1:1) at _prelude.js:1:1 at 2../shortcodes/content-slider (index.js:7:1) |
「モジュール5が見つからない」というエラーです。
Shortcodes Ultimate内部のJavaScriptで発生しており、どうやら必要なモジュールの読み込みに失敗しているようでした。
キャッシュやテーマが原因ではなかった
まず疑ったのはキャッシュです。
- ブラウザキャッシュ削除
- キャッシュプラグイン停止
- サーバーキャッシュ削除
しかし改善しません。
次にテーマとの競合を疑いましたが、こちらも該当しませんでした。
ここまで来ると、プラグイン本体に原因がある可能性が高くなります。
SVNから旧バージョンを取得して切り戻す
一般的なWordPressユーザーはあまり意識しませんが、WordPress公式プラグインはSVNと呼ばれるバージョン管理ツールで管理されています。
そのため、最新版で不具合が発生した場合でも、過去バージョンへ戻して検証することが可能です。
今回はWordPress.orgのSVNリポジトリから、正常に動作していた旧バージョンを取得してみることにしました。
なお、以降の操作はMac標準の「ターミナル」アプリを利用しています。
まずは、どのバージョンが公開されているか確認します。
|
1 2 3 4 5 6 7 8 9 10 11 |
svn ls https://plugins.svn.wordpress.org/shortcodes-ultimate/tags/ 1.0.0/ 1.1.0/ 1.1.1/ 1.2.0/ ... 7.6.4/ 7.7.0/ 7.8.0/ 7.8.1/ |
今回は不具合が発生する前と思われる「7.6.4」を取得しました。
|
1 |
svn export https://plugins.svn.wordpress.org/shortcodes-ultimate/tags/7.6.4 shortcodes-ultimate |
取得したフォルダをZIP化します。
|
1 |
zip -r shortcodes-ultimate-7.6.4.zip shortcodes-ultimate |
作成したZIPファイルを、WordPress管理画面の「プラグイン → 新規追加 → プラグインのアップロード」から上書きインストールします。
いわゆる「切り戻し(ロールバック)」です。
今回はこの方法でアコーディオンの不具合が解消されました。
WordPress.orgで公開されているプラグインは、過去バージョンがタグとして管理されているため、このような復旧方法が利用できます。
ただし、プラグインのダウングレードは基本的に推奨されない
今回のような方法は、トラブル発生時の応急処置としては有効ですが、一般的にはプラグインのダウングレードは推奨されていません。
その理由は、古いバージョンには既知の脆弱性や不具合が含まれている可能性があるためです。
また、WordPress本体や他のプラグインとの互換性の問題が発生することもあります。
そのため、本来であれば開発元による修正版の公開を待ち、最新版へアップデートするのが理想です。
今回のような不具合は、多くの場合、数日〜数週間程度で修正版がリリースされます。
とはいえ、業務サイトや集客サイトの場合は「その間ずっと不具合を放置する」という選択が難しいケースもあります。
今回ご紹介した方法は、どうしても修正版を待てない場合の一時的な復旧手段として考えていただければと思います。
修正版が公開された際には、必ずテスト環境などで動作確認を行った上で最新版へ戻すことをおすすめします。
結果は一発で復旧
Shortcodes Ultimate 7.6.4へ戻したところ、アコーディオンは正常に動作しました。
さらにConsoleのエラーも消えています。
つまり、サーバーやテーマではなく、最新版のShortcodes Ultimate側に原因があった可能性が極めて高いと判断できました。
なお、今回確認できたのはアコーディオンでしたが、同じJavaScriptを利用している他のショートコードにも影響が出ている可能性があります。
前回も今回も共通していたこと
興味深いのは、前回も今回もShortcodes Ultimateのアップデートが関係していたことです。
| 事例 | 症状 | 原因候補 |
|---|---|---|
| 前回 | サイト停止 | freemiusフォルダ欠落 |
| 今回 | ショートコード動作不良 | JavaScriptモジュール読み込み失敗 |
もちろん、Shortcodes Ultimateは非常に優秀なプラグインです。
長年利用されており、私自身も多くの案件で利用しています。
ただし、どんなソフトウェアにも不具合は存在します。
そのため重要なのは、「更新しないこと」ではなく、「戻せること」です。
自動アップデートは悪なのか
こうした事例を見ると、自動アップデートを止めたくなるかもしれません。
しかし私は、自動アップデートを全面的に止めるべきだとは考えていません。
WordPressへの攻撃の多くは、古いプラグインやテーマの脆弱性を狙って行われます。
更新しないことによるセキュリティリスクの方が、一般的には大きいからです。
大切なのは、次のような体制を整えておくことです。
- 定期バックアップ
- FTP接続情報の保管
- 復旧手順の把握
- 更新後の動作確認
今回の調査で感じたこと
今回のような不具合は、管理画面だけを見ていても原因が分かりません。
ChromeのConsoleを確認し、プラグイン内部のエラーを読み解き、必要に応じてSVNのタグ管理まで追いかけることで初めて原因へたどり着けます。
WordPressのトラブル対応では、「どのプラグインが怪しいか」を勘で判断するのではなく、こうした切り分け作業の積み重ねが重要です。
まとめ
今回は、Shortcodes Ultimate最新版で発生したJavaScriptエラーについてご紹介しました。
- アコーディオンが動作しなくなった
- Consoleに「Cannot find module ‘5’」が表示された
- テーマやキャッシュは無関係だった
- SVNから7.6.4を取得して復旧した
アップデート後にショートコードが動かなくなった場合は、ブラウザのConsoleを確認してみることをおすすめします。
また、原因がプラグイン本体にありそうな場合は、WordPress.orgのタグ管理を利用して安定版へ切り戻すという方法も有効です。
もし同様の症状でお困りの場合は、お気軽にご相談ください。