一枚の紙に企画を収める:画面にする前の最後の確認
遊びをつくる執筆にClaudeを使用しています。

「ブラウザゲームを作ろう」と決めて、エディタを開く直前の場面を考えてみます。頭の中には遊びの手触りがあり、メモには思いついた機能が並んでいます。ところが、コードを書き始めると「1回は何秒なのか」「失敗したら何が起こるのか」といった基本の数値や挙動を、手を止めて決める場面が何度も出てきます。決めていなかった箇所は、実装の途中で場当たり的に埋まります。 この記事は、画面にする前に企画を一枚の紙に収め、紙の各行が実装のどこに対応するかを確かめる実験の設計書です。確かめたいことは二つあります。一つは、企画が8つの枠に収まるかどうかです。収まらない箇所は、まだ決まっていない箇所です。もう一つは、紙に書いた各項目に対応する実装の置き場所があるかどうかです。置き場所のない項目は、文章としては存在しても、ゲームには何も影響しません。結果は書きません。手元の企画で行えば、答えが出る形にしてあります。
準備するものと、紙を区切る8つの枠
準備するのは次のものです。
- A4の紙1枚と、太さの決まったペン(細すぎるペンは文字を詰め込む原因になるため避けます)
- タイマー(10分に設定します)
- 対象にする企画(まだ作っていないもの、作り始めたばかりのもの。可能なら別の企画をもう1本)
- 実装用のエディタ(手順の後半で使います)
紙は縦横に線を引き、8つの枠に区切ります。各枠の文字数の目安も先に決めておきます。上限を超えた分は「あふれ」として数えるためです。
- 毎回やること:プレイヤーが繰り返す行為を、1文(40字程度)で書きます。
- 終わり方:勝ち、負け、時間切れの条件を、合わせて2文までにします。
- 制約の数値:回数、個数、速度、時間など、数値で書けるものを箇条書きで並べます。
- 一回の長さ:1回の遊びが何秒か何分かを、数字で書きます。
- 入力:使う操作(キー、タップ、ドラッグなど)を列挙します。
- 失敗したとき:失敗の直後に画面で起こることと、再開までの手順を、2文までにします。
- 最初の30秒:初めて開いた人が何を見て、何をするかを、3文までにします。
- 作らないもの:今回は作らないと決めた機能を、3つ以上書きます。
保存が必要な企画なら、9枠目に「残すもの」を任意で足します。何を、どの単位で残すかを書く枠です。アソバースでは、アップロード作品内のlocalStorageやsessionStorageは一時メモリーの互換処理として扱われます。作品ごとのクラウドセーブ(JSONで128KiBまで)はSDKを通して使います。残すものがあるなら、実装方式を決める前に、紙の上で中身と大きさを見積もっておくと判断が楽になります。
手順:書く、対応させる、突き合わせる
手順1:10分で書く
タイマーを10分にセットし、エディタやコードは見ずに8枠を埋めます。決まっていない枠は、空欄のまま残します。「たぶんこうなる」と推測で埋めると、後の読み取りができなくなります。10分で終わらなければ、そこで打ち切ります。何分で書き終えたか、または何枠が未完成かは、そのまま記録になります。
手順2:対応表を作る
紙を裏返すか、別の紙に、次の形で対応表を作ります。左の2列は紙の内容、右の2列は実装の置き場所と確認方法です。
- 3 制約の数値、紙に書いたこと:失敗は3回まで、実装での対応先:残り回数を持つ変数と、0で終了する分岐、確認する方法:意図的に3回失敗して終了画面が出るか見る
- 4 一回の長さ、紙に書いたこと:1回30秒、実装での対応先:制限時間の定数と、残り時間を減らす処理、確認する方法:開始から終了までを計る
- 5 入力、紙に書いたこと:左右キーとドラッグ、実装での対応先:キー入力とポインタ入力のイベント処理、確認する方法:それぞれ単独で操作して同じ結果になるか見る
- 6 失敗したとき、紙に書いたこと:1秒後に同じ位置から再開、実装での対応先:再開用の状態の初期化処理、確認する方法:失敗から再開までの流れを3回繰り返す
この表の右端が書けない行が出てきます。書けない行は「実装先なし」と記入して数えます。紙には書いてあるのに、コードのどこにも居場所がない行です。
手順3:数値を突き合わせる
実装が一部でもできたら、紙の数値と、コードの定数を並べて比べます。次のHTMLは、保存してブラウザで開くだけで動く最小構成です。PAPERに紙の数値、GAMEに実装の定数を写し、差分を表示します。値は説明用の例なので、自分の企画の数値に置き換えます。
<!doctype html>
<meta charset="utf-8">
<pre id="out"></pre>
<script>
// 紙の枠3・4の数値(例。自分の企画の数値に置き換えます)
const PAPER = { roundSeconds: 30, lives: 3, goal: 5 };
// 実装側の定数(実際のコードの値を写します)
const GAME = { roundSeconds: 30, lives: 3, goal: 6 };
const lines = [];
let diff = 0;
for (const key of Object.keys(PAPER)) {
const same = PAPER[key] === GAME[key];
if (!same) diff++;
lines.push((same ? "一致 " : "差分 ") + key +
" 紙=" + PAPER[key] + " 実装=" + GAME[key]);
}
for (const key of Object.keys(GAME)) {
if (!(key in PAPER)) {
diff++;
lines.push("紙になし " + key + "=" + GAME[key]);
}
}
lines.push("差分の数: " + diff);
document.getElementById("out").textContent = lines.join("\n");
</script>例ではgoalの値だけをあえて変えてあり、差分がどう表示されるかを見るための設定です。「紙になし」と出る行は、実装には数値があるのに紙に書かれていないものです。調整のために後から足した値が、ここに現れやすくなります。
公式作品で枠埋めの練習をする
自分の企画の前に、既存のゲームを紙に起こす練習をしておくと、枠の粒度がつかめます。アソバースの公式作品のうち、数値が確認できる2本を題材にします。以下は、案内で確認できる範囲だけで埋めた枠です。設計から読み取れることとして扱い、作者の意図とは断定しません。
紙ひこうき郵便
- 毎回やること:風に流されながら手紙を集め、郵便受けへ向かう。
- 終わり方:最後の6秒で赤い郵便受けへ向かう。風船にぶつかると紙が傷み、3回で終了する。
- 制約の数値:海辺は36秒で5通、丘は40秒で8通、山は44秒で10通。
- 一回の長さ:ルートにより36〜44秒。
- 入力:左右キー、ドラッグ、矢印ボタン。
時計じかけの台所
- 制約の数値:本番は1皿28秒、配膳6秒、ミスは3回まで。見習いは時間制限なし。
- 毎回やること:材料をレシピ順に入れ、火にかけ、針が緑の範囲に来たら止めて配膳する。
- 6つのレシピがあり、料理ごとに100点で評価される。
ここで注目したいのは、数値の枠がどちらも具体的に埋まる点と、紙に書けない部分が残る点です。「最初の30秒」「失敗したとき」「作らないもの」の枠は、確認済みの範囲では埋められません。この部分は、作品を実際に開いて確かめます。開いたうえで、自分の言葉で枠を埋めてみてください。8枠が埋まるかどうかは、読者自身が確かめる実験の一部です。
記録の取り方と、結果の読み方
記録する項目は、次のとおりです。単位と回数も決めておきます。
- 書き終えるまでの時間(分。10分で打ち切った場合は「未了」と記入)
- 各枠の文字数と、上限を超えた枠の数(あふれ)
- 空欄の枠の数
- 対応表で「実装先なし」と記入した行の数
- 実装後の突き合わせで出た差分の数(「紙になし」を含む)
回数は、同じ企画で2回(実装前と、実装後に書き直した紙)、できれば別の企画でも1回ずつ行います。1本だけでは偶然との区別がつかないためです。
結果は、次のように読みます。
- 空欄が多い場合、その枠が未決の箇所です。実装に入る前に、そこだけ先に決めます。
- あふれが出た場合、1枠に複数の話が混ざっています。1つの遊びに2つの目的が入っていないか見直し、必要なら分けます。
- 「実装先なし」の行が多い場合、文章として書いただけで、挙動に落ちていません。その行を実装の作業項目に書き換えるか、紙から削ります。
- 実装後の差分が多い場合、紙の数値に根拠がなかった可能性があります。調整が必要な数値は、「30秒」と1点で書かず、「25〜35秒」のように幅で書いておくと、差分の意味が読み取りやすくなります。
- 「紙になし」が多い場合、紙に書かないまま足した要素が多いということです。8枠の外に出た要素は、企画の外側に広がり始めている目印です。
誤りやすい点も挙げておきます。
- 文字を小さくして詰め込むと、あふれが見えなくなります。ペンの太さと文字数の上限を、先に守ります。
- 実装を見ながら書くと、紙が実装の写しになり、突き合わせの意味が失われます。手順1ではコードを開きません。
- 「楽しい」「気持ちいい」のような抽象語で枠を埋めても、対応先は書けません。行為や数値に言い換えます。
- 数値を「後で決める」と書くと、空欄と同じ扱いになります。幅でもよいので、いまの仮の値を書きます。
- 実装後に紙を更新せず捨てると、2回目の比較ができません。1回目の紙は、書き直した紙と並べて残します。
次の行動
まず手元の企画を1本選び、10分で8枠を埋めて、空欄の数を数えてください。次に、実装を始める前に対応表の「実装先なし」の行を確認します。ゲームを投稿する段階では、紙の「入力」と「最初の30秒」が、遊び方の説明(任意の作者申告)を書くときの素材になります。投稿画面の「紹介文と遊び方を作成」で作られる文章は下書きで、「この文章を使う」を押した場合だけ反映されます。反映する前に、紙の内容と合っているか読み比べておくと、説明のずれに気づけます。

