ここでは、AstroプロジェクトにPrism.jsを導入する手順を紹介します。
前提としてAstroプロジェクトを作成済とし、そこにPrism.jsを導入します。
Prism.jsとは、プログラムコードの構文を解析して、言語ごとに見やすく色付け(シンタックス・ハイライト)をしてくれるJavaScriptライブラリです。
下記のようにエディタのよう表示をしてくれる機能です。
Prism.jsのインストール
まず、npmを使用してPrism.jsをインストールします。
npm install prismjs
Prism.jsの設定ファイルの作成
次に、Prism.jsを使って必要な言語やプラグインを読み込むために設定ファイルを作成します。srcディレクトリ内に新しいファイルを作成します(例:src/prism)。
// src/prism
import * as Prism from 'prismjs';
import 'prismjs/components/prism-jsx.min';
import 'prismjs/components/prism-tsx.min';
// 必要なスタイルテーマをインポートします(例:okaidiaテーマ)
import 'prismjs/themes/prism-okaidia.min.css';
export default Prism;
Prism.jsの使用
src/pages/indexファイル内で設定ファイルをインポートし、使用します。
astroファイルにscriptタグで下記を追加します。
<script>
import Prism from "../prism";
document.addEventListener("DOMContentLoaded", (event) => {
document.querySelectorAll("pre code").forEach((block) => {
Prism.highlightElement(block);
});
});
</script>
ハイライトさせるHTML
ハイライトしたい部分を<pre><code class="language-言語名"> ~ </code></pre>で囲むとスタイルが適応されます。
テーマ
背景色で見た目が変わる可能性があるので、ご参考までに。
-
prism-coy.css / prism-coy.min.css 明るいテーマ、色鮮やかでコントラストが強い
import 'prismjs/themes/prism-coy.css'; import 'prismjs/themes/prism-coy.min.css';
-
prism-dark.css / prism-dark.min.css 暗いテーマ、ダークモード向け
import 'prismjs/themes/prism-dark.css'; import 'prismjs/themes/prism-dark.min.css';
-
prism-funky.css / prism-funky.min.css カラフルな見た目
import 'prismjs/themes/prism-funky.css'; import 'prismjs/themes/prism-funky.min.css';
-
prism-okaidia.css / prism-okaidia.min.css ダークテーマ、微妙に緑がかった背景
import 'prismjs/themes/prism-okaidia.css'; import 'prismjs/themes/prism-okaidia.min.css';
-
prism-solarizedlight.css / prism-solarizedlight.min.css ソーライズドライトテーマ、目に優しいライトテーマ
import 'prismjs/themes/prism-solarizedlight.css'; import 'prismjs/themes/prism-solarizedlight.min.css';
-
prism-tomorrow.css / prism-tomorrow.min.css 暗い背景にソフトなカラー
import 'prismjs/themes/prism-tomorrow.css'; import 'prismjs/themes/prism-tomorrow.min.css';
-
prism-twilight.css / prism-twilight.min.css 黒い背景の暗いテーマ
import 'prismjs/themes/prism-twilight.css'; import 'prismjs/themes/prism-twilight.min.css';
-
prism.css / prism.min.css デフォルトテーマ
import 'prismjs/themes/prism.css'; import 'prismjs/themes/prism.min.css';
私は、okaidiaのハイライトが一番好みでしたが、背景色は黒が良かったのでstyleを追加しました。
pre {
background-color: black;
}

プラグイン
// Line Numbers
import "prismjs/plugins/line-numbers/prism-line-numbers.css";
import "prismjs/plugins/line-numbers/prism-line-numbers";
// Toolbar
import 'prismjs/plugins/toolbar/prism-toolbar'
import 'prismjs/plugins/toolbar/prism-toolbar.css'
// Line Highlight
import 'prismjs/plugins/line-highlight/prism-line-highlight.css'
import 'prismjs/plugins/line-highlight/prism-line-highlight'
// Copy to Clipboard
import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard'
-
Line Numbers (
prism-line-numbers.css,prism-line-numbers) コードブロックに行番号を追加することができます。<pre class="line-numbers">のようにpreタグにline-numbersクラスが必要なので注意しましょう。
-
Toolbar (
prism-toolbar,prism-toolbar.css) コードブロックにツールバーを追加することができます。 -
Line Highlight (
prism-line-highlight.css,prism-line-highlight) 特定の行をハイライト表示することができます。<pre data-line="2, 4-6">のようにpreタグにdata-lineが必要なので注意しましょう。 -
Copy to Clipboard (
prism-copy-to-clipboard) クリップボードにコードをコピーするボタンを追加することができます。 Toolbarも一緒にimportしなければコピーボタンは表示されなそうです。
これで、AstroプロジェクトにPrism.jsを導入し、コードのシンタックスハイライトを適用することができます。必要に応じてテーマやプラグインを変更してカスタマイズしてください。