---
title: "arkor build / start"
description: "Studio なしでトレーナーをバンドルして実行する。"
---

`arkor build` と `arkor start` は [Studio](/ja/docs/framework/concepts/studio) の **Run training** ボタンのヘッドレス相当です。UI を起動せずにトレーナーを動かしたいとき（CI、サーバー、別スクリプトから）に使ってください。

Studio の **Run training** は内部的に `arkor start`（エントリー引数なし）を起動するので、両フローでランタイムの動作は同一です。

## `arkor build`

`src/arkor/index.ts` を esbuild で `.arkor/build/index.mjs` にバンドルします。

### 概要

```
arkor build [entry]
```

<CodeGroup labels={["pnpm","npm","yarn","bun"]}>

```bash
pnpm build
```

```bash
npm run build
```

```bash
yarn build
```

```bash
bun run build
```

</CodeGroup>

### 引数

| 引数 | デフォルト | 説明 |
| --- | --- | --- |
| `entry` | `src/arkor/index.ts` | バンドルするソースエントリー。相対パスでも絶対パスでも動きます。 |

### 出力

`.arkor/build/index.mjs`（`outDir` のデフォルトは `.arkor/build`）。出力は単一の ESM ファイル、Node 22.22 をターゲットにし、`packages: "external"` で bare specifier（`arkor`、`node_modules` 内のもの）はバンドルせず、成果物はプロジェクトの `node_modules` からランタイム SDK を解決します。インライン化されるのは相対 import のみです。

エントリーが存在しない場合、`arkor build` は `src/arkor/index.ts` を作るか明示的なエントリーを渡すよう促すメッセージで例外が発生します。

## `arkor start`

`.arkor/build/index.mjs` を実行します。ランナーはバンドルを import し、登録済みトレーナーを見つけ（`export const arkor` を最優先、次に `export const trainer`、最後にデフォルトエクスポート）、`trainer.start()` の後に `trainer.wait()` を呼びます。

### 概要

```
arkor start [entry]
```

<CodeGroup labels={["pnpm","npm","yarn","bun"]}>

```bash
pnpm start
```

```bash
npm start
```

```bash
yarn start
```

```bash
bun start
```

</CodeGroup>

### 引数

| 引数 | デフォルト | 説明 |
| --- | --- | --- |
| `entry` | _なし_ | 渡されたとき、`arkor start` は実行 **前** にこのエントリーでプロジェクトをリビルドします。省略時は既存ビルド成果物を再利用し、無ければデフォルトエントリーで自動ビルドしてから走ります。 |

無ければ自動ビルドする挙動は、Studio の "Run training" でサブプロセスを 2 段階に分けて起動せずに済ませるためのものです。スクリプトからは通常、`arkor build` と `arkor start` を明示的に呼び、起動前にビルド失敗を検知できるようにしたいはずです。

### 振る舞い

| 状況 | `arkor start` の挙動 |
| --- | --- |
| `entry` 引数あり | 与えられたエントリーでリビルドして実行。 |
| 成果物なし、`entry` なし | デフォルトエントリーで自動ビルドして実行。 |
| 成果物あり、`entry` なし | 成果物を再利用してそのまま実行。 |

「成果物の再利用」の仕組みがあるおかげで、Studio はトレーナーの編集を train エンドポイントではなく `/api/manifest` のリビルド経由で反映できます。CLI 中心のワークフローでは、`src/arkor/` を編集したら毎回 `arkor build` を走らせてください。

## エラー

`arkor build`:

| メッセージ | 意味 | 対処 |
| --- | --- | --- |
| `Build entry not found: <abs-path>. Create src/arkor/index.ts or pass an explicit entry argument.`（ビルドエントリーが見つかりません: `<abs-path>`。`src/arkor/index.ts` を作成するか、明示的なエントリー引数を渡してください） | デフォルトエントリーが存在せず明示的なエントリーも渡されなかった。 | プロジェクトルート（`src/arkor/index.ts` を含むディレクトリー）から実行するか、エントリーを渡す。例: `arkor build path/to/entry.ts`。 |

`arkor start`:

| メッセージ | 意味 | 対処 |
| --- | --- | --- |
| `Build entry not found: <abs-path>. Create src/arkor/index.ts or pass an explicit entry argument.`（ビルドエントリーが見つかりません: `<abs-path>`。`src/arkor/index.ts` を作成するか、明示的なエントリー引数を渡してください） | `arkor start` はエントリー引数を渡したとき、または `.arkor/build/index.mjs` が無いとき先に `arkor build` を走らせます。不正なエントリーパスはランナー段階ではなくこのビルド段階で検出されます。 | 存在するエントリーを渡すか、省略してデフォルトの `src/arkor/index.ts` に任せる。 |
| `Training entry must export 'arkor' (from createArkor({...})) or 'trainer' (from createTrainer({...})), or default-export one of them.`（学習エントリーは `createArkor({...})` の `arkor` か `createTrainer({...})` の `trainer` をエクスポートするか、いずれかをデフォルトエクスポートする必要があります） | バンドルの import は成功したが、サポートしているエクスポート形をどれも露出していない。 | 受け付ける 3 つの形（名前付き `arkor`、名前付き `trainer`、デフォルト）は [プロジェクト構成 § `src/arkor/`](/ja/docs/framework/concepts/project-structure#srcarkor) を参照。 |

`runTrainer`（プログラム）:

| メッセージ | 意味 | 対処 |
| --- | --- | --- |
| `Training entry not found: <abs-path>. Provide a path or create src/arkor/index.ts.`（学習エントリーが見つかりません: `<abs-path>`。パスを指定するか `src/arkor/index.ts` を作成してください） | ランナーを直接呼んだとき（例: `import { runTrainer } from "arkor"`）に存在しないパスを渡すと発生します。CLI はこの経路を通りません。`arkor start` ならビルド段階で先に失敗します。 | 存在するパスを渡すか、`import "./src/arkor/index.ts"` を先に置いてモジュールロード時に検知。 |

## 例

ビルドして開始（2 ステップ）:

<CodeGroup labels={["pnpm","npm","yarn","bun"]}>

```bash
pnpm build
pnpm start
```

```bash
npm run build
npm start
```

```bash
yarn build
yarn start
```

```bash
bun run build
bun start
```

</CodeGroup>

別エントリーでリビルドを強制（1 ステップ）:

<CodeGroup labels={["pnpm","npm","yarn","bun"]}>

```bash
pnpm start src/arkor/experiment.ts
```

```bash
npm start -- src/arkor/experiment.ts
```

```bash
yarn start src/arkor/experiment.ts
```

```bash
bun start src/arkor/experiment.ts
```

</CodeGroup>

トレーナー編集後、古い成果物をリビルド:

<CodeGroup labels={["pnpm","npm","yarn","bun"]}>

```bash
# src/arkor/trainer.ts を編集した後:
pnpm build && pnpm start
```

```bash
# src/arkor/trainer.ts を編集した後:
npm run build && npm start
```

```bash
# src/arkor/trainer.ts を編集した後:
yarn build && yarn start
```

```bash
# src/arkor/trainer.ts を編集した後:
bun run build && bun start
```

</CodeGroup>

## 関連項目

- [プロジェクト構成 § `src/arkor/`](/ja/docs/framework/concepts/project-structure#srcarkor): ランナーが受け付けるエクスポート形
- [`runTrainer`](/ja/docs/framework/sdk/overview#補助ヘルパー上級者向け): 同じランタイムの動作を自分の TypeScript コードから実行
- [プログラム実行レシピ](/ja/docs/framework/cookbook/programmatic-runs): サーバーやスクリプトに組み込む完全な配線
