コンテンツへスキップ

はじめに

インストール

シェル
composer require shikiphp/shikiphp

shikiphpにはPHP 8.2以降とext-json、ext-mbstringが必要です。どちらもほとんどのPHPビルドで有効になっています。それ以外は不要です。Node、ネイティブOnigurumaバインディング、追加拡張機能は必要ありません。

最初のブロック

静的なShikiphpファサードが最も手軽な方法です。コード、言語ID、テーマIDを渡します。

PHP
use Shikiphp\Shikiphp;

$html = Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => 'github-dark',
]);

echo $html;

codeToHtmlは、スタイルがすべて適用された<pre class="shiki …">ブロックを返します。前景色と背景色は<pre>にインラインで記述されるため、追加のスタイルシートなしで正しく表示されます。

デュアルテーマ(ライトとダーク)

単一のthemeの代わりに、themesマップを渡します。shikiphpはShikiと同様にCSS変数を出力するため、描画したブロックがライトモードとダークモードに応じて切り替わります。

PHP
use Shikiphp\Shikiphp;

$code = 'const answer: number = 42';

echo Shikiphp::codeToHtml($code, [
    'lang'   => 'ts',
    'themes' => ['light' => 'github-light', 'dark' => 'github-dark'],
]);

既定では、lightテーマの色がインラインの既定値になり、darkは--shiki-dark変数を通じて利用できます。Shikiのドキュメントにあるものと同じ短いCSSを使って、ダークテーマを有効にします。

CSS
html.dark .shiki,
html.dark .shiki span {
  color: var(--shiki-dark) !important;
  background-color: var(--shiki-dark-bg) !important;
  /* and font styles */
  font-style: var(--shiki-dark-font-style) !important;
  font-weight: var(--shiki-dark-font-weight) !important;
  text-decoration: var(--shiki-dark-text-decoration) !important;
}

defaultColorオプションでインラインの既定テーマを選べます。また、変数だけを出力するにはdefaultColor: falseを設定します。

言語IDとエイリアス

言語はShikiのIDまたはエイリアスで指定します。php、ts、js、rust、python、htmlなどです。同梱されているすべての言語を一覧表示する方法は言語を、テーマIDはテーマを参照してください。

ハイライターの再利用

ファサードは同梱のHighlighterを遅延作成してキャッシュするため、Shikiphp::codeToHtmlを繰り返し呼び出すと、同じ文法とテーマのキャッシュが再利用されます。HAST出力、カスタム文法、トークングリッドなど、より高機能なAPIが必要な場合は、インスタンスを直接取得してください。

PHP
use Shikiphp\Shikiphp;

$code = 'fn main() {}';

$highlighter = Shikiphp::highlighter();
$hast = $highlighter->codeToHast($code, ['lang' => 'rust', 'theme' => 'nord']);

全機能についてはAPIを参照してください。