UStackUStack
Standboy icon

Standboy

StandboyはVS Code拡張で、Game Boyエミュレーター画面を埋め込み。AIコーディングエージェントの動きに合わせ自動で展開/停止します。

Standboy

Standboyとは?

StandboyはVS Code拡張で、Game Boyファミリーのエミュレーター画面を埋め込み、エミュレーターの表示と再生状態をAIコーディングエージェントのアクティビティに連動させます。エージェントが生成を開始すると、Standboyは自動でエミュレーターサイドバーを展開して再生を再開し、エージェントが終了またはアイドル状態になるとパネルを非表示にしてエミュレーターを一時停止します。

目的は、エージェントの待機時間を減らすために、気を散らす要素をIDE内に留め、エージェントがアクティブに動作していないときはエミュレーターを強制的に一時停止することです。独自のROMファイルを読み込め、VS Code再起動後も最後にプレイしたゲームとセーブデータを保持します。

主な機能

  • エージェントのアクティビティに応じた自動表示/非表示: エージェントが数秒間動作するとエミュレーターを展開し、短いアイドル時間でパネルを折りたたんで、短いエージェントの切り替え時のちらつきを防ぎます。
  • CursorとClaude Codeのライフサイクル連携: StandboyはCursorとClaude Codeの公式ライフサイクルAPIと統合し、パネルメニューの単一トグルで有効化できます。
  • 途中フレームからの再開: エミュレーターを再表示すると、ゲームを最初からやり直すのではなく、正確に中断した位置から再開します。
  • ROMライブラリと永続セーブ: 読み込んだROMは管理ライブラリにコピーされます。パネルが非表示になったとき、ページがアンロードされたとき、エクスポート前にインゲームのセーブ状態がディスクにミラーリングされ、ランタイム状態はIndexedDBに保持されます。VS Code再起動後もセーブデータが残るよう設計されています。
  • ROM照合とライブラリメタデータ: ROMはSHA-1をバンドルされたNo-Introデータベースと照合して識別し、一貫した正規タイトルとカバーアートを表示します(ホームブリュー/ハックの場合は文字タイルで代替)。
  • デバイスと入力対応: .gb.gbc.gba ROMに対応し、ファイル拡張子でプラットフォームを自動検出します。キーボード操作はパネルメニューから再割り当て可能で、十字キーを矢印キーに、A/B/Start/Selectを任意のキーにマッピングできます。
  • オフラインエミュレーターとバンドルデータ: エミュレーター(EmulatorJS)とNo-Introデータベースはバンドルされており、オフラインで動作します。

使い方

  1. VS Code拡張をインストール: VS Codeで拡張機能パネルを開き、Standboyを検索するか、code --install-extension mfbzme.standboyを実行します。
  2. エージェント検出を接続(初回起動時): 初回起動時にStandboyはパネルを自動で開き、検出されたエージェントタイプ(~/.claude/settings.jsonが存在する場合はClaude Code、Cursor内で実行中の場合はCursor)を接続するカードを表示します。接続をクリックしてライフサイクルフックを有効にするか、後でメニューの検出からトグルできます。
  3. ROMを追加: + ROMを追加(またはメニューからROMを読み込む…)をクリックし、ローカルの**.gb**、.gbc.gbaファイルを選択します。Standboyはファイルを管理ライブラリにコピーし、バンドルされたNo-Introデータベースと照合してエミュレーターを開始します。
  4. 生成中にエミュレーターを使用: パネルが開いている間はキーボード入力を受け付けます。エージェントがアイドル状態になると、Standboyはアイドルウィンドウのルールに従ってパネルを一時停止して非表示にします。

ユースケース

  • エージェント動作中に集中を保つ: Cursor/Claude Codeがコード生成を開始すると、Standboyはエミュレーターを展開してIDEから離れずにプレイ可能にし、生成が終了するとパネルを一時停止して折りたたみます。
  • 長いエージェント実行中の「タブ切り替え」を避ける: チャット、フォーラム、メッセージングなどの他のアプリに切り替える代わりに、エディタ内で休憩を提供し、エージェントがアクティブ/終了したときに強制的な一時停止境界を設けます。
  • 再起動後に同じゲームに戻る: ROMを一度読み込むと、Standboyは次回のVS Code起動時に最後にプレイしたROMを自動で再開し、セーブデータを復元します。
  • 一貫したタイトル/カバーでROMライブラリを構築: ディスク上で名前が異なるROMファイルでも、SHA-1ハッシュをバンドルされたNo-Introデータベースと照合することで、正規タイトルとカバーアートで表示されます。
  • 異なる入力レイアウトをテスト: パネルメニューからコントロールを再割り当てして、キーボードや好みに合わせることができます。

FAQ

  • StandboyにゲームやROMソースは含まれていますか? いいえ。Standboyはユーザーが用意したROMのみを読み込む仕様で、ゲームは一切同梱されずROMソースへのリンクもありません

  • オフラインで使えますか? エミュレーターとNo-Introデータベースは同梱されており、オフラインで動作します。外部への通信は、拡張機能ホストがlibretro-thumbnailsに対してカバーアートを1回だけ取得する処理のみで、取得後はローカルにキャッシュされます。

  • Standboyはいつエミュレーターを表示・非表示にしますか? エージェントの動作が数秒検出されると自動で表示(auto-show)され、一定時間アイドル状態が続くと非表示(auto-hide)になります。短いエージェントの動作でちらつくのを防ぐ設計です。

  • 対応しているエージェント統合はどれですか? 拡張機能はCursorClaude Codeの公式ライフサイクルAPIにフックしており、パネルメニューで切り替え可能です。他のエージェントの場合は、専用のサポートがない場合にedit-burstヒューリスティックにフォールバックします。

  • エミュレーターは前回の状態から再開できますか? はい。Standboyはパネルが再表示されたときにフレーム途中から再開し、非表示時もwebviewを保持してその場で一時停止し、同じ状態から続行します。

代替手段

  • 汎用Game Boyエミュレーター(スタンドアロン、デスクトップ/モバイル): ゲームプレイに特化していますが、VS Codeエージェントのライフサイクルと連携して自動で一時停止/表示を行う機能はありません。
  • VS Codeのメディア/通知サイドパネル: アクティビティインジケーターやシンプルなダッシュボードを表示する拡張機能は集中管理に役立ちますが、フレーム途中からの再開やセーブの永続化を備えたエミュレーターは提供しません。
  • IDEのタスクスケジューラーや集中タイマー(Pomodoroスタイル): 構造化された方法で「待ち時間」を減らせますが、ROM識別やセーブ永続化を備えたIDE内エミュレーターは提供しません。
  • エージェントフックのないwebview内蔵エミュレーター: エディター内でプレイできる点は似ていますが、AIエージェントのアクティビティに基づくライフサイクル連動の表示/非表示やフレーム途中再開はありません。