> ## Documentation Index
> Fetch the complete documentation index at: https://arkor-92aeef0e-eng-615.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# createArkor

> Trainer を CLI と Studio が発見できる Arkor プロジェクトマニフェストにラップする。

# `createArkor`

```ts theme={null}
import { createArkor } from "arkor";
import { trainer } from "./trainer";

export const arkor = createArkor({ trainer });
```

`createArkor` は、`arkor dev`、`arkor start`、Studio の `/api/manifest` エンドポイントが `src/arkor/index.ts` で探すプロジェクトマニフェストを生成します。今のところマニフェストが含むのは `Trainer` だけで、型は `deploy` と `eval` のスロットを予約していますがどちらも未実装です。

## シグネチャ

```ts theme={null}
function createArkor(input: ArkorInput): Arkor;

interface ArkorInput {
  trainer?: Trainer;
  // 将来: deploy?: Deploy;
  // 将来: eval?: Eval;
}

interface Arkor {
  readonly _kind: "arkor";
  readonly trainer?: Trainer;
  // 将来: readonly deploy?: Deploy;
  // 将来: readonly eval?: Eval;
}
```

返ってくるオブジェクトは `Object.freeze` 済み。メソッドはありません。フレームワークは `_kind` と `trainer` を直接読みます。

## パラメーター

* `trainer`: [`createTrainer`](/ja/sdk/create-trainer) で作った `Trainer` を渡す。型上はオプショナルですが、`trainer` のないマニフェストは `arkor start` で実行できません（ランナーが ``Training entry must export `arkor` (from createArkor({...})) or `trainer` (from createTrainer({...})), or default-export one of them.`` で例外が発生します）。

## 予約フィールド

* `deploy` と `eval` スロット。`ArkorInput` と `Arkor` ではコメントアウトされた予約フィールドとして現れます。現状それらを渡すと型エラーになり、ランタイム側の処理もありません。前方互換 API ではなく[ロードマップマーカー](/ja/roadmap#deploy-and-eval-slots)として扱ってください。

## 振る舞い

### 認識されるエクスポート形

`arkor start`（経由 `runTrainer`）は `src/arkor/index.ts` を次の 3 つのエクスポートのいずれかについて、優先順位順に検査します:

1. `export const arkor = createArkor({ ... })`（推奨。テンプレートが生成する形）
2. `export const trainer = createTrainer({ ... })`（パワーユーザー向けショートカット、マニフェストなし）
3. `export default ...`（`Arkor` マニフェストか、ベアな `Trainer` のいずれか）

どれもマッチしないとランナーは上記メッセージで例外を投げます。テンプレートは常に形式 1 を生成します。他を選ぶ理由が分かっていない限り、これを選んでください。

## `isArkor`

```ts theme={null}
import { isArkor } from "arkor";

if (isArkor(value)) {
  // value: Arkor
}
```

マニフェストを動的に利用するコードのために `createArkor` と一緒にエクスポートされている小さな型ガードです。値が null でないオブジェクトで `_kind === "arkor"` であることをチェックします（`Object.isFrozen` は確認 **しません**。`createArkor` 自体は frozen な値を生成するにもかかわらず）。普通に使う場面は限られます。通常のコードでは `index.ts` からの型付きエクスポートが既に正しい形を与えてくれます。

## 関連項目

* [`createTrainer`](/ja/sdk/create-trainer): ラップする `Trainer`
* [プロジェクト構成 § `src/arkor/`](/ja/concepts/project-structure#srcarkor): マニフェストが読まれる場所
* [ロードマップ § Deploy と eval スロット](/ja/roadmap#deploy-and-eval-slots): 予約フィールドの方向性
