
# CLI

shikiphpには`bin/shikiphp`に小さなコマンドラインツールが付属しています（プロジェクトでは`vendor/bin/shikiphp`としてインストールされます）。コマンドは3つあります。`highlight`は1つのファイルをHTMLに描画し、`langs`と`themes`はバンドルの内容を一覧表示します。

## `highlight`

ファイルをHTMLにハイライトし、標準出力に表示します。

```bash
vendor/bin/shikiphp highlight <file> [--lang=<lang>] [--theme=<theme>]
```

- `<file>` — 読み込むパスです。既存のファイルである必要があります。標準入力は読み込みません。
- `--lang` — 言語IDまたはエイリアスです。省略すると、ファイル拡張子をそのままIDとして使います（拡張子がない場合は`txt`にフォールバックします）。
- `--theme` — テーマIDです。既定値は`github-dark`です。

```bash
vendor/bin/shikiphp highlight src/App.php --lang=php --theme=nord
```

出力は、[`codeToHtml`](https://shikiphp.inline0.dev/ja/docs/api#shikiphpcodetohtml)が返す単一テーマの`<pre class="shiki …">`ブロックと同じで、その後に改行が続くため、そのままファイルにリダイレクトできます。

```bash
vendor/bin/shikiphp highlight src/App.php --theme=github-light > app.html
```

このコマンドに他のオプションはありません。デュアルテーマ、トランスフォーマー、その他の[オプション](https://shikiphp.inline0.dev/ja/docs/options)を使う場合は、代わりにPHP APIを呼び出してください。

### オプションと引数

オプションは`--name=value`形式で指定する必要があります。`--`で始まるその他の引数は無視され、`--`で始まらない最後の引数がファイルとして扱われます。したがって`--lang php file.rs`は`file.rs`をRustとしてハイライトします。`--lang`は無視され、`php`は`file.rs`に置き換えられ、言語は`.rs`拡張子から判定されます。

### 言語の推定

`--lang`を指定しない場合、拡張子がそのまま言語IDになります。拡張子自体が同梱IDまたはエイリアスであれば機能します。たとえば`php`、`js`、`ts`、`tsx`、`py`、`rs`、`go`、`md`、`yml`、`json`、`sh`などです（一覧は[言語](https://shikiphp.inline0.dev/ja/docs/languages)を参照）。次の場合は機能しません。

- `Makefile`や`Dockerfile`のように拡張子がないファイルは、`txt`にフォールバックします。
- 言語IDではない拡張子（`.txt`など）。

`txt`は同梱言語ではないため、現在はどちらの場合も`Unknown language "txt"`エラーで停止します（[#3](https://github.com/inline0/shikiphp/issues/3)）。
これらのファイルでは`--lang`を渡してください。

```bash
vendor/bin/shikiphp highlight Dockerfile --lang=docker
vendor/bin/shikiphp highlight Makefile --lang=make
```

## `langs`

バンドルが言語として受け付けるすべてのIDを、1行に1つずつ表示します。

```bash
vendor/bin/shikiphp langs
```

一覧は350行です。バンドル順（アルファベット順ではありません）の同梱文法IDが253個並び、その後に97個のエイリアス（`js`、`cjs`、`mjs`など）が続きます。文法IDには、他の文法に埋め込まれる補助文法が18個含まれます（`vue-directives`や`es-tag-css`など）。名前とエイリアスを含む一覧は[言語](https://shikiphp.inline0.dev/ja/docs/languages)を参照してください。アルファベット順の一覧にするには`sort`にパイプしてください。

## `themes`

同梱されているすべてのテーマIDをアルファベット順に1行ずつ表示します（テーマは65種類）。

```bash
vendor/bin/shikiphp themes
```

名前とライト／ダークの種別を含む一覧は[テーマ](https://shikiphp.inline0.dev/ja/docs/themes)を参照してください。

## ヘルプと終了ステータス

コマンドを指定しない場合、または`-h` / `--help` / `help`を指定すると、使い方を表示します。

```bash
vendor/bin/shikiphp --help
```

| 状況 | 出力先 | 終了ステータス |
| --- | --- | --- |
| 成功またはヘルプ | stdout | `0` |
| 不明なコマンド | stderrの`Unknown command: <name>` | `1` |
| `highlight`にファイルが指定されていない、またはファイルが存在しない | stderrの使い方の行 | `1` |
| 不明な言語またはテーマ | 捕捉されない`Shikiphp\Exceptions\Highlight`（スタックトレース付きのPHP致命的エラー） | `255` |
