Highlighting Code Blockが静的ホスティングしたとき上手く動作しなかったときの対処【Simply Static + AWS S3】

Highlighting Code Blockは記事内のソースコードを読みやすくするために非常に便利なプラグインです。しかしながら、Highlighting Code Block v1.5.5では、Simply Static + AWS S3で静的ホスティングする際、上手く動きませんでした。

この記事では、この不具合の原因と対処について解説しています。

各技術要素の簡単な説明

WordPress

言わずと知れたオープンソースのCMSです。PHPベースで構築されており、レンタルサーバーでも簡単にインストールできる機能が提供されているものも多く、スタンダードなCMSです。

WordPressには「プラグイン」という機能が提供されていて、ユーザーが必要に応じてWebUIを利用してカスタマイズすることができるようになっています。

Simply Static

WordPressは通常ではサイトにアクセスがあった際、PHPがデータベースから記事のデータを読み出してHTMLをレンダリングして書き出す仕組みになっています。Simply StaticではWordPressの記事を静的なHTMLファイルにレンダリングしてくれるものです。

WordPressは利用者も多く管理画面を狙われやすいため、乗っ取られるケースが数多く存在していますが、Static Pressを利用すると、

  1. 投稿者のみがアクセスできるWordPressで記事を書く
  2. Static PressでHTML, CSS, JS, 画像ファイル等を書き出す
  3. 出力されたHTML等を公開用のサーバーにアップロードする

とできるため、攻撃者がWordPressの管理画面に外部からアクセスしにくく、セキュリティ上も安全です。

また、PHPがデータベースを読みにいくという処理もなくなるため、非常に高速にアクセスが可能になることも大きなメリットの一つです。

Highlighting Code Block (以下、HCB)

Web上で通常どおり、コードを記述すると、予約語や変数などに色がつかず、見づらい状態で表示されます。HCBを利用するとprism.jsというコードを解析するライブラリベースで解析が行われ、色付けして表示してくれます。

AWS S3

Amazon社が提供しているクラウドサービスAmazon Web Servicesのひとつで、大量のファイルをバケットと呼ばれるストレージに格納することができるストレージサービスです。

S3には静的Webサイトホスティングの機能が提供されているため、ここにHTMLを配置することで、安価で簡単に静的Webサイトが公開できます。

Highlighting Code Blockがどう壊れたか

まず、どのようにおかしな表示になってしまったのかを以下の図に示します。

Highlighting Code Blockがどのように壊れてしまったか

Google Chromeの開発者ツールを利用して確認すると、上手くJSやCSSが読み込まれていないようでした。

原因: Highlighting Code BlockのCSSのパスがおかしい

ブラウザ上でソースコードを確認してみると、CSSのパスが以下のようになっていました。

<link rel="stylesheet" id="hcb-style-css" href="/wp-content/plugins/highlighting-code-block//build/css/hcb_style.css?ver=1.5.5" type="text/css" media="all">

一見正しいように見えますが、よく見ると、buildという文字列の前が//になってしまっています。

解決策: Highlighting Code Blockのコードを修正する

この解決策はプラグインのコードを直接触ることになるため、自己責任で内容を理解した上で進めてください。

上記のように、CSS, JSのパスがおかしいということが原因なので、パスが正しくなるように修正します。

まず、WordPressの管理画面にログインし、「プラグイン」→「プラグインエディター」を開きます。

Highlighting Code BlockのソースコードをWordPressの機能を使って修正する

右上にプラグインを選択するプルダウンがあるので、そこから「Highlighting Code Block」を選択し、「選択」ボタンをクリックすると、 HCBのコードが表示されます。

右側にファイルツリーがあるので、class/loos_hcb_scripts.phpを開き、Ctrl + F(Macの場合はCmd + F)で「LOOS_HCB_URL」という文字列を検索しましょう。

「LOOS_HCB_URL」の後ろに/build/xxxxのような文字列があるので、これらを全てbuild/xxxxのように最初の/を削除します。

すべて置き換え終わったら、画面下部の「ファイルを更新」ボタンをクリックしましょう。

まとめ

プラグインファイルを直接触るのはかなりリスキーで、アップデートをするたびに動作を確認しなくてはならないため、かなり面倒ですが、GithubでHCBが見つからなかったため、PullRequestを送ることができませんでした。

一旦は対症療法として、対応し、プラグインのアップデート情報を注視したほうが良いと思います。