By raimon, 2017-06-24(土), in category Javascript
Googleによって公開され、Google CodeからGitHubに移転し、現在も開発が続けられているcode-prettifyという構文ハイライトをCSS & JavaScriptで行ってくれるオープンソースライブラリがある。
個人的に同ライブラリの最新版へ追従する機会があり、日本語情報では廃れた方法が散見されたため、自分の理解を再整理する意味も込めて、2017年6月現在の導入方法をまとめておく。
まず、ライブラリのロードにはCDNのURLを指定し、スクリプトローダーに任せてしまえば良い。
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>
この1行でCSSファイルも同時にロードされる。
ライブラリをダウンロードして自分のサーバに配置して読み込む利用方法は、もちろん現在も可能であるが、イントラネット上での利用などネットワークポリシーとして必要な場合のみ選択し、個人のブログやWikiに導入するのであればCDNから読み込んでしまう方が簡単である。
リクエストパラメータとしてskin
を与えると、好みのデザインテーマに該当するCSSを読み込んでくれる。例えば以下のようにするとSunburstテーマが読み込まれる。
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst"></script>
class
属性にprettyprint
を指定したpre
要素やcode
要素を用意する。
<pre class="prettyprint">
// 構文ハイライトさせたいコードスニペット
</pre>
この時class
属性でハイライトさせるプログラミング言語のヒントを与えることもできる。ここ数年でRustやSwiftといった言語サポートも追加されているのでソースコードを参考にすると良い。
<pre class="prettyprint lang-js">
// 構文ハイライトさせたいJavaScriptコードスニペット
</pre>
以前は prettyPrint
という関数名だったが最新の実装では PR.prettyPrint
と名前空間オブジェクトが付与された。この関数をbody
要素のonload
属性で呼ぶことで構文ハイライトが実行される。
<body onload="PR.prettyPrint()">
利用しているブログツールやWikiツールといったCMSの制限によっては、HTMLテンプレートをカスタマイズすることが難しいケースも考えられるが、そのような場合はJavaScriptでまとめてやってしまうのが良いだろう。
例えばid="main"
とされた要素直下のpre
要素をすべて構文ハイライトさせたければ、スクリプトローダーでcode-prettifyを読み込んだ上で、次のようなJavaScriptコードを実行する。
var initPrettyPrint = function() {
Array.prototype.slice.call(document.querySelectorAll("#main > pre")).forEach(function(pre) {
// メインとなる要素直下に存在する全てのpre要素にclass="prettyprint"を付与
pre.setAttribute("class", "prettyprint");
});
// 構文ハイライトを実行
PR.prettyPrint();
};
// 上記の初期化処理を画面ロード時に一度だけ呼ぶ
window.addEventListener("load", initPrettyPrint, false);