「スマホで遊べるように」と添えるだけで何が変わるか
遊びをつくる執筆にClaudeを使用しています。

「障害物をよけて進む1画面のゲームを、1つのHTMLで作ってください」とAIに頼む場面を考えてみます。返ってきたコードをPCで開くと、矢印キーで問題なく遊べます。ところがそのファイルをスマホに送って開くと、キーボードがないので、始めることすらできないかもしれません。 では、依頼文の末尾に「スマホで遊べるように」と添えるだけで、生成されるコードはどこまで変わるでしょうか。タッチ操作が加わるだけなのか、画面サイズへの追従や操作ボタンの大きさまで変わるのか。あるいは、PC側の操作が消えるという副作用が出るのか。ここまでは予想にすぎず、答えは実際に生成して確かめるまで分かりません。 この記事は、その確認のための実験設計書です。結果は書きません。条件のそろえ方、生成物の記録の取り方、スマホ実機での確かめ方、結果の読み方、間違えやすい点を順に示します。
比べる条件を2つに絞る
条件は2つだけにします。変える要素が増えると、何が効いたのか分からなくなるためです。
- 条件A:お題だけを渡す
- 条件B:同じお題の末尾に「スマホで遊べるように」と一文を添える
お題は、入力方法の違いが出やすいものを選びます。たとえば次の文です。
左右に動いて、上から落ちてくる障害物をよける1画面のゲームを、外部ライブラリなしの1つのHTMLファイルで作ってください。
条件Bはこの文の直後に「スマホで遊べるように。」を足すだけです。言い換えたり、理由を書き足したりしてはいけません。「一言」の効果を見る実験なので、添える言葉は一言のままにします。
そろえるものは次のとおりです。
- 使うAIとモデル、各種設定
- 毎回、履歴のない新しい会話で依頼すること
- 出力形式の指定(「HTMLファイル1つで」など)
- お題の文面。AとBで違ってよいのは添える一文だけです
生成物を取る回数と保存のしかた
AIの出力は毎回少しずつ違います。1回ずつの比較では、一言の効果なのか、たまたまの揺れなのか区別できません。そこで各条件5回、合計10本を生成します。
保存のルールは次のとおりです。
- ファイル名は A1.html〜A5.html、B1.html〜B5.html とし、生成した順に番号を振ります。
- コードに手を入れず、返ってきたまま保存します。動かなくても直さず、「動かなかった」と記録します。
- AIが説明文を付けてきた場合も、コード以外は別のメモに分けます。説明文に「スマホ対応しました」と書いてあっても、記録の根拠にはしません。確かめるのはコードと実際の動きです。
- 外部ファイルや画像を求められたら、その回は「単独で動かない」と記録します。お題の段階で「1つのHTMLで」と指定しているのは、このためです。
記録シートとチェックスクリプト
10本それぞれについて、次の項目を記録します。コードの記述を見る項目と、実機で動かして見る項目に分けています。
- コード、項目:viewportの指定、記録のしかた:あり/なし、内容
- コード、項目:入力イベントの種類、記録のしかた:キーボード、pointer、touch、mouseのどれがあるか
- コード、項目:画面サイズへの追従、記録のしかた:固定サイズか、画面幅に合わせて変わるか
- コード、項目:画面上の操作ボタン、記録のしかた:あり/なし、最小の辺の長さ(CSSピクセル)
- コード、項目:touch-actionやpreventDefaultの扱い、記録のしかた:あり/なし
- 実機、項目:始められたか、記録のしかた:はい/いいえ
- 実機、項目:最後まで遊べたか、記録のしかた:はい/一部/いいえ
- 実機、項目:気になった点、記録のしかた:一文で自由記述
コード側の項目は、次のスクリプトで機械的に拾えます。生成したHTMLをPCのブラウザで開き、開発者ツールのコンソールに貼って実行します。
(() => {
const src = document.documentElement.outerHTML;
const vp = document.querySelector('meta[name="viewport"]');
const sizes = [...document.querySelectorAll('button,[role="button"],a')]
.map(e => e.getBoundingClientRect())
.filter(r => r.width > 0 && r.height > 0)
.map(r => Math.min(r.width, r.height));
const cv = document.querySelector('canvas');
const box = cv ? cv.getBoundingClientRect() : null;
console.table({
viewport: vp ? vp.content : 'なし',
keyboard: /keydown|keyup/.test(src),
pointer: /pointerdown|pointermove/.test(src),
touch: /touchstart|touchmove|touchend/.test(src),
touchAction: /touch-action/.test(src),
preventDefault: (src.match(/preventDefault/g) || []).length,
resizeAware: /resize|innerWidth|innerHeight|\bvw\b|\bvh\b|dvh/.test(src),
canvasAttr: cv ? cv.width + 'x' + cv.height : 'なし',
canvasShown: box ? Math.round(box.width) + 'x' + Math.round(box.height) : 'なし',
minButton: sizes.length ? Math.round(Math.min(...sizes)) : '該当なし'
});
})();読み取るときの注意があります。
- この結果は「記述がある」ことを示すだけで、「正しく動く」ことは示しません。touchstart の文字列があっても、操作が効くとは限りません。最終判断は実機でします。
- canvasAttr と canvasShown が大きく違えば、CSSで拡大縮小されています。どちらもウィンドウ幅を変えて、2回測ってください。幅を変えても値が動かなければ、固定サイズと考えられます。
- minButton はHTMLのボタン類だけが対象です。canvasの内側に描かれたボタンは測れません。その場合は、実機で指で押して確かめます。
スマホ実機で確かめる手順
PCの開発者ツールには端末エミュレーションがあり、手早い確認には便利です。ただし、指で押したときの感触、ブラウザのアドレスバーによる表示領域の増減、画面の端の切り欠きといった要素は、実機でしか確かめられません。エミュレーションは下見に使い、判定は実機で行います。
実機での手順
- 10本をランダムな順に並べ替え、AとBの区別がつかないようにファイル名を伏せます。自分の期待が評価に混ざるのを防ぐためです。
- 各ファイルを、自分のスマホのブラウザで開きます。開く方法は、クラウドストレージ経由、自分宛のメール添付など、普段使う手段で構いません。
- 縦持ちで開き、画面を見て、始められるかを判定します。
- 始められたら、30秒ほど遊びます。時間は全ファイルで同じにします。
- 横持ちに回して、レイアウトが崩れないかも見ます。
- 記録シートに「始められたか」「最後まで遊べたか」「気になった点」を書き込みます。
「最後まで遊べたか」は、次のように決めておきます。
- はい:操作が一貫して効き、ゲームオーバーまで到達できた
- 一部:操作は効くが、画面外にはみ出す、ページがスクロールやズームしてしまうなど、遊びを妨げる問題があった
- いいえ:開始できない、または操作が効かない
アソバースの投稿画面で見る場合
アソバースへの作品投稿は、「入力→表示の確認→公開」の3段階です。アップロードしたコードは、sandbox付きのiframeの中で、メインサイトとは別のオリジンから配信されて動きます。ローカルのファイルとして開いたときと、同じ動きになるとは限りません。投稿を考えているなら、最終確認として、表示の確認の段階で一度は動かしてみてください。投稿にはメールアドレスの確認が必要です。まだ実験の段階なら、公開せずに下書きまでにとどめるのが安全です。
生成コードの中に localStorage でハイスコアを保存する処理があれば、メモしておきます。アップロードした作品内の localStorage と sessionStorage は、一時メモリーとして扱われる互換処理です。記録がずっと残る前提で作られたコードは、期待と違う動きになるかもしれません。
結果の読み方
10本の記録がそろったら、項目ごとにAとBを並べます。数えるのは「5本中何本で現れたか」です。
判断の目安
- Bだけで4〜5本に現れ、Aでは0〜1本の項目:一言の影響が比較的安定して出ている、と読めます。
- Bで1〜2本、Aでも1〜2本の項目:ばらつきの範囲かもしれません。一言の効果とは言い切れません。
- AとBの両方で5本中5本に現れる項目:お題の時点で、AIが標準的に入れる要素と考えられます。「スマホで」と添えなくても出るものです。
- Bで減った項目:副作用の候補です。たとえばキーボード操作の記述がBで消えていたら、「スマホ向け」と引き換えにPC向けの操作が失われた可能性があります。
各条件5本という数は少なく、ここから統計的に言える結論はありません。出てくるのは「この条件で、この傾向が見えた」という手がかりです。気になる傾向が見つかったら、お題を変えて同じ手順をもう一度行い、同じ方向になるかを見ます。
見るときの視点
差が出そうな場所は、実験の前に予想として書き留めておくと、後で見落としが減ります。たとえば次の観点です。
- 入力が、キーボードだけからタッチやpointerへ広がるか
- 画面サイズの扱いが、固定からウィンドウ幅への追従に変わるか
- 画面上の操作ボタンの有無や、大きさが変わるか
- ページ自体のスクロールやズームが、遊びの邪魔をしないよう抑えられているか
予想が外れても問題ありません。外れた箇所こそ、記録する価値があります。
間違えやすい点
添える位置や言い回しを回ごとに変える。 文末に添えた回と冒頭に置いた回が混ざると、効果の比較になりません。位置と文言は固定します。
1回の出力で結論を出す。 5本中1本で出た特徴を、一言の効果と見なすのは早計です。必ず本数で比べます。
説明文を証拠にする。 AIの文面が「対応しました」と書いていても、コードに入っているとは限りません。コードと実機で確かめます。
見た目と動作を混同する。 ボタンが大きく表示されていても、押して反応しなければ操作は成立していません。「見える」と「効く」は別々に記録します。
ブラウザや端末の差を無視する。 同じファイルでも、ブラウザやOSで挙動が変わることがあります。たとえば音は、スマホでは画面に触れるまで鳴らないことが一般的です。音が鳴らなかった場合は、コードの不備なのか、端末の仕様なのか、切り分けて記録します。
直してから評価する。 少し直せば動くコードでも、そのまま評価します。この実験で測るのは、一言で生成物がどう変わるかであり、直せば動くかどうかではありません。
次の行動
まず、お題を1つ決めて、条件Aと条件Bをそれぞれ5回ずつ生成し、ファイルに保存してください。次に、コンソール用スクリプトでコードの項目を埋め、ファイル名を伏せてスマホで30秒ずつ遊びます。差が見えた項目があれば、「タッチとキーボードの両方で」「縦画面で」のように具体的な指示を足した条件Cを作り、同じ手順で比べると、一言の限界が見えてきます。

