【React】Prism.jsでソースコードをSyntax Highlightする
1. Prism.js のインストール
npm install prismjs
npm install babel-plugin-prismjs
必要なテーマやプラグインのみに絞って利用したい場合は、 babelプラグインであるbabel-plugin-prismjsもインストールする。
2. babel の設定
.babelrc.json
を作成し、そこに諸々設定を記述する。
{
"presets": ["next/babel"],
"plugins": [
[
"prismjs",
{
"languages": ["html", "css", "ts", "tsx", "json"],
"plugins": ["line-numbers"]
}
]
]
}
各オプションの概要は以下の通りで、それぞれで指定できるものは公式サイトにて確認できる。
項目 | 概要 |
---|---|
languages | ハイライトを適用する言語 |
plugins | 使用するプラグイン。コピーボタンの設置や差分表示など、様々な機能がある。 |
theme | Prism.js側で用意されているテーマの中から好きなものを指定できる。 |
css | themeのCSSを読み込むかどうか。デフォルトはfalse だが、themeを指定する場合はtrue にする必要あり。 |
3. コードをハイライトする
import { highlight, languages } from "prismjs";
const HighlightedCodeBlock = ({
code,
lang,
}: {
code: string;
lang: string;
}) => {
const highlightedCode = highlight(code, languages[lang], lang);
return (
<pre>
<code dangerouslySetInnerHTML={{ __html: highlightedCode }} />
</pre>
);
};
コードと言語名を引数で受け取り、ハイライトするコンポーネントを作成。
4. コンポーネントを呼び出す
<HighlightedCodeBlock code={code} lang="ts" />;
lang
には.babelrc.json
で設定した名称のままの言語名を渡してあげればOK。