推しアイデア
Cloudflare Sandboxを使って、実際に動いてるサービスの保守・運用を行える
Cloudflare Sandboxを使って、実際に動いてるサービスの保守・運用を行える
プロダクトを"うん"用する上で障害が起こった時に対応できるように訓練ができるシミュレーションがあるといいなと思ったため
Cloudflare Sandbox SDK!!
「うん」から運用
実際のシステム障害発生時に備えて、意図的に障害をシミュレーションし、チームの対応力や連携を確認・向上させる活動
今回のプロジェクトでは、壊れても問題ない Sandbox 環境上に疑似サービス「うん用API」を構築し、プレイヤーが監視画面、ログ、ターミナル、Runbook(手順書) などを使って障害対応を体験するものになっています。
難易度として、初級、中級、上級と用意している。 初級は、Runbook通りに対応していけるが、中級、上級と上がっていくにつれて理不尽になっていく
難易度を選ぶ

シナリオを選ぶ

詳細を読んで開始おす

runbookなどをみながら障害対応を進める

• Preact (TypeScript) • Vite • xterm.js(ターミナル) • Canvas API + MediaRecorder(ユーザー操作録画) • WebSocket / SSE(ターミナル、イベント配信)
• Hono (TypeScript) • Cloudflare Sandbox SDK(実行環境) • Durable Objects(セッション管理)
• Cloudflare D1(セッション、リプレイ metadata保存) • Cloudflare R2(リプレイ動画、イベントログ保存) • Cloudflare KV
• Cloudflare Workers

プレイヤーのターミナル操作が、Sandbox環境の実プロセスに届き、プロセス停止、ディスク枯渇、バッチ失敗などを「本当に壊す」体験を実現
ブラウザ全体ではなくゲーム画面(Canvas)だけを captureStream + MediaRecorderで録画で録画
Screen Capture APIを使えば、画面キャプチャできるが、自分でキャプチャする画面を選んだりする手間が発生してしまう。 できる限りユーザーがスムーズにゲームを始められるようにcaptureStreamで自然の流れで録画が開始されるようにした
captureStream https://developer.mozilla.org/ja/docs/Web/API/HTMLCanvasElement/captureStream MediaRecorder https://developer.mozilla.org/ja/docs/Web/API/MediaRecorder
ただユーザーが操作した録画を撮るだけでなく、どんなコマンドをいつ実行したかのイベントを保存することで、動画のタイムラインを作成できるようにした。 タイムライン上のイベントをクリックすることで、録画の該当シーンに移動できるため、自分の行動を振り返りしやすいように工夫している。

小ネタで用意した自作言語

今回のプロダクトでは、Cloudflare Sandbox の PTY(Bun.terminal) を xterm.js + SandboxAddonでWebSocket接続している。 ただ、Bun.terminal側がCtrl+Cを処理してくれないので、正規の方法でプロセスを中断したりできない。 修正用のPRが上がってたりするが、Bun本体にマージされていないためCtrl + Cが使えない https://github.com/oven-sh/bun/pull/25834 https://github.com/oven-sh/bun/issues/25779
なので、Sandboxの外からbashのプロセスグループに kill -INTを送って、擬似的にCtrl + Cでの中断を再現している。
今回、録画で使っているのがCanvasをキャプチャするものなので、Canvasの中に全て収めないといけない。 Canvasの要素調整大変