マガジン

ZIPを投稿すると、何が確かめられるのか:パス・リンク・暗号化・サイズを読み解く

遊びを見つける

執筆にClaudeを使用しています。

元のゲーム模型と紹介カードの展示台を鎖でつなぎ、URL投稿を表した写真風イメージ。
記事のテーマをもとに制作したAI生成イラスト。

ゲームのフォルダをZIPにまとめ、アップロード画面に置く場面を考えてみます。ボタンを押してから表示の確認に進むまでの短い間に、サーバーの内側では何かが調べられているはずです。この記事の問いは、その中身がどこまで分かっているかです。 先に断っておくと、検証にかかる秒数や、検査の順序、個々の検査の実装は、現在の案内では確認できません。そのため題名から「10秒間」は外しました。代わりに、確認済みの事実だけから「設計から読み取れること」を引き出します。確認できない部分は、読者が自分で確かめる手順にします。 扱う観点は、ZIPの検証でよく話題になる4つです。パス(ファイルの場所を表す文字列)、リンク(ショートカットのような参照)、暗号化(パスワード付きZIP)、サイズ(容量と個数)です。このうち上限値まで確認できているのはサイズだけで、パスは入口と書き方のルールが分かっています。リンクと暗号化は、案内に直接の記述がありません。

この記事の目次
  1. 確認できていることと、いないことを並べる
  2. パス:入口は「直下の index.html」
  3. リンク:ZIPの中の参照と、sandboxの外側
  4. 暗号化:パスワード付きZIPは読めるのか
  5. サイズ:4つの上限が別々にある理由
  6. 自分で行う事前点検の手順
  7. 次の行動

確認できていることと、いないことを並べる

最初に整理します。確認済みの事項は、次のとおりです。

  • パス、確認済み:直下の index.html が入口。素材は相対パスで指定、現在の案内で確認すること:不正な形のパスを見つけたときの扱い
  • リンク、確認済み:ゲームは sandbox 付き iframe で、メインサイトと別のオリジンから配信、現在の案内で確認すること:ZIP内のショートカット類の扱い
  • 暗号化、確認済み:記述なし、現在の案内で確認すること:パスワード付きZIPの扱い
  • サイズ、確認済み:20MiB以内、展開後合計100MiB・1,000ファイル以内、1ファイル30MiB以内、現在の案内で確認すること:超えたときの表示の文言

右の列を「検査していない」と読むのは誤りです。「案内に書かれていないので、断定できない」というだけです。この表を手元に置いて、以降を読み進めてください。

パス:入口は「直下の index.html」

パスは、ZIPの中の各ファイルに付いた「フォルダ名/ファイル名」という文字列です。確認済みなのは、入口が直下の index.html であること、素材は相対パスで参照することの2点です。

ここからは、つまずきやすい点が3つ見えます。

  • フォルダごと圧縮した場合:フォルダを右クリックで圧縮すると、中身が「mygame/index.html」のように1段深くなることがあります。直下に index.html がない状態です。
  • 絶対パスで書いた場合:「/images/a.png」のように先頭にスラッシュを付けると、配信先のルートを指します。ローカルで動いていても、公開後に画像が出ない原因になりえます。「C:\」で始まる書き方は、公開先では当然使えません。
  • 大文字小文字が違う場合:手元の環境では区別されなくても、公開先では「Logo.png」と「logo.png」が別物として扱われることがあります。これは一般的な注意点で、アソバース固有の仕様ではありません。

「../」のように親のフォルダへさかのぼる書き方も、ZIPの検証では古くから警戒される形です。ただし、アソバースがそれをどう扱うかは確認できません。作る側は、ZIPの中で完結する相対パスだけを使えば、この論点に触れずに済みます。

リンク:ZIPの中の参照と、sandboxの外側

「リンク」には2つの意味があります。ZIPの中に入りうるシンボリックリンク(別の場所を指すショートカット)と、ゲームが外へ張る参照(外部URLの読み込みなど)です。

前者について、案内に記述はありません。素材を相対パスで指す設計である以上、ショートカットに頼らず実体のファイルを入れておくのが安全です。作る側が避けておけば、検査の有無に左右されません。

後者について確認できるのは、ゲームが sandbox 付き iframe で実行され、アップロードしたコードがメインサイトと別のオリジンから配信されることです。ここから読み取れるのは、検査を通った後も、ゲームの実行はサイトの本体から切り離された箱の中で行われるということです。検査と実行環境の隔離という二段構えの設計に見えます。ただし、箱の中で何が許可され何が禁じられるかの細目は、確認済み事項にありません。

