Oteto Blogのロゴ

【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使用するプラグイン。コピーボタンの設置や差分表示など、様々な機能がある。
themePrism.js側で用意されているテーマの中から好きなものを指定できる。
cssthemeの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。