>100 Views
March 13, 26
スライド概要
Deno Deploy上の隔離されたLinux micro VMを安全に操作するためのSDK、@deno/sandboxについて解説。
これは、サンドボックス内でシェルスクリプトやDenoプロセスなどを安全に実行することを可能にします。
さらに、新機能であるブロックストレージ(Volumes)を導入することで、
起動時の依存モジュールのインストールをスキップし、Imagemagickのようなツールも即時使えるようになります。
虎の穴ラボ株式会社は、主にとらのあな関連サービスのシステム開発を専門に担う、エンジニアの会社です。
@deno/sandbox を もっと味わう 【エンジニア LTイベント】オタクが追う最新技術 LT 2025年度末 虎の穴ラボ オクタニ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
自己紹介 奥谷 一陽 所属:虎の穴ラボ株式会社 仕事:Fantiaの開発 Ruby on Rails、 React 興味:Deno、TypeScript 購読中:数字であそぼ。 X:@okutann88 github:Octo8080X toranoana.deno 運営の1人 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
@deno/sandbox Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
https://jsr.io/@deno/sandbox Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
@deno/sandbox - Deno Deploy上に隔離された軽量な Linux micro VMをサンドボックスにする - サンドボックス内で安全に - shell script - プロセスの実行 - js アプリ、 REPL - ファイル操作 ができる。 - この機能の SDKパッケージ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
@deno/sandbox - サンドボックスは、 JS/TSから操作できる Linux micro VM - SSHアクセス - Linux micro vmへのワーキングディレクトリへの VSCodeでの参照 などもできる。 - AIが書いたコードの安全な利用 - どんなコードを書いてくるのか?事前設定できない - ガードレールを引いた中で動かしたい。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
https://jsr.io/@deno/sandbox Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ミニマムな実行
import { Sandbox } from "@deno/sandbox" ;
await using sandbox = await Sandbox .create ();
await sandbox.sh `echo "Hello, world!"` ;
最小の構成として、サンドボックスで echoするだけ
$ deno -- env .\main.ts
deno -- env .\main.ts
✅ Granted env access to "WS_NO_BUFFER_UTIL" .
✅ Granted env access to "DENO_DEPLOY_TOKEN" .
✅ Granted env access to "DENO_SANDBOX_BASE_DOMAIN" .
✅ Granted env access to "DENO_DEPLOY_ENDPOINT" .
✅ Granted env access to "DENO_DEPLOY_CONSOLE_ENDPOINT" .
✅ Granted net access to "ams.sandbox-api.deno.net:443" .
Hello, world!
これだけでローカルマシンではなく、 denodeploy上のLinux micro VM に処理
を移譲させ、結果をもらうことができる
Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
サンドボックス上で Deno プロセスを起動
import { Sandbox } from "@deno/sandbox" ;
await using sandbox = await Sandbox .create ();
任意のコードを
await sandbox. writeTextFile ("hello.ts" , "console.log('Hello,
Sandbox!');" );
サンドボックスにファイルとし
const child = await sandbox. spawn ("deno" , {
args: [ "run" , "hello.ts" ],
stdout: "piped" ,
});
// Read the output
for await (const chunk of child.stdout) {
console .log(new TextDecoder ().decode (chunk));
}
$ deno -- env -EN .\any-script-runner1.ts
Hello, Sandbox!
て書き込む
実行する
出力をストリーミングする
組み合わせとして deno add や、deno install もできるので、
外部パッケージの組み合わせも可能。
Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
これら踏まえて、ゲームを作る 技術スタック - Deno - Fresh - @deno/sandbox - babylonJS https://deno-sandbox-api-test.octo8080x.deno.net/ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
「もっと」やる Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ブロックストレージ - sandbox が使えるブロックストレージ Volumesが機能追加 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ブロックストレージ - sandbox が使えるブロックストレージ Volumesが機能追加 - sandboxを起動するときに、事前に用意したストレージを接続し - ソースコードを都度置く - 依存モジュールをインストールする をスキップできる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ブロックストレージ - sandbox が使えるブロックストレージ Volumesが機能追加 - sandboxを起動するときに、事前に用意したストレージを接続し - ソースコードを都度置く - 依存モジュールをインストールする をスキップできる。 - さらに、インストールに時間がかかるツールも即時使用可能な形で、 sandboxを起動できる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ブロックストレージ - sandbox が使えるブロックストレージ Volumesが機能追加 - sandboxを起動するときに、事前に用意したストレージを接続し - ソースコードを都度置く - 依存モジュールをインストールする をスキップできる。 - さらに、インストールに時間がかかるツールも即時使用可能な形で、 sandboxを起動できる。 例えば、 sandboxに「imagemagick」を導入して画像の変換ができる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ブロックストレージを使う Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ブロックストレージを使う Deploy Fresh 🍋 ユーザーのリクエストは Freshで受ける FreshはSandboxへリクエストを送る Volumeに置いた Imagemagickを使う Sandbox Volume ソースコード 依存パッケージ群 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ブロックストレージのセットアップ ソースコード抜粋 await sandbox.sh`apt-get update > /dev/null 2>&1`.sudo(); tsからlinuxを操作する await sandbox imagemagickを導入 ca-certificates curl fontconfig libfreetype6 libexpat1 libuuid1 libharfbuzz0b .sh`DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libglib2.0-0 libgraphite2-3 libfribidi0 libpcre2-8-0 libx11-6 libxext6 libxrender1 libxcb1 libxcb-render0 libxcb-shm0 libxau6 libxdmcp6`.sudo(); await sandbox.sh`curl -fsSL -o /tmp/magick.appimage https://download.imagemagick.org/ImageMagick/download/binaries/magick`.sudo(); await sandbox.sh`chmod +x /tmp/magick.appimage`.sudo(); await sandbox.sh`sh -c 'cd /tmp && ./magick.appimage --appimage-extract'`.sudo(); await sandbox.sh`mkdir -p /data/imagemagick`.sudo(); await sandbox.sh`cp -a /tmp/squashfs-root/. /data/imagemagick/`.sudo(); https://github.com/Octo8080X/deno-sandbox-imag emagick/blob/main/libs/sandboxImagemagick.ts Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
同様事例 Deno sandbox上で git を使う https://deno-sandbox-memo.octo8080x.deno.net/ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
まとめ - @deno/sandbox により Deno Deploy上に隔離された Linux micro VM上で様々な処理ができる。 - volumeを使うことで、起動の高速化などの恩恵を得られる。 - TS/JSをインターフェースとして、 Linuxを操作することでより操作可能な領域が広がった世界観で、 より広範な技術スタックを導入することができる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.
ありがとうございました Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.