
# はじめに

## インストール

```bash
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`](https://shikiphp.inline0.dev/ja/docs/options#defaultcolor)オプションでインラインの既定テーマを選べます。また、変数だけを出力するには`defaultColor: false`を設定します。

## 言語IDとエイリアス

言語はShikiのIDまたはエイリアスで指定します。`php`、`ts`、`js`、`rust`、`python`、`html`などです。同梱されているすべての言語を一覧表示する方法は[言語](https://shikiphp.inline0.dev/ja/docs/languages)を、テーマIDは[テーマ](https://shikiphp.inline0.dev/ja/docs/themes)を参照してください。

## ハイライターの再利用

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

```php
use Shikiphp\Shikiphp;

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

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

全機能については[API](https://shikiphp.inline0.dev/ja/docs/api)を参照してください。