外部の配信サービスから画像やスクリプトを読み込むゲームは、そのまま動くかどうか分かりません。この点は、後述する「表示の確認」の段階で実際に試すのが確実です。

暗号化:パスワード付きZIPは読めるのか

パスワード付きのZIPは、パスワードがなければ中のファイル名の一覧や内容を読み出せません。検査はファイルの名前、大きさ、個数を調べる作業なので、中身が読めない状態では成立しにくいと考えられます。

アソバースの投稿は「入力→表示の確認→公開」の3段階で、確認済みの流れの中にパスワードを入力する段階はありません。そこで、パスワードなしのZIPを作るのが無難だと読み取れます。パスワード付きの扱い自体は案内に記述がないため、断定できません。

「暗号化」には、もう1つの読み方があります。ゲームにクラウドセーブを持たせる場合、ゲームには Firebase の UID・認証トークン・メールアドレスを渡してはならないとされています。SDK が作品専用のプレイヤーIDを用意する設計は、「ゲーム側に本名やログイン情報を持たせない」という方向の工夫と読めます。これは暗号化そのものではありませんが、情報を守る仕組みとして一緒に押さえておく価値があります。

サイズ:4つの上限が別々にある理由

サイズの上限は、確認済みの数字で語れる唯一の観点です。4つの上限を並べます。

  • ZIP自体:20MiB以内
  • 展開後の合計:100MiB以内
  • ファイル数:1,000以内
  • 1ファイル:30MiB以内

なぜ4つに分かれているのかは、設計から読み取れます。ZIPは圧縮ファイルなので、20MiBに収まっていても、展開すると大きく膨らむことがあります。テキストはよく縮み、画像や音声は元から圧縮された形式が多くて縮みにくい、というのが一般的な傾向です。そのため、圧縮後の大きさだけでは展開後の負荷を測れません。展開後の合計と個数を別に縛ることで、その差を埋めていると読めます。1ファイルごとの上限は、1つの巨大な素材を防ぐ役割に見えます。

アカウント単位の上限もあります。1人あたりUTCの1日10回、アカウントごとに100アップロードまで、合計1GiBまでです。試行錯誤で何度も上げ直す人は、この回数を使い切らないよう注意してください。

1MiBは1,048,576バイトで、一般に目にする「MB」と少しずれます。OSの表示が「MB」の場合は、余裕を見て判断してください。macOSで圧縮したZIPには「__MACOSX」フォルダや隠しファイルが混ざることがあり、これも個数と容量に数えられる可能性があります。

自分で行う事前点検の手順

検証の中身を想像するより、投稿前に自分で点検するほうが確実です。次の順に進めてください。

  1. ZIPの大きさを確認します。20MiBを超えていれば、先に素材を軽くします。
  2. 元のフォルダの合計サイズと、隠しファイルを含むファイル数を確認します。100MiBと1,000個のどちらにも、余裕を見ておきます。
  3. 最も大きいファイルを探します。30MiBを超えていないか確認します。
  4. ZIPの一覧を開き、index.html が最上位に見えるか確かめます。「フォルダ名/」の下に入っていたら、作り直します。
  5. HTML・CSS・JavaScript の中で、「/」始まりのパス、「../」、「C:\」、外部URLを検索します。
  6. パスワードをかけていないこと、サーバー用コード・サービスワーカー・SharedArrayBuffer を使うマルチスレッドを含まないことを確認します。
  7. アップロードしたら、「表示の確認」で実際に遊びます。画像・音・保存の動きまで、一通り操作してください。

所要時間が気になる場合は、押してから表示の確認が出るまでをストップウォッチで測ります。ネットワークや混み具合で変わるので、3回以上測って最短と最長を並べて記録します。1回の値で「遅い」と決めないでください。これは自分の環境の傾向を知るための記録で、サーバー内部の処理時間ではありません。

結果の読み方は次のとおりです。

  • 上限のどれかに近い場合は、余裕のある別の素材形式に替えるか、素材を減らします。
  • 表示の確認で画像が出ない場合は、まずパスの書き方と大文字小文字を疑います。
  • 途中で止まる場合は、画面の文言を控えておき、現在の案内と照らし合わせます。

次の行動

まず手元のゲームで、上の7つの点検のうち1〜4を試してみてください。ZIPの大きさ、展開後の合計、ファイル数、最大ファイルの4つの数字を書き出すだけで、上限までの余裕が分かります。リンクや暗号化の扱いのように、この記事で「現在の案内で確認する」とした部分は、投稿画面の案内を開いて読み合わせておくと安心です。