AstroJS と Expressive Code でシンタックスハイライトを表示する
1. はじめに
AstroJS では、デフォルトで ShikiJS とPrismJS が組み込まれているため、追加のパッケージをインストールすることなく、Markdown 内のコードブロックでシンタックスハイライトを表示させることが出来ます。しかし、タイトルやマーカー、コピーボタンを表示されるには、追加でパッケージをインストールしたり、コードを追加しなくてはなりません。
Expressive Code は、シンタックスハイライトに加えて、タイトルやマーカー、コピーボタンの表示など、コードブロックを強化する様々な機能を提供しているパッケージです。本記事では、AstroJS と Expressive Code をインテグレーションする方法と簡単な使い方について記述します。また、本記事は Node.js と Yarn がインストールされている前提で記述しています。
2. インストール
AstroJS と Expressive Code をインテグレーションする方法は簡単です。Expressive Code が公開しているインストールガイド 1 に従って、[1] yarn create astro
コマンドと [2] yarn astro add astro-expressive-code
コマンドを実行します。既に AstroJS プロジェクトが存在している場合は yarn create astro
コマンドを省略してください。
マニュアルでインストールする場合は、astro-expressive-code
パッケージをインストールして、astro.config.mjs
に以下のコードを追加すれば完了です。
3. 基本的な使い方
```
でコードを囲うことで、コードブロックが表示されます。また、言語を指定することで、シンタックスハイライトが表示されます。下記の例では JavaScript を指定していますが、その他に対応している言語に関しては、ShikiJS の README 2 を参照ください。Expressive Code では、デフォルトでコピーボタンは付与されるので、ユーザーはマウスオーバーして表示されるボタンをクリックすることで、コードを簡単にコピーすることが出来ます。また、オプションコードを追記することで、タイトルとマーカーを表示させることが出来ます。
上記の例では行単位でマーカーを表示させていますが、Expressive Code では、文字単位でマーカーを表示させることも出来ます。
また、Expressive Code では、言語に Bash や PowerShell などのスクリプト言語を設定すると、自動的にフレームがターミナル風のものに差し替えられます。オシャレで素敵ですね。ちなみに、本ブログサイトで表示される macOS 風ターミナルフレームは、ろぼいん氏のブログ記事 3 を参考にカスタマイズしています。
上記で挙げた例は、Expressive Code が提供している機能の一部です。更に詳しい機能や仕様を知りたい方は、Expressive Code の公式ドキュメント 4 を参照ください。
4. 行番号を表示する
Expressive Code は、デフォルトで行番号を表示する機能が組み込まれていません。ですが、公式のプラグインを使用することで、行番号を表示させることが出来ます。まずは、公式ドキュメント 5 に従って、プラグインをインストールします。
次に、astro.config.mjs
にコードを追記して、プラグインを読み込みます。
これで、行番号がデフォルトで表示されるようになります。また、行番号を非表示にしたい場合は、showLineNumbers=false
を追記することで可能です。
開始行番号を変更したい場合は、startLineNumber=N
を追記することで変更可能です。
行番号をデフォルトで非表示にしたい場合は、astro.config.mjs
に以下のコードを追加することで可能です。
更に詳しい情報については、Line Numbers Plugin の公式ドキュメント 5 を参照ください。
5. おわりに
Expressive Code は、PrismJS に追加パッケージをインストールして、CSS をチクチク書いていた頃と比較すると、コマンド一発で全てが揃うのは革命的に便利です。
唯一惜しいところは、行番号を表示させる機能が実装されていない点です。ですが、現在進行形で議論 6 が進んでいます。そのため、近い将来に実装されると思います。
2024-02-22 追記:2024-02-21 に Expressive Code から行番号を表示する公式プラグインの Line Numbers がリリースされました。それに伴い、Line Numbers に関する記述も追加しました。