
# Daytona

Daytonaを使うと、Termbridge のターミナルとプレビューをクラウドサンドボックスで実行できます。再現可能な環境やクラウドプレビューが必要な場合、またはノートパソコンをスリープ状態にしておきたい場合に便利です。

## 必要条件

- Daytona API キー
- サンドボックスがクローンできるリポジトリ URL
- 非公開リポジトリの場合はGit認証情報

## クイックスタート

バックエンドをDaytonaに設定し、リポジトリの設定を指定します。

```bash
export TERMBRIDGE_BACKEND=sandbox-daytona
export TERMBRIDGE_DAYTONA_API_KEY=your_key
export TERMBRIDGE_SANDBOX_REPO=https://github.com/you/your-repo.git
export TERMBRIDGE_SANDBOX_BRANCH=main
export TERMBRIDGE_SANDBOX_PATH=your-repo
export TERMBRIDGE_SANDBOX_NAME=termbridge-sandbox
export TERMBRIDGE_SANDBOX_PUBLIC=true
export TERMBRIDGE_SANDBOX_PREVIEW_PORT=5173
export TERMBRIDGE_SANDBOX_DELETE_ON_EXIT=true
```

その後、通常どおり Termbridge を実行します。

```bash
npx termbridge
```

必ず `TERMBRIDGE_SANDBOX_REPO`（または `--sandbox-repo`）を設定してください。指定がない場合、Termbridge は現在、一般公開されていない組み込みのデフォルトリポジトリを使用するため、サンドボックスは作成されてもクローンに失敗します（[#2](https://github.com/inline0/termbridge/issues/2)）。

## Daytona接続

| 変数 | 用途 |
| --- | --- |
| `TERMBRIDGE_DAYTONA_API_KEY` | Daytona API キー |
| `TERMBRIDGE_DAYTONA_API_URL` | API エンドポイント（デフォルトは `https://app.daytona.io/api`） |
| `TERMBRIDGE_DAYTONA_TARGET` | Daytonaの対象リージョン（任意） |

これらはDaytona SDKに渡されます。いずれかが未設定の場合、SDKは独自の `DAYTONA_API_KEY`、`DAYTONA_API_URL`、または `DAYTONA_TARGET` 変数を使用します。

## ダイレクトサンドボックスモード（トンネルなし）

ダイレクトモードでは Termbridge サーバーをサンドボックス内で実行し、Cloudflareは使用しません。共有 URL は、サンドボックス内のサーバーを指すDaytonaプレビューリンクです。

```bash
export TERMBRIDGE_BACKEND=sandbox-daytona
export TERMBRIDGE_SANDBOX_DIRECT=true
export TERMBRIDGE_SANDBOX_SERVER_PORT=8080
```

`TERMBRIDGE_SANDBOX_SERVER_PORT`（または `--port`）のデフォルトは `8080` です。`TERMBRIDGE_SANDBOX_PUBLIC=false` を設定しない場合、ダイレクトモードでは公開サンドボックスが作成され、UI によってターミナル切り替えメニューが非表示になります。

`TERMBRIDGE_SANDBOX_PREVIEW_PORT` を設定すればプレビューも有効にできます。ダイレクトモードでは、サーバーの `--proxy` ポートとして転送されます。

## リポジトリのクローン

Termbridge はサンドボックスを作成し、リポジトリをサンドボックスの作業ディレクトリにクローンします。

次の設定を使用します。

| 変数 | 用途 |
| --- | --- |
| `TERMBRIDGE_SANDBOX_REPO` | クローンするリポジトリURL（クイックスタートを参照し、必ず設定してください） |
| `TERMBRIDGE_SANDBOX_BRANCH` | チェックアウトするブランチ（任意） |
| `TERMBRIDGE_SANDBOX_PATH` | サンドボックス内のリポジトリのパス（任意） |
| `TERMBRIDGE_SANDBOX_NAME` | サンドボックス名（任意、既定値は`termbridge-<random hex>`） |

`TERMBRIDGE_SANDBOX_PATH`が設定されていない場合、Termbridgeはリポジトリ名からその値を決定します。

## プライベートリポジトリ

プライベートリポジトリをクローンする際は、gitの認証情報を指定してください。

```bash
export TERMBRIDGE_SANDBOX_GIT_USERNAME=your_github_username
export TERMBRIDGE_SANDBOX_GIT_TOKEN=your_github_token
```

`TERMBRIDGE_SANDBOX_GIT_PASSWORD`もサポートされており、設定するとトークンより優先されます。

## コーディングエージェント

Termbridgeはサンドボックス内にコーディングエージェントをインストールし、ローカルの認証情報を同期して、すぐに使える状態にできます。

詳しい設定方法、自動モード、セキュリティについては、[コーディングエージェント](https://termbridge.inline0.dev/ja/docs/sandboxes/coding-agents)ガイドを参照してください。

## プレビューモード

プレビュー画面を表示するには、`TERMBRIDGE_SANDBOX_PREVIEW_PORT`にサンドボックス内で開発サーバーが使用するポートを設定してください。

Viteでは、すべてのインターフェースにバインドするようにしてください:

```bash
npm run dev -- --host 0.0.0.0 --port 5173
```

TermbridgeはDaytonaのプレビューリンクを取得し、Termbridgeサーバー経由でプロキシして、UI内にプレビューを表示します。

## パブリックサンドボックスとプライベートサンドボックス

| 変数 | 機能 |
| --- | --- |
| `TERMBRIDGE_SANDBOX_PUBLIC=true` | パブリックサンドボックスを作成 |
| `TERMBRIDGE_SANDBOX_PUBLIC=false` | プライベートサンドボックスを作成 |

変数が設定されていない場合、直接モードではパブリック、それ以外ではプライベートのサンドボックスが作成されます。

プライベートサンドボックスでは、プレビューをプロキシする際にTermbridgeがプレビュートークンを自動的に転送します。

## クリーンアップとライフサイクル

Termbridgeの終了時にサンドボックスを削除するには:

```bash
export TERMBRIDGE_SANDBOX_DELETE_ON_EXIT=true
```

短時間の利用やテスト用のサンドボックスには、プレフィックスを使用してください:

```bash
export TERMBRIDGE_SANDBOX_NAME=termbridge-test-$(date +%s)
export TERMBRIDGE_SANDBOX_DELETE_ON_EXIT=true
```

これによりサンドボックスの使用量を管理しやすくなり、ディスク容量の上限に達するのを防げます。

## CLIフラグ

フラグを使ってDaytonaを設定することもできます。フラグは対応する環境変数より優先されます。

| フラグ | 環境変数 | 用途 |
| --- | --- | --- |
| `--backend sandbox-daytona` | `TERMBRIDGE_BACKEND` | Daytonaバックエンドを使用 |
| `--sandbox-repo <url>` | `TERMBRIDGE_SANDBOX_REPO` | リポジトリURL |
| `--sandbox-branch <branch>` | `TERMBRIDGE_SANDBOX_BRANCH` | ブランチ |
| `--sandbox-path <path>` | `TERMBRIDGE_SANDBOX_PATH` | サンドボックス内のリポジトリのパス |
| `--sandbox-name <name>` | `TERMBRIDGE_SANDBOX_NAME` | サンドボックス名 |
| `--sandbox-preview-port <port>` | `TERMBRIDGE_SANDBOX_PREVIEW_PORT` | プレビューポート |
| `--sandbox-public` | `TERMBRIDGE_SANDBOX_PUBLIC=true` | パブリックサンドボックスを作成 |
| `--sandbox-direct` | `TERMBRIDGE_SANDBOX_DIRECT=true` | サンドボックス内でサーバーを実行（トンネルなし） |

プライベートサンドボックス用のフラグはありません。`TERMBRIDGE_SANDBOX_PUBLIC=false`を使用してください。組み込みの`termbridge --help`出力には、拒否される`--daytona-*`名と`--backend daytona`も引き続き表示されます（[#1](https://github.com/inline0/termbridge/issues/1)）。

## トラブルシューティング

**プレビュー画面が空白になる**
- サンドボックス内で開発サーバーが実行中であることを確認してください。
- プレビューポートに到達できるよう、`--host 0.0.0.0`を使用してください。
- `TERMBRIDGE_SANDBOX_PREVIEW_PORT`が開発サーバーのポートと一致していることを確認してください。

**サンドボックスの作成がクォータエラーで失敗する**
- Daytonaダッシュボードで古いサンドボックスを削除してください。
- 短時間のセッションには`TERMBRIDGE_SANDBOX_DELETE_ON_EXIT=true`を使用してください。

**リポジトリのクローンに失敗する**
- リポジトリURL、ブランチ、認証情報を確認してください。
- Gitトークンにリポジトリの読み取り権限があることを確認してください。
