本文へスキップ

なぜ debuff なのか ​

2D の Web ゲームは、<canvas> と JavaScript だけでも作れます。debuff はあえて、その標準のすぐそばにとどまっています。どのゲームも結局作り直すことになる部分と、ゲームが実際に何をしているのかをあなた(とエージェント)に見せるツールを足しているだけです。

ひとことで言うと ​

素の canvas + JSdebuff
60 fps で描けるスプライト数約 5,000(Canvas 2D)1 回ずつ呼んで 約 50,000〜100,000、まとめて描けば 約 800,000(spryte、WebGL2 と Canvas 2D フォールバック)
小さなゲームの出荷サイズ書いた分だけスターターで起動時の JavaScript が 18.8 kB(brotli)。ランタイム、入力、オーディオ、ゲーム本体込み
update でのクラッシュループが黙って止まるゲームが止まり、誰のバグか を伝え、該当するソースの行にリンク
ジャンプの高さの調整編集、保存、リロード、もう一度プレイ遊びながらスライダーをドラッグ、元に戻す、結果をコピー
「なんでカクついたの?」プロファイラーを開いて推測赤いバーをクリック:落ちたフレーム、原因、あなたのコードのせいかどうか
AI エージェントとの作業コードを読んで推測するゲームをプレイし、状態とエラーを読み、何をしたかがあなたにも見える

60 fps のスプライト数:spryte draw.sprites 80万、PixiJS ParticleContainer 20万、spryte draw.sprite 10万、PixiJS Sprite 5万、Canvas 2D 5千

本来なら自分で書くはずだったもの ​

canvas のゲームは、どれも同じ配管を育てることになります。debuff はそれを小さくツリーシェイキングできるパッケージとして提供するので、払うのは import した分だけです。

  • ちゃんと動くループ。 補間付きの固定ステップシミュレーション、シード付き乱数、非表示時の一時停止、ヒットストップ、タイムスケール、動きを減らす設定への対応。
  • くっきりしたスケーリング。 fit または整数倍のスケーリング、devicePixelRatio の変化、GPU コンテキストの喪失と復帰。
  • 速い描画。 スプライト、テキスト、図形、クリッピング、ブレンドモードを 1 つのバッチ API で。1 バッチにつき最大 8 枚のテクスチャをバインドし、ホットパスではメモリを確保しません。
  • タップを取りこぼさない入力。 キーボード、ポインター、タッチ、ゲームパッドに、ステップ単位の押した・離したの判定とアクションのバインディング。
  • ちゃんと鳴るオーディオ。 Web Audio のバス、自動再生のロック解除、ゲームジャムの速さで効果音を作れる小さなパラメトリックシンセ。
  • パイプラインを保守しなくていいアセット。 マニフェストは自動生成され、スプライトアトラスは自動でパッキングされ、参照したファイルだけが出荷されます。
  • レベル。 Tiled と LDtk から読み込み、カリング付きの描画と、すり抜け床も含めたタイルの当たり判定。
  • 手触り。 トゥイーン、パーティクル、スクワッシュ&ストレッチ。

何がおかしいのか、すぐわかる ​

開発パネルのエラー表示:「your code」、ソースの行、ヒント

何かが例外を投げると、開発パネルが 誰の問題なのか を教えてくれます。

  • あなたのコード: パネルがソースの行にリンクし(エディタで開きます)、修正案を出します。
  • debuff が拒否した呼び出し: debuff が何を期待していたかをパネルが説明します。
  • debuff 自体のバグ: 記入済みのバグレポートが用意されるので、途方に暮れることはありません。

同じエラーが繰り返されてもログを埋め尽くさずに回数でまとめ、ゲームが止まったときはそのエラーが原因として示されます。原因を直して再生を押せば、止まったところからゲームが再開します。

遊びながら調整する ​

tune タブ:パラメータごとのスライダー、変更した値は琥珀色

型付きのパラメータ(runSpeed、gravity、coyote…)を宣言すると、それがライブのスライダーになります。変更した値は琥珀色になり、どの変更も元に戻せて、copy changes を押せば調整した分だけをコードにコピーできます。エージェントやテストシナリオも同じパラメータを使うので、手触りの調整を再現できます。

すべてのフレームの行き先がわかる ​

perf タブ:フレームグラフ、ヘッドルーム、落ちたフレーム

perf タブは余裕(ヘッドルーム)を表示し、各フレームを update と render の時間に分けて見せます。落ちたフレームがあなたのコードのせいなのか、外側(GC、ブラウザ、ほかのタブ)のせいなのかも教えてくれます。バーをクリックすると、そのフレームで止まります。一時停止、1 tick ずつのステップ実行、スローモーション再生もできます。state タブには、シーンのライブデータがゲームの隣に表示されます。

エージェントのために作り、主導するのはあなた ​

debuff は、エージェントに当て推量ではなく証拠を渡します。@debuffjp/mcp サーバーを使うと、Claude Code のようなエージェントが次のことをできます。

  • 開いているゲームをプレイする。 キーを押し、時間を進め、状態を読みます。すべての操作があなたのパネルに表示され、元に戻すこともできます。
  • あなたのメモを読む。「ここのジャンプがふわふわする」と書けば、エージェントはそのメモを、その瞬間のゲームの状態と一緒に受け取ります。
  • 説明付きのエラーとフレームの内訳を読む。 パネルであなたが見ているのと同じデータです。
  • 決定的なシナリオで検証する。 シナリオはスクリーンショットのベースライン付きの JSON スクリプトなので、修正を「直りました」と言うだけでなく、実際に確かめられます。

クリエイティブな判断はあなたのものです。ツールは、エージェントが提案し、あなたが決めるように作られています。

小さく出荷し、正直でいる ​

debuff build はすべてのファイルについて raw、gzip、brotli のサイズを報告し、プレイヤーがダウンロードするものに dev ツールが漏れていたら失敗します。スターターゲームの起動時の JavaScript は brotli で約 19 kB です。本番ビルドは短い「made with debuff」のカードで始まります。どのキーでもスキップでき、splash: false で消せます(スプラッシュ画面を認めていない Poki ではそうしてください。公開を参照)。

debuff が向いていないとき ​

debuff は、小さくて磨き込まれた 2D の Web ゲームのためのものです。ゲームジャム、すぐ遊べるポータル、プロトタイプなどです。3D、ビジュアルエディタ、本格的な物理エンジンが必要なら、もっと大きなエンジンのほうが合っています。debuff はそうしたエンジンとも仲よくやれます(canvas の上の ES モジュールにすぎません)が、それらのふりをするつもりはありません。

はじめる →