コンテンツにスキップ

ファイルシステム操作

Daytona(サンドボックスという隔離されたクラウド開発環境を作成・管理するプラットフォーム)のSDKは、サンドボックス(Daytonaが管理する隔離された一時的な実行環境)内のfsモジュールを通じて、充実したファイルシステム操作機能を提供します。本ガイドでは、利用可能なすべてのファイルシステム操作とベストプラクティスについて説明します。

基本操作

Daytona SDK は、サンドボックス(Daytonaが管理する隔離された一時的な実行環境)内のファイルシステムとやり取りする機能を提供します。ファイルの一覧表示、ディレクトリ作成、ファイルの読み書きなど、さまざまな操作を実行できます。

簡潔さのため、ファイル操作はデフォルトでサンドボックスユーザーのホームディレクトリ直下で行われる前提です。例えば、workspace/home/[username]/workspace を意味します。先頭にスラッシュ / を付けた絶対パスを作業ディレクトリとして指定することも可能です。

ファイルとディレクトリの一覧表示

Daytona SDK は、Python と TypeScript を用いてサンドボックス内のファイルやディレクトリを一覧表示できます。

# List files in a directory
files = sandbox.fs.list_files("workspace")
for file in files:
print(f"Name: {file.name}")
print(f"Is directory: {file.is_dir}")
print(f"Size: {file.size}")
print(f"Modified: {file.mod_time}")

ディレクトリの作成

Daytona SDK は、Python と TypeScript で特定のパーミッションを指定してディレクトリを作成できます。

# Create with specific permissions
sandbox.fs.create_folder("workspace/new-dir", "755")

ファイルのアップロード

Daytona SDK は、Python と TypeScript を用いて、サンドボックス内でのファイルの読み取り、書き込み、アップロード、ダウンロード、削除を行うための機能を提供します。

単一ファイルのアップロード

単一ファイルをアップロードする場合は、次のように実行します。

# Upload a single file
with open("local_file.txt", "rb") as f:
content = f.read()
sandbox.fs.upload_file(content, "remote_file.txt")

複数ファイルのアップロード

以下は、1回のメソッド呼び出しで複数ファイルを効率的にアップロードする例です。

# Upload multiple files at once
files_to_upload = []
with open("file1.txt", "rb") as f1:
files_to_upload.append(FileUpload(
source=f1.read(),
destination="data/file1.txt",
))
with open("file2.txt", "rb") as f2:
files_to_upload.append(FileUpload(
source=f2.read(),
destination="data/file2.txt",
))
with open("settings.json", "rb") as f3:
files_to_upload.append(FileUpload(
source=f3.read(),
destination="config/settings.json",
))
sandbox.fs.upload_files(files_to_upload)

ファイルのダウンロード

次のコマンドは、サンドボックスユーザーのホームディレクトリから file1.txt をダウンロードし、その内容を出力します。

content = sandbox.fs.download_file("file1.txt")
with open("local_file.txt", "wb") as f:
f.write(content)
print(content.decode('utf-8'))

ファイルの削除

不要になったファイルは、delete_file 関数で削除できます。

sandbox.fs.delete_file("workspace/file.txt")

高度な操作

Daytona SDK は、ファイル権限の設定・取得、検索と置換などの高度なファイルシステム操作を提供します。

ファイル権限

Daytona SDK では、Python と TypeScript から、ファイル権限の設定・取得や、ディレクトリ権限の再帰的な設定が行えます。

# Set file permissions
sandbox.fs.set_file_permissions("workspace/file.txt", "644")
# Get file permissions
file_info = sandbox.fs.get_file_info("workspace/file.txt")
print(f"Permissions: {file_info.permissions}")

ファイルの検索と置換

Daytona SDK では、Python と TypeScript から、ファイル内のテキストの検索および置換を行えます。

# Search for text in files; if a folder is specified, the search is recursive
results = sandbox.fs.find_files(
path="workspace/src",
pattern="text-of-interest"
)
for match in results:
print(f"Absolute file path: {match.file}")
print(f"Line number: {match.line}")
print(f"Line content: {match.content}")
print("\n")
# Replace text in files
sandbox.fs.replace_in_files(
files=["workspace/file1.txt", "workspace/file2.txt"],
pattern="old_text",
new_value="new_text"
)