FOR CREATORS
ChatGPTやClaudeで、ゲームができた。
次は、遊んでもらう場所です。
HTMLを1つ送るだけ。サーバーの準備は要らず、審査のあと公開されます。投稿も遊ぶのも無料です。投稿にはログインが必要ですが、遊ぶだけなら要りません。遊んだ人が10人・50人・100人…になると、通知が届きます。
AIにゲームを作らせるChatGPT・Claude・Claude Codeに、下の指示文をそのまま貼るだけ
HTMLを1つ投稿するブラウザで動くHTMLを1つ。ファイルを選ぶか、コードを貼り付ける
審査後に公開、フィードに並ぶ知らない人がスワイプで遊びます
指示文のコピーから、AIでの生成・修正、投稿、フィード公開まで。実際の画面の実録でたどるチュートリアルです。
index.htmlと素材)をzipにして投稿することもできます。投稿画面が1つのHTMLにまとめ、ゲームはzipの中のファイルを通信せずに読みます。<iframe sandbox="allow-scripts">(opaque origin)と厳格なCSPの下で動きます。外への通信(fetch など)/ eval / document.cookie は実行時に無効です(zipのゲームが、zipの中のファイルを読む fetch は動きます)。localStorageはメモリ上だけの実装に差し替わり、リロードのたびに中身が空になります。ハイスコアなどの保存には使えません。外部リンクや画面遷移(window.open / location)もブロックされます。遷移はゲーム内の画面切り替えで表現してください。
parent.postMessage({ type: 'gameOver', score }, '*') を呼び出してください。スコアがあれば score に数値を入れ、スコアが無ければ score を付けずに送ります(スコアが無ければ、ランキングの無いリザルトになります)。この呼び出しはリザルト画面へ移る合図も兼ねています。PUNIPOは受け取った直後から画面を監視し、動きが止まった時点(最長1.5秒)でリザルトを重ねます。爆発や崩壊などの終了演出を見せたい場合は、演出を見せ切ってから呼び出してください。呼び出したあとは、背景のアニメーションや文字の点滅も含めて描画を止めてください。動き続けていると静止と判定できず、その1.5秒がそのまま待ち時間になります。呼び出さなくてよいのは、終わりの無いゲーム(ずっと遊べるシミュレーターなど)だけです。その場合リザルトには移らず、プレイヤーがスワイプで次へ移るまで動き続けます。再生回数はどちらでも数えられます。
上の技術要件をまとめた指示文(プロンプト)です。AIチャットにそのまま貼り付けてゲームを生成させてください。
HTML5のミニゲームを1つ作ってください。以下の条件をすべて満たしてください。
- 1ファイルで完結するHTMLにすること。CSSとJavaScriptは同じファイルの中に書き、外部ファイルを読み込まないこと
- 完成したHTMLファイルは1MB以内に収めること
- 画面サイズを固定pxや固定のアスペクト比で決め打ちにせず、実際の画面の縦横比に追従させること(縦長・横長のどちらでも黒帯や見切れが出ないようにする)。縦長の 横4:縦5(例: 横800×縦1000)で全部が画面に収まるように作り、縦がもっと長い画面(スマホ)では余った縦に広がるようにすること
- スマホで指だけで遊べるようにすること(タップやスワイプで操作し、キーボードだけの操作にしないこと)
- fetch・XMLHttpRequest・evalなど、外部通信やeval系の機能は使わないこと(実行環境で無効化されます)
- localStorageは実行環境ではメモリ上だけの実装に差し替えられ、リロードのたびに中身が空になること。ハイスコアやセーブデータの保存には使わないこと
- 外部リンクや画面遷移(window.open・location での遷移)は使わないこと。フレームの外へ出る遷移はブロックされます。参考ページを見せたいときも含め、すべてゲーム内の画面切り替えで完結させること
- 終わりがあるゲーム(ゲームオーバー・クリア・時間切れなど)なら、ゲームが終わったら必ず parent.postMessage({ type: 'gameOver', score }, '*') を呼び出すこと。スコアがあれば score に数値のスコアを入れ、スコアが無ければ score を付けずに呼ぶこと。この呼び出しの直後にリザルト画面が重なるので、ゲームオーバーの演出がある場合は演出が終わってから呼ぶこと。呼んだあとは背景のアニメーションや文字の点滅も含めて描画を止めること(動き続けているとリザルトが出るのが遅れる)。終わりの無いゲーム(ずっと遊べるシミュレーターなど)なら呼び出さないこと。呼び出さなければリザルト画面には移らず、プレイヤーがスワイプで次へ移るまで動き続ける
完成したら https://punipo.com/create から投稿してください。 fetchで外のサイトからデータを取りに行こうとする(CSPにより実行時に通信できない。データはHTMLの中に書くか、zipに入れる)。game.js・style.css・画像)を読んでいる。ファイルが分かれているなら、フォルダごとzipにして送る。window.open / location は遷移がブロックされる。ゲーム内の画面切り替えで表現する)。gameOver)を入れていないため、リザルトが表示されない。準備ができたら投稿ページからゲームを送信してください。 よくある疑問はよくある質問にまとめています。 他の投稿先と比べたい人向けに、7サイトの比較記事(Zenn)も書きました。