# CLI

`react-server` CLIはアプリケーションの開発とデプロイに使うメインツールです。CLI はアプリケーションのビルド、実行、デプロイをサポートしてくれます。

利用可能なコマンドを見るには次のコマンドを実行してください。

```sh
pnpm react-server --help
```

## コマンド

`react-server` CLIの第一引数には常にアプリケーションのエントリーポイントを指定する必要があります。ファイルベースルーティングの場合はエントリーポイントを定義してくれるので指定する必要はありません。

- **[root]**: デベロップメントモードでアプリケーションを実行
- **build [root]**: プロダクションモードでビルド
- **start**: プロダクションモードでアプリケーションを実行

`[root]`では、デフォルトでReact Server Componentをエクスポートする必要があります。このファイルがエントリーポイントとなりサーバーにリクエストがあるたびにサーバーでレンダリングを行います。

また、エントリーポイントでハッシュ・フラグメントを使用して、特定のエクスポートを指定することもできます。例えば`./index.jsx`にエントリーポイントがあり、App コンポーネントをエクスポートしたいなら`./index.jsx#App`とすることが出来ます。

## 開発サーバーのオプション

もし`./App.jsx`がエントリーポイントなら、次のコマンドで開発サーバーを起動することが出来ます。

```sh
pnpm react-server ./App.jsx
```

開発サーバーを起動するには次のオプションを指定することが出来ます。

### --host

リッスンするホストを指定します。デフォルトでは`localhost`になります。

### --port

リッスンするポートを指定します。デフォルトでは`3000`になります。

### --https

HTTPSプロトコルを有効にする場合に指定します。デフォルトは`false`になります。

もし開発サーバーでHTTPSプロトコルを使う場合、`react-server.config.mjs`または`vite.config.mjs`でHTTPSの設定をする必要があります。詳しくはViteドキュメントの[server.https](https://ja.vite.dev/config/server-options#server-https)を参照してください。

### --cors

CORSを有効にします。デフォルトは`false`です。

もしオリジン間リソース共有を有効化したい場合は便利です。より詳細なCORS設定が必要な場合は`react-server.config.mjs`または`vite.config.mjs`で設定することが出来ます。詳しくはViteドキュメントの[server.cors](https://ja.vite.dev/config/server-options#server-cors)を参照してください。

### --origin

URLのオリジン部分を定数に指定します。環境変数`ORIGIN`を使っても同じ結果になります。

### --trust-proxy

`X-Forwarded-*`ヘッダーを信頼します。

### --open

サーバー起動時にデフォルトブラウザを開くか指定します。デフォルトは`false`です。デフォルトブラウザでアプリケーションにアクセスします。

### --force

依存関係を強制的に最適化します。デフォルトは`false`です。これは`vite --force`と同じです。依存関係の最適化を強制し、Viteキャッシュをクリアします。

### --watch

設定ファイルの変更を監視します。デフォルトは`false`です。監視を無効にするには`--no-watch`を指定する必要があります。

### --clear-screen

サーバー起動時にターミナルをクリアするか指定します。デフォルトは`false`です。ターミナルをクリアしてサーバーを起動したいときに使います。

### --devtools

組み込みのreact-server DevToolsを有効にします。デフォルトは`false`です。

有効にすると、開発中にアプリケーションにDevToolsパネルが挿入されます。RSCペイロード、キャッシュエントリ、ルート、アウトレット、リモートコンポーネント、ライブコンポーネント、ワーカー、サーバーログなど、アプリケーションの内部をリアルタイムで検査できます。

`react-server.config.mjs`で設定することもできます：

```js
export default {
  devtools: true,
};
```

### --no-color

カラー出力を無効化するか。デフォルトは`false`です。CI/CD環境では便利なオプションです。

### --no-validation

設定ファイルのバリデーションをスキップします。デフォルトは`false`です。

このオプションを指定すると、開発サーバーの起動時に`react-server.config.*`ファイルのバリデーションを行いません。バリデーションが正しい設定を誤って拒否する場合や、通常は禁止されているオプションを意図的に使用する必要がある場合のエスケープハッチとして便利です。

### --eval

`node -e`と同じように引数からサーバーのエントリーポイントを評価します。値を指定せずに `--eval` だけを渡すと、エントリーポイントを _標準入力_ から読み込みます。標準入力は **自動的には消費されません** — `--eval` が明示的に指定された場合にのみ読み込まれます。このエントリーポイントは仮想化エントリーポイントとなり、ファイルシステムには書き込まれません。

```sh
# インラインコード
pnpm exec react-server --eval "export default () => <h1>Hello</h1>;"

# 標準入力から（値を指定しない `--eval` に注意）
echo 'export default () => <h1>Hello from stdin</h1>;' | pnpm exec react-server --eval

# シェルのリダイレクトでファイルから
pnpm exec react-server --eval < ./entry.jsx
```

### --version

バージョンを表示します。出力にはマシンのアーキテクチャとnode.jsのバージョンも含まれます。

### --outDir

ビルドファイルの出力先を指定します。デフォルトは`.react-server`です。

### --name

サーバー名を指定します。ログに表示します。デフォルトはreact-serverです。

## ビルドオプション

### --minify

ビルドを最小化する。デフォルトは`true`です。

[Todoアプリケーション](https://github.com/lazarv/react-server/tree/main/examples/todo)のようにReact Server Componentのみを使用し、クライアントコンポーネントを使用していない場合はファイルサイズを最小化する必要はありません。もしクライアントコンポーネントを最小化する必要がない場合は`--no-minify`をオプションに指定してください。

### --sourcemap

プロダクションビルドのSource Mapを作成するか指定します。デフォルトは`false`です。

使用できる値: `true`、`inline`、`hidden`、`server`、`server-inline`。

| 値 | 説明 |
|-------|-------------|
| `true` | サーバーとクライアントの両方のバンドルに`.map`ファイルを生成します |
| `inline` | 出力ファイルにSource Mapをインラインで埋め込みます |
| `hidden` | `sourceMappingURL`コメントなしで`.map`ファイルを生成します |
| `server` | **サーバーバンドルのみ**に`.map`ファイルを生成します |
| `server-inline` | **サーバーバンドルのみ**にSource Mapをインラインで埋め込みます |

Source Mapが有効な場合、プロダクション環境のサーバーサイドエラースタックトレースは、`source-map-support`を使用して自動的に元のソースファイルの位置に書き換えられます。`NODE_OPTIONS='--enable-source-maps'`が既に設定されている場合、競合を避けるため`source-map-support`パッケージはスキップされます。

`--sourcemap=server`または`--sourcemap=server-inline`を使うと、サーバーでマッピングされたスタックトレースを取得しつつ、ブラウザのdevtoolsからソースコードを非公開に保てます。

`react-server.config.mjs`で設定することもできます：

```js
export default {
  sourcemap: true, // または "inline"、"hidden"、"server"、"server-inline"
};
```

> **Note:** アダプターでデプロイする場合、Source Mapはプラットフォームごとに自動的に処理されます：
> - **Vercel**: `.map`ファイルが関数バンドルに含まれ、`NODE_OPTIONS='--enable-source-maps'`が設定されます。
> - **Cloudflare**: `wrangler.toml`で`upload_source_maps`が有効化され、ダッシュボードや`wrangler tail`でマッピングされたスタックトレースが表示されます。
> - **Netlify**: `.map`ファイルが関数と共にデプロイされます。Denoベースのエッジ関数はネイティブにそれらを認識します。
>
> エッジランタイムでは、これらのプラットフォームがインフラストラクチャレベルでSource Mapを処理するため、`source-map-support`パッケージはスキップされます。

詳細はViteドキュメントの[build.sourcemap](https://ja.vite.dev/config/build-options#build-sourcemap)を参照してください。

### --no-color

コンソールでのカラー出力するか指定します。デフォルトは`false`です。CI/CD環境では便利なオプションです。

### --no-validation

設定ファイルのバリデーションをスキップします。デフォルトは`false`です。

このオプションを指定すると、ビルドプロセスの前に`react-server.config.*`ファイルのバリデーションを行いません。バリデーションが正しい設定を誤って拒否する場合や、通常は禁止されているオプションを意図的に使用する必要がある場合のエスケープハッチとして便利です。

### --export

静的ファイルのエクスポートをするか指定します。デフォルトは`false`です。

アプリケーションを静的HTMLページでエクスポートすることが出来ます。`react-server.config.mjs`でルーティングを定義してエクスポートすることが出来ます。詳細は[静的生成](/router/static)を参照してください。

### --export-concurrency

静的エクスポートのパスをレンダリングするのに使う並列プロセス数を指定します。デフォルトは利用可能なCPUコア数に応じて`2`から`4`の範囲で決定されます。

`1`を指定すると、エクスポートはメインプロセス内で単一のパイプラインとして実行され、パスは1つずつ順番にレンダリングされます。フォークやIPCのオーバーヘッドがないため最も軽量なモードで、小規模なエクスポートやデバッグに適しています。

`1`より大きい値を指定すると、その数だけレンダリング用の子プロセスがフォークされます。各子プロセスは独自のRSCメインスレッドとSSRワーカースレッドを持ち、1度に1つのパスをレンダリングします。コーディネーターはIPC経由で空いている子プロセスにパスを割り当てます。出力バイトはIPC境界を越えず、すべての成果物（HTML、`.gz` / `.br`サイドカー、`.postponed.json`、`.prerender-cache.json`）は子プロセス内で直接ディスクに書き出されます。どちらのモードでも生成される成果物のセットは同一です。

このオプションは、数万ページに及ぶ大規模なエクスポートを行う場合や、個々のページでサーバー側の処理が重い場合（Shikiによるシンタックスハイライト、大規模なMDXツリー、負荷の高いサーバーコンポーネントなど）に効果を発揮します。小規模なエクスポートではフォーク自体のコストが支配的になるため、`1`を指定したほうが速いこともあります。

```sh
pnpm react-server build --export --export-concurrency 8
```

`react-server.config.mjs`の`exportConcurrency`としても設定できます。

### --compression

圧縮をするか指定します。デフォルトは`false`です。

静的ファイルのビルドを圧縮したい場合、圧縮を有効にすることが出来ます。圧縮はデフォルトでは有効になっていません。圧縮を有効にすると、Gzipまたは、Brotliを使って圧縮することが出来ます。プロダクションモードのサーバーは圧縮された静的ファイルが存在する場合、デフォルトでこれらの圧縮ファイルを提供します。

### --deploy

アダプターを使ってデプロイするか指定します。デフォルトは`false`です。

`react-server.config.mjs`ファイルでアダプターを使用している場合、アダプターは事前にビルドを行い最後にアプリケーションをデプロイします。

`--deploy` にJSON文字列を渡すことで、デプロイ時にアダプター固有のオプションを指定することもできます。これらのオプションは設定ファイルの `adapterOptions` とマージされ、CLIの値が優先されます。

```sh
pnpm react-server build --deploy '{"project": "my-project"}'
```

これは、設定ファイルを変更せずにアダプターオプションを上書きまたは追加したい場合に便利です。例えば、デプロイ先のプロジェクトや環境を指定する際に使用できます。

### --eval

`node -e`と同じように引数に指定したエントリーポイントを評価します。値を指定せずに `--eval` だけを渡すと、エントリーポイントを _標準入力_ から読み込みます。標準入力は **自動的には消費されません** — `--eval` が明示的に指定された場合にのみ読み込まれます。このエントリーポイントはファイルシステムに書き込んだものではなく仮想的なエントリーポイントです。

```sh
# インラインコード
pnpm exec react-server build --eval "export default () => <h1>Hello</h1>;"

# 標準入力から
echo 'export default () => <h1>Hi</h1>;' | pnpm exec react-server build --eval

# シェルのリダイレクトでファイルから
pnpm exec react-server build --eval < ./entry.jsx
```

### --outDir

ビルドファイルの出力先を指定します。デフォルトは`.react-server`です。

### --edge

Edge ビルドモードを有効にするか指定します。デフォルトは`false`です。Edge ランタイム環境向けにアプリケーションをビルドします。

### --silent

ビルド出力を抑制するか指定します。デフォルトは`false`です。

このオプションはバンドラーからのすべてのビルド出力を抑制します。CI/CD環境や、詳細な出力を必要としないプログラムからビルドを実行する場合に便利です。

### --verbose

ビルド出力を詳細表示するか指定します。デフォルトは`false`です。バンドラーの詳細なビルドログを出力します。

## スタートオプション

**host**、**port**、**https**、**cors**は開発サーバーのオプションと同じ内容です。

### --origin

URLのオリジン部分を定数に指定します。環境変数`ORIGIN`を使っても同じ結果になります。

### --trust-proxy

`X-Forwarded-*`ヘッダーを信頼します。

### --build

指定されたエントリーポイントを使用して、プロダクションモードでサーバーを起動する前にビルドを実行します。

### --outDir

ビルドファイルの出力先を指定します。デフォルトは`.react-server`です。もしビルド時にファイルの出力先を変更している場合、このオプションを指定する必要があります。