
# CLI

```bash
vendor/bin/storh stats <root> [collection] [doc|log|queue]
vendor/bin/storh verify <root> [collection] [doc|log|queue]
vendor/bin/storh compact <root> [collection] [doc|log]
vendor/bin/storh reindex <root> [collection]
```

`<root>`は、エンジンを開いたときのストレージルートです。これは`StorageRoot::resolve()`が返すパス、つまりベースディレクトリに名前空間を加えたものです。`StorageRoot::resolve(__DIR__ . '/var/storh', 'app')`の下に開いたストアは、`var/storh/app`の下にあります。

```bash
vendor/bin/storh stats var/storh/app pages doc
vendor/bin/storh verify var/storh/app events log
vendor/bin/storh compact var/storh/app events log
vendor/bin/storh reindex var/storh/app pages
```

ベースディレクトリだけを渡す（`var/storh`）と、コマンドはまだ存在しないコレクションを対象にします。そのため、エラーにはならず、空のコレクションとして報告します。

storhを依存関係としてインストールする場合、`vendor/bin/storh`にはstorh 0.5.2以降が必要です。以前のバージョンは、パッケージ自身の`vendor/`ディレクトリ内にあるComposerオートローダーしか検索せず、`require`エラーが発生していました。

CLIは安定したJSONを出力するため、cronジョブやデプロイ時のヘルスチェックから利用できます。コレクションのデフォルトは`default`です。エンジンは`stats`、`verify`、`reindex`では`doc`、`compact`では`log`がデフォルトです。

## コマンドが使用するメンテナンスメソッド

すべてのエンジンは、CLIが呼び出すメンテナンスメソッドを公開します。

```php
$store->stats();
$store->health();
$store->verify();
$store->repair();
```

DocStoreの追加機能：

```php
$docs->reindex();
$docs->compact(); // no-op report for API symmetry
```

SegmentedLogの追加機能：

```php
$log->compact();
$log->recover();
$log->state_index();
```

DocStoreでは、`verify()`がレコードを正常に解析できること、および等価、範囲、複合インデックスが全レコードのスキャン結果と一致することを確認します。`repair()`は破損したレコードファイルを`.storh/corrupt/`に隔離し、有効なレコードからインデックスを再構築します。

SegmentedLogでは、`verify()`がセグメント行をデコードし、現在の派生状態インデックスを新たなセグメント再生の結果と照合します。`repair()`は派生状態を再構築し、末尾の不完全な行を切り詰めます。

Queueでは、`verify()`が永続化されたすべてのイベントをデコードし、保留中、処理中、完了済みの状態、ペイロード、要求順序を新たな`queue.log`再生の結果と照合します。`repair()`はログからキューの状態を再構築し、タイムアウトした処理中のジョブをキューに戻します。
