daytona について
daytonaは、SDKを通じてDaytona Cloudのサンドボックスを扱うスキルです。隔離環境でコードやコマンド、サービスを実行するための準備と操作を支援します。
主な機能
- 01イメージから隔離サンドボックスを作成
- 02シェルコマンドとコードを実行
- 03ファイルとサンドボックスのライフサイクルを管理
- 04再利用可能なスナップショットを作成
- 05プレビューURLでサンドボックスのサービスを公開
活用シーン
- 01隔離環境でAgent生成コードを実行
- 02依存関係入りの再利用可能な環境を用意
- 03長時間タスクを実行して出力を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ daytona/ skills --skill daytonaインストール後、Claude Code で/daytonaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cli.mdreferences/api/api-keys.mdaudit.mdconfig.mddocker-registry.mdHealth.mdjobs.mdobject-storage.mdorganizations.mdpreview.mdREADME.mdregions.mdrunners.mdsandbox.mdsecret.mdsnapshots.mdtoolbox-computer-use.mdtoolbox-file-system.mdtoolbox-git.mdtoolbox-info.mdtoolbox-interpreter.mdtoolbox-lsp.mdtoolbox-port.mdtoolbox-process.mdtoolbox-server.mdtoolbox-system.mdusers.mdvolumes.mdwarm-pools.mdwebhooks.md詳細
Daytona とは
Daytona は AI エージェント向けに、完全に構成可能なコンピューターであるサンドボックスを提供します。各サンドボックスは、独自のカーネル、ファイルシステム、ネットワークスタック、および専用の vCPU、RAM、ディスクを備えた、分離されたランタイム環境です。エージェントはサンドボックス内で、パッケージのインストール、サーバーの実行、コードのコンパイル、プロセスの管理を行えます。
サンドボックスは、OCI 準拠のイメージまたはスナップショットから構築されます。Linux 上で動作する言語やツールであれば、どれでも使用できます。
対象範囲: このスキルの対象は Daytona Cloud(app.daytona.io)です。
はじめる前に
Daytona のコードを書く前に、セットアップを確認してください。
- SDK はインストールされていますか? ユーザーの言語用の Daytona SDK がインストールされていることを確認します(例:
pip show daytona、またはpackage.jsonで@daytona/sdkを確認)。インストールされていない場合は、インストールしてください。 - API キーは設定されていますか? シェル環境または環境ファイルで
DAYTONA_API_KEYを確認します。設定されていない場合は、API キーが必要であることをユーザーに伝え、作成するための Daytona ダッシュボード > API キー を案内してください。
SDK の基本 — Python
インストール
pip install daytona
クライアントとサンドボックスの作成
from daytona import Daytona
# Uses DAYTONA_API_KEY env var
daytona = Daytona()
# Create a sandbox with defaults (1 vCPU, 1GB RAM, 3GB disk)
sandbox = daytona.create()
from daytona import Daytona, CreateSandboxFromImageParams, Image, Resources
daytona = Daytona()
# Create with a custom image, name, and resources
sandbox = daytona.create(CreateSandboxFromImageParams(
image=Image.debian_slim("3.12"),
name="my-sandbox",
resources=Resources(cpu=2, memory=4, disk=8),
))
コマンドの実行
exec と code_run は、どちらも .result(標準出力)と .exit_code を持つ ExecuteResponse を返します。
code_run はサンドボックスの言語ランタイム内で実行されます(作成時に language= パラメーターで設定し、デフォルトは "python" です)。対応言語:python、typescript、javascript。
# Run a shell command
response = sandbox.process.exec("echo 'Hello, World!'")
print(response.result) # "Hello, World!"
print(response.exit_code) # 0
# Run Python code (stateless)
response = sandbox.process.code_run('''
import json
data = {"key": "value"}
print(json.dumps(data, indent=2))
''')
print(response.result)
print(response.exit_code) # 0 on success, non-zero on error
ファイル操作
# Write a file
sandbox.fs.upload_file(b"Hello, Daytona!", "/home/daytona/data.txt")
# Read a file
content = sandbox.fs.download_file("/home/daytona/data.txt")
print(content.decode())
# List files
files = sandbox.fs.list_files("workspace")
for f in files:
print(f"{f.name} ({'dir' if f.is_dir else f.size})")
サンドボックスのライフサイクル
# Pause and resume later
sandbox.stop() # frees CPU/RAM, keeps disk
sandbox.start() # ready to use again
# Long-term storage (must be stopped first)
sandbox.stop()
sandbox.archive() # cold storage, no quota impact
# Resume a previous sandbox by ID or name
sandbox = daytona.get("sandbox-id-or-name")
sandbox.start()
# Permanently remove
sandbox.delete()
エラー処理のため、Daytona の呼び出しは DaytonaError でラップしてください。非同期処理では、AsyncDaytona(非同期コンテキストマネージャー)を使用します。Python SDK の詳細なリファレンスについては、python-sdk/README.md を参照してください。
SDK の基本 — TypeScript
TypeScript SDK(@daytona/sdk)は Python API に準じています。主な違いは、exec の代わりに executeCommand、code_run の代わりに codeRun を使用する点、ファイル操作に uploadFile/downloadFile/listFiles を使用する点、エラー処理に DaytonaError を使用する点です。npm install @daytona/sdk でインストールしてください。
TypeScript SDK の詳細なリファレンスと例については、typescript-sdk/README.md を参照してください。
よくあるパターン
カスタム環境とスナップショット
ユーザーがサンドボックス内で特定のパッケージ、ツール、またはカスタム OS を必要とする場合は、Image ビルダーでカスタムイメージを定義します。同じセットアップで複数のサンドボックスを作成する場合は、スナップショットの作成を提案してください。スナップショットは依存関係を再利用可能なテンプレートに組み込むため、以降のサンドボックスを必要なものがすべてプリインストールされた状態で、すばやく起動できます。
注: スナップショットはイメージ定義から構築され、実行中のサンドボックスの状態から構築されるものではありません。現在のファイルシステムの状態を取り込むために、実行中のサンドボックスをスナップショットにすることはできません。
Image ビルダーでイメージを定義します。
from daytona import Image
# Debian with Python packages
image = Image.debian_slim("3.12").pip_install(["pandas", "numpy", "scikit-learn"])
# With system packages and shell commands
image = (Image.debian_slim("3.12")
.run_commands("apt-get update && apt-get install -y curl git",
"curl -fsSL https://deb.nodesource.com/setup_20.x | bash -")
.pip_install(["flask"])
.env({"APP_ENV": "production"}))
# From a Dockerfile
image = Image.from_dockerfile("./Dockerfile")
# From a registry image directly
image = Image.base("node:20-slim")
import { Image } from '@daytona/sdk'
const image = Image.debianSlim('3.12').pipInstall(['pandas', 'numpy', 'scikit-learn'])
const image = Image.debianSlim('3.12')
.runCommands('apt-get update && apt-get install -y curl git',
'curl -fsSL https://deb.nodesource.com/setup_20.x | bash -')
.pipInstall(['flask'])
.env({ APP_ENV: 'production' })
const image = Image.fromDockerfile('./Dockerfile')
const image = Image.base('node:20-slim')
イメージから単発のサンドボックスを直接作成します。
from daytona import Daytona, CreateSandboxFromImageParams, Image
daytona = Daytona()
image = Image.debian_slim("3.12").pip_install(["flask"])
sandbox = daytona.create(CreateSandboxFromImageParams(image=image))
const sandbox = await daytona.create({ image })
または、再利用するためのスナップショットを作成します(同じセットアップで複数のサンドボックスを作成する場合におすすめです)。
from daytona import Daytona, CreateSandboxFromSnapshotParams, CreateSnapshotParams, Image
daytona = Daytona()
# One-time: build a snapshot
image = Image.debian_slim("3.12").pip_install(["pandas", "numpy", "scikit-learn"])
snapshot = daytona.snapshot.create(CreateSnapshotParams(
name="data-science",
image=image,
))
# Every time after: fast start from snapshot
sandbox = daytona.create(CreateSandboxFromSnapshotParams(
snapshot=snapshot.name,
))
response = sandbox.process.code_run("import pandas; print(pandas.__version__)")
const snapshot = await daytona.snapshot.create({
name: 'data-science',
image: Image.debianSlim('3.12').pipInstall(['pandas', 'numpy', 'scikit-learn']),
})
const sandbox = await daytona.create({ snapshot: snapshot.name })
Image ビルダー API の詳細については、./references/<lang>-sdk/declarative-builder.md を参照してください。スナップショットの管理については、./references/<lang>-sdk/snapshots.md を参照してください。
長時間実行タスクのパターン
from daytona import Daytona
daytona = Daytona()
sandbox = daytona.create()
# ... clone repo, install deps, etc.
# Start a test suite in the background
sandbox.process.exec("nohup pytest --tb=short > /home/daytona/test.log 2>&1 &")
# Check progress later
response = sandbox.process.exec("tail -5 /home/daytona/test.log")
print(response.result)
# Download the full report when done
report = sandbox.fs.download_file("/home/daytona/test.log")
プレビュー URL
サンドボックスでは、プレビュー URL を介して HTTP サービスを公開できます。プレビューはデフォルトでトークン認証されますが、サンドボックスの作成時に public=True(Python)/public: true(TypeScript)を指定すると公開されます。
- トークン認証 —
.urlと.tokenを返します(x-daytona-preview-tokenヘッダーとして送信)- Python:
sandbox.get_preview_link(port)| TypeScript:sandbox.getPreviewLink(port)| Go:sandbox.GetPreviewLink(port)| Ruby:sandbox.get_preview_link(port)
- Python:
- 署名付き URL(共有可能) — トークンが URL に埋め込まれるため、ヘッダーは不要です
- Python:
sandbox.create_signed_preview_url(port, expires_in_seconds=3600)| TypeScript:sandbox.getSignedPreviewUrl(port, 3600)| Go:sandbox.GetSignedPreviewLink(port, 3600)| Ruby:sandbox.create_signed_preview_url(port, expires_in_seconds: 3600)
- Python:
詳細については、./references/<lang>-sdk/preview.md を参照してください。
サンドボックスの制限と制約
| 制約 | デフォルト | 最大 |
|---|---|---|
| サンドボックスあたりの vCPU | 1 | 4 |
| サンドボックスあたりの RAM | 1 GB | 8 GB |
| サンドボックスあたりのディスク | 3 GiB | 10 GB |
合計制限(すべてのサンドボックスにおける vCPU/RAM/ディスクの合計)は、組織のティアによって異なります。
| ティア | vCPU | RAM | ストレージ | 要件 |
|---|---|---|---|---|
| Tier 1 | 10 | 10 GiB | 30 GiB | メール認証済み |
| Tier 2 | 100 | 200 GiB | 300 GiB | クレジットカード + $25 のチャージ + GitHub 連携 |
| Tier 3 | 250 | 500 GiB | 2000 GiB | ビジネス用メールアドレス + $500 のチャージ |
| Tier 4 | 500 | 1000 GiB | 5000 GiB | 30 日ごとに $2000 のチャージ |
リソースの状態による影響:
- 実行中のサンドボックスは vCPU + RAM + ディスクの制限に算入されます
- 停止中のサンドボックスはディスクの制限にのみ算入されます
- アーカイブ済みのサンドボックスはクォータに影響しません(データはコールドストレージに保存されます)
ネットワークアクセスの制限
Tier 1 および Tier 2 の組織では、ネットワークアクセスが制限されています。 サンドボックスがアクセスできるのは、必須サービス(パッケージレジストリ、Git ホスト、AI API、CDN など)の許可リストに含まれるサービスのみです。この制限はサンドボックス単位で上書きできません。つまり、networkAllowListを設定しても、組織が Tier 1/2 の場合は役に立ちません。
Tier 3 および Tier 4では、デフォルトでインターネットに無制限にアクセスでき、必要に応じてサンドボックスごとにファイアウォールを制御できます。
コードから任意の URL(外部 API、カスタムサービスなど)にアクセスする必要がある場合は、Tier 3 以上が必要です。Daytona Dashboard > Limitsでティアを確認してください。
すべてのティアで利用できる必須サービスには、npm/PyPI/apt レジストリ、GitHub/GitLab/Bitbucket、Docker レジストリ、主要な AI API(Anthropic、OpenAI、Google AI など)、S3、Google Cloud Storage、一般的な開発ツール(Vercel、Supabase、Clerk、Sentry など)があります。全リストについては、network-limits.mdを参照してください。必要なサービスが見つかりませんか?daytonaio/sandbox-network-whitelistからリクエストを送信してください。
使用状況はDaytona Dashboard > Limitsで確認できます。詳細については、limits.mdを参照してください。
クイック決定ツリー
| やりたいこと | まずはこちら |
|---|---|
| 分離された環境でコード/コマンドを実行する | 上記の SDK Essentials を確認し、次に ./references/<lang>-sdk/process-code-execution.md を参照 |
| サンドボックスの起動を高速化する | ./references/<lang>-sdk/snapshots.md — イメージ定義からスナップショットを作成し、それを使って新しいサンドボックスを作成 |
| サンドボックスの実行をまたいでデータを保持する | ./references/<lang>-sdk/volumes.md — サンドボックスを削除しても保持される永続ストレージを接続 |
| カスタム環境(特定の OS、パッケージ、依存関係)を構築する | ./references/<lang>-sdk/declarative-builder.md — Image ビルダーを使ってカスタムサンドボックスイメージを定義 |
| サンドボックスがネットワーク上でアクセスできる対象を制御する | ./references/<lang>-sdk/network-limits.md — サンドボックスごとのファイアウォールルール(無制限アクセスには Tier 3 以上が必要) |
| サンドボックス内のブラウザーまたは GUI を操作する | ./references/<lang>-sdk/computer-use-guide.md + ./references/<lang>-sdk/vnc-access.md |
| ステートフルな Python インタープリターを実行する(呼び出し間で変数を保持) | ./references/python-sdk/sync/code-interpreter.md または ./references/typescript-sdk/code-interpreter.md |
| オブジェクトを保存・取得する(S3 互換) | ./references/<lang>-sdk/object-storage.md(Python sync/async、TypeScript、Ruby) |
| 実行中のサンドボックスに SSH 接続する | ./references/<lang>-sdk/ssh-access.md |
<lang>-sdkは次のいずれかに置き換えてください:python-sdk、typescript-sdk、java-sdk、go-sdk、またはruby-sdk。
SDK インデックス
Python SDK(主要)
| ファイル | 説明 |
|---|---|
| python-sdk/README.md | インストール、クイックスタート、設定 |
| python-sdk/sync/daytona.md | Daytona クライアント — サンドボックスの作成、一覧表示、削除 |
| python-sdk/sync/sandbox.md | サンドボックスインスタンス — ライフサイクル、リソース、ラベル |
| python-sdk/sync/process.md | コマンドの実行、コードの実行 |
| python-sdk/sync/file-system.md | ファイル操作 — 読み取り、書き込み、アップロード、ダウンロード |
| python-sdk/sync/git.md | Git 操作 — クローン、コミット、プッシュ、ステータス |
| python-sdk/sync/snapshot.md | スナップショット管理 |
| python-sdk/sync/volume.md | ボリューム管理 |
| python-sdk/sync/code-interpreter.md | ステートフルな Python インタープリター |
| python-sdk/sync/computer-use.md | デスクトップの自動化(マウス/キーボード/画面) |
| python-sdk/sync/lsp-server.md | Language Server Protocol |
| python-sdk/sync/object-storage.md | S3 互換のオブジェクトストレージ |
| python-sdk/errors.md | エラーの種類 |
| python-sdk/image.md | カスタムイメージ定義 |
非同期版は同期 API と同じ構成です:python-sdk/async/。
TypeScript SDK
フラットな構成です(Python のような同期/非同期の分割はありません):typescript-sdk/README.md。ファイル:daytona.md、sandbox.md、process.md、file-system.md、git.md、snapshot.md、volume.md、code-interpreter.md、computer-use.md、lsp-server.md、object-storage.md、execute-response.md、pty-handle.md、errors.md、image.md。
Java SDK、Go SDK、Ruby SDK
いずれも同じパターンに従います。Java は TypeScript のフラットな構成を踏襲しています:java-sdk/README.md。Go は簡潔な単一ファイル構成です:go-sdk/README.md。Ruby は TypeScript の構成を踏襲しています:ruby-sdk/README.md。
機能ガイド(SDK ごと)
各 SDK フォルダーには、言語ごとの例を含む同じ機能ガイド一式が含まれています。ガイドを探すには、./references/<lang>-sdk/<filename> を使用してください(例:./references/python-sdk/sandboxes.md、./references/typescript-sdk/snapshots.md)。
| ファイル名 | トピック |
|---|---|
sandboxes.md | サンドボックスのライフサイクル — 作成、起動、停止、アーカイブ、削除 |
process-code-execution.md | コマンドとコードの実行、ステートフルなインタープリター |
file-system-operations.md | ファイルの読み取り、書き込み、アップロード、ダウンロード |
git-operations.md | クローン、コミット、プッシュ、ステータス |
snapshots.md | イメージ定義から再利用可能なサンドボックステンプレートを構築 |
volumes.md | サンドボックス間での永続ストレージ |
ssh-access.md | サンドボックスへの SSH 接続 |
vnc-access.md | デスクトップサンドボックス向けの VNC |
computer-use-guide.md | デスクトップの自動化(マウス/キーボード/画面) |
declarative-builder.md | Image ビルダーによるカスタムサンドボックスイメージ |
log-streaming.md | サンドボックスのログをストリーミング |
network-limits.md | ネットワークファイアウォールの制御 |
language-server-protocol.md | IDE のような機能(自動補完、診断) |
preview.md | 公開ポートのプレビュー URL |
pty.md | PTY/ターミナルのサポート |
regions.md | 利用可能なリージョン |
vpn-connections.md | VPN 接続 |
プラットフォームリファレンス
| ファイル | 説明 |
|---|---|
| limits.md | リソース制限、レート制限、ティア要件 |
| organizations.md | チーム管理、メンバーの役割 |
| billing.md | 使用状況の追跡、料金 |
| audit-logs.md | 監査ログ |
| linked-accounts.md | GitHub/GitLab アカウントのリンク |
| web-terminal.md | ブラウザーからのターミナルアクセス |
| webhooks.md | Webhook イベント |
| mcp.md | MCP 統合 |
| cli.md | CLI コマンドリファレンス |
API リファレンス
すべての Daytona エンドポイント(サンドボックス、スナップショット、ボリューム、ツールボックス操作など)の REST API ドキュメント:api/README.md。