---
title: "Studio"
description: "学習を開始し、ストリームを眺め、完成したモデルとチャットし、*.arkor.app URL で公開するためのローカル Web UI。"
---

Studio は `arkor dev` 実行時に立ち上がるローカル Web UI です。別途サインインするサービスではありません。ローカルで起動し、同じ Arkor CLI プロセスと通信し、dev サーバーを止めれば消えます。

## Studio の役割

4 つの仕事:

1. **学習を開始する。** "Run training" ボタンが内部で `arkor start` を起動し、ジョブをマネージドバックエンドに投入します。`arkor start` は既存の `.arkor/build/index.mjs` 成果物を実行し（無いときだけ自動ビルド）、Studio が成果物を最新に保つ仕組みは下記の dev ループのメモを参照してください。
2. **学習を眺める。** ライブステータス付きのジョブ一覧、ストリーム到着とともに更新される Loss チャート、学習イベントのテール。タブで開きっぱなしにして他の作業ができます。
3. **完成モデルを試す。** Playground ページでベースモデルや任意の完了済みジョブの最終アダプターを選んでチャットできます。中間チェックポイントは Playground からはロードしません。学習中の推論には [`onCheckpoint`](/ja/docs/framework/concepts/lifecycle) コールバックをトレーナーで使ってください。
4. **`*.arkor.app` URL でモデルを公開する。** Endpoints ページで OpenAI 互換 chat completions を提供する deployment 専用サブドメインを作成し、その API キーを発行・取り消しできます。同じ操作は [`CloudApiClient`](/ja/docs/framework/sdk/deployments) からプログラマティックにも可能で、Studio が対話的なインターフェイス、SDK が下位レイヤーという位置付けです。

dev ループのメモ: Studio の `/api/manifest` エンドポイントはリクエストごとにトレーナーをリビルド・再 import しますが（キャッシュバストクエリ付き、`packages/arkor/src/studio/manifest.ts` を参照）、UI が fetch するのは Run training ページがマウントされたときだけです。`src/arkor/` を編集して同じ Run training ページに留まり続けると、次のクリックは既存の `.arkor/build/index.mjs` を再利用して古いコードで走ります。確実に新しいコードを取り込むには、編集とクリックの間にページをリロード（あるいはターミナルから `arkor build`）してください。

## Studio が動く場所

`arkor dev` を起動すると CLI は次を行います:

1. Hono サーバーを `127.0.0.1:4000` で起動（ポートは `-p` で変更可能）。
2. 同一オリジンで Vite + React の SPA を提供し、UI はループバックの `/api/*` 経由で CLI と話します。
3. 起動ごとに CSRF トークンを発行し（`~/.arkor/studio-token` にモード `0600` で保存）、すべてのリクエストにこのトークンを要求します。

サーバーはループバックにのみバインドし、ループバック以外の `Host` ヘッダーのリクエストは拒否します。公開 URL はなくリモートからの到達経路もありません（ローカルからのリクエストにもトークンが必要です）。トークンは `arkor dev` のたびにローテートされます。

## マネージドバックエンドとの関係

Studio は CLI の動作を可視化するための画面にすぎません。CLI は認証付き HTTPS でマネージドバックエンドと通信し、Studio は CLI に（ループバック越しに）描画する内容を問い合わせます。

```
Studio（ブラウザータブ）
   │  ループバック上の /api/*、CSRF トークン必須
   ▼
arkor CLI（ローカル）
   │  認証付き HTTPS
   ▼
Arkor マネージドバックエンド（学習、推論）
```

この分離があるからこそ、ブラウザー側で何もログインせずに Studio が動きます。CLI は `~/.arkor/credentials.json` ですでに認証情報を持っており、Studio はローカルで動いている前提のもとその認証情報を引き継ぎます。

`~/.arkor/credentials.json` がない場合の処理はエントリーポイントが決めます。**`arkor dev`** は起動時に匿名セッションを初期化し、必要に応じてアップグレードできるよう `arkor login --oauth` を案内する 1 行のヒントを出します。OAuth フローを自動で起動することはありません。例外は初回起動時に `/v1/auth/cli/config` 自体へ到達できないケースで、同じトランスポートエラーが再スローされて `arkor dev` は fail-fast で終了します（具体的な復旧手順は [`arkor dev`](/ja/docs/framework/cli/dev) を参照）。**Studio サーバーの遅延初期化**（認証情報が無い状態で `/api/*` リクエストが届いたとき）も同じ匿名フォールバックを行います。アカウントセッションを使いたい場合は、Studio をクリックする前（あるいは後）に別途 `arkor login --oauth` を実行してください。認証情報ファイルは共有なので、Studio は次のリクエストでアカウントセッションを拾います。

## 実際に見えるもの

現状のビューはあえて小さく保たれています:

- **Jobs。** ステータス、名前、作成時刻、ID。数秒ごとにポーリング。
- **Job 詳細。** Loss チャート、ログのテール（直近のイベント）、ライブステータス。`Server-Sent Events` 経由でストリームされ、手動リロードなしで最新のままです。
- **Playground。** アダプターセレクター（ベースモデル or 任意の完了済みジョブの最終アダプター）、チャット UI、ストリーミングレスポンス。呼び出しは CLI を経由して、その先のマネージド推論エンドポイントに届きます。Playground は完了済みジョブだけを並べます。学習中に中間チェックポイントで推論したい場合は、代わりに [`onCheckpoint`](/ja/docs/framework/concepts/lifecycle) コールバックを使ってください。
- **Endpoints。** アダプターやベースモデルに紐づく deployment 単位の `*.arkor.app` URL と、その API キーを管理するビュー。slug、target（最終アダプター / 特定 checkpoint / ベースモデル）、auth mode、キー発行・revoke が同じ画面に集約されています。深い操作（既存 deployment の target 差し替え、カスタム run retention、バルク操作のスクリプト化）は [SDK](/ja/docs/framework/sdk/deployments) 側に残されています。

各ビュー（Run training、Job 詳細、Playground、Endpoints）のウォークスルーは [Studio](/ja/docs/framework/studio/overview) セクションにあります。

## Studio を使うべきでない場面

Studio は開発ツールです。ローカルで動き、ループバックのみを受け付け、`arkor dev` が立ち上がっている間だけ存在します。ファインチューン済みモデルをプロダクションで使う際は、[デプロイメント](/ja/docs/framework/sdk/deployments)として公開し、そのエンドポイントの OpenAI 互換 API をアプリケーションから呼んでください。`infer` は学習中の `onCheckpoint` にだけ渡される関数で、Studio をユーザーに見せるものでもありません。
