@deno/sandbox を もっと味わう

>100 Views

March 13, 26

スライド概要

Deno Deploy上の隔離されたLinux micro VMを安全に操作するためのSDK、@deno/sandboxについて解説。

これは、サンドボックス内でシェルスクリプトやDenoプロセスなどを安全に実行することを可能にします。
さらに、新機能であるブロックストレージ(Volumes)を導入することで、
起動時の依存モジュールのインストールをスキップし、Imagemagickのようなツールも即時使えるようになります。

profile-image

虎の穴ラボ株式会社は、主にとらのあな関連サービスのシステム開発を専門に担う、エンジニアの会社です。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

@deno/sandbox を もっと味わう 【エンジニア LTイベント】オタクが追う最新技術 LT 2025年度末 虎の穴ラボ オクタニ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

2.

自己紹介 奥谷 一陽 所属:虎の穴ラボ株式会社 仕事:Fantiaの開発 Ruby on Rails、 React 興味:Deno、TypeScript 購読中:数字であそぼ。 X:@okutann88 github:Octo8080X toranoana.deno 運営の1人 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

3.

@deno/sandbox Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

4.

https://jsr.io/@deno/sandbox Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

5.

@deno/sandbox - Deno Deploy上に隔離された軽量な Linux micro VMをサンドボックスにする - サンドボックス内で安全に - shell script - プロセスの実行 - js アプリ、 REPL - ファイル操作 ができる。 - この機能の SDKパッケージ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

6.

@deno/sandbox - サンドボックスは、 JS/TSから操作できる Linux micro VM - SSHアクセス - Linux micro vmへのワーキングディレクトリへの VSCodeでの参照 などもできる。 - AIが書いたコードの安全な利用 - どんなコードを書いてくるのか?事前設定できない - ガードレールを引いた中で動かしたい。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

7.

https://jsr.io/@deno/sandbox Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

8.
[beta]
ミニマムな実行
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.

9.
[beta]
サンドボックス上で 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.

10.

これら踏まえて、ゲームを作る 技術スタック - Deno - Fresh - @deno/sandbox - babylonJS https://deno-sandbox-api-test.octo8080x.deno.net/ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

11.

「もっと」やる Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

12.

ブロックストレージ - sandbox が使えるブロックストレージ Volumesが機能追加 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

13.

ブロックストレージ - sandbox が使えるブロックストレージ Volumesが機能追加 - sandboxを起動するときに、事前に用意したストレージを接続し - ソースコードを都度置く - 依存モジュールをインストールする をスキップできる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

14.

ブロックストレージ - sandbox が使えるブロックストレージ Volumesが機能追加 - sandboxを起動するときに、事前に用意したストレージを接続し - ソースコードを都度置く - 依存モジュールをインストールする をスキップできる。 - さらに、インストールに時間がかかるツールも即時使用可能な形で、 sandboxを起動できる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

15.

ブロックストレージ - sandbox が使えるブロックストレージ Volumesが機能追加 - sandboxを起動するときに、事前に用意したストレージを接続し - ソースコードを都度置く - 依存モジュールをインストールする をスキップできる。 - さらに、インストールに時間がかかるツールも即時使用可能な形で、 sandboxを起動できる。 例えば、 sandboxに「imagemagick」を導入して画像の変換ができる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

16.

ブロックストレージを使う Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

17.

ブロックストレージを使う Deploy Fresh 🍋 ユーザーのリクエストは Freshで受ける FreshはSandboxへリクエストを送る Volumeに置いた Imagemagickを使う Sandbox Volume ソースコード 依存パッケージ群 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

18.

ブロックストレージのセットアップ ソースコード抜粋 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.

19.

同様事例 Deno sandbox上で git を使う https://deno-sandbox-memo.octo8080x.deno.net/ Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

20.

まとめ - @deno/sandbox により Deno Deploy上に隔離された Linux micro VM上で様々な処理ができる。 - volumeを使うことで、起動の高速化などの恩恵を得られる。 - TS/JSをインターフェースとして、 Linuxを操作することでより操作可能な領域が広がった世界観で、 より広範な技術スタックを導入することができる。 Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.

21.

ありがとうございました Copyright (C) 2025 Toranoana Lab Inc. All Rights Reserved.