すべての製品にブラウザで動くデモを。そしてそれを正直に保つ四段の梯子
11 製品、11 のデモ。居心地の悪い部分はこうです。そのうち 2 つは製品自身のソースを動かしていて、どの 2 つかを言うことこそが要点です。
技術ノート · · 読了 7 分
このカタログのどの製品にも、インストールもアカウントもなしにこのブラウザで動かせるものがあります。これはこのサイトで最も強い一文で、同時に誰にも気づかれずに真でなくなる可能性が最も高い一文でもあります。製品を追加するのは午後いっぱいで済みますが、そのデモを作るのはそうではないからです。だからこれは誰かが手で守っている文ではありません。テストが製品を数え、作られたデモを数え、デモのない製品が来たらビルドを落とします。直近の 3 製品が着地した週には、通る前に 3 回落ちました。
難しかったのは作ることではありませんでした。ラベルを付けることでした。
「プレイ可能」という言葉は二つの別の主張を背負っていた
最初のラベルは、プレイ可能・インタラクティブなプロトタイプ・ガイド付きデモでした。これは操作性の尺度のように見えますし、実際そうです。だからこそ間違っていました。訪問者が本当に尋ねているのは「これはクリックできるのか」ではありません。「このうちのどれかは本物なのか」です。プレイ可能は、製品自身のソースを動かすデモと、製品の出荷済み音声を再生するデモの両方にかぶさっていました。この二つはまったく同じ主張ではありません。
今は四段あり、どのデモも自分がどの段に立っているかを述べます。
- 製品そのもののコード — 製品自身のソースを無改変で取り込み、その複製の SHA-256 を隣に記録しています。
- 製品そのものの素材 — 製品自身の出荷済み素材。録音、スプライト、コンテンツファイルが、ここで書いたループを動かします。
- インタラクティブな再現 — ここで作り直した仕組み。製品に実際のコンテンツがある箇所ではそれを使います。
- ガイド付きデモ — 案内です。何も計算していませんし、そう書いてあります。
「製品そのもののコード」に意味があるのは、ひとつ隣の製品で「ガイド付きデモ」が正直に使われているからです。今日、最上段に立つデモは 2 つ。この数は文に書くのではなくデモのカタログから導いています。ここにある他のすべての数と同じ理由です。
ハッシュが実際に証明すること
最上段のデモは、製品のソースを無改変でこのリポジトリに取り込み、そのハッシュを記録します。テストがビルドごとにハッシュを再計算します。誰かがデモを携帯で良く見せるために取り込んだ複製を編集すれば、ビルドは落ちます。まさにそのために作られた防御です。
9 月 30 日、ZUPI は新しいゲームを App Store に出しました。別のゲームです。Pulse Core の上に構える Pulse Shield、装甲板をまとった脅威、5 レベルごとの Warden。ここに取り込まれていたエンジンのゲームは前作でした — 傘の下の赤い風船です。そしてハッシュ検査はその間、すべてのビルドで通り続けました。複製は、それが来たリポジトリの忠実な複製であり続けていたからです。
ハッシュは、複製がそれの来たリポジトリに忠実であることを証明します。そのリポジトリがまだ製品であることは証明できません。
3 日間、このサイトは「iOS と Android のビルドが使っているのと同じエンジン」という一文の下で別のゲームを動かしていました。壊れてはいませんでした。すべての検査は緑でした。取り込んだエンジンは削除され、ZUPI のデモはストアの掲載情報から書かれ、そうラベルされたインタラクティブな再現になりました。より弱い主張で、真の主張です。
最上段より面白い段
Forgotten Town は Flutter と Flame のゲームです。そのビルドは、このサイトが受け入れる重さでウェブページに入りません。だからマージのループはブラウザ用に書いています。そのループが扱うものはすべてゲームのものです。盤、連鎖、スプライト、そして最初の注文 — 求める品物と支払う硬貨まで — は打ち直すのではなく、出荷ビルドが読み込むコンテンツファイルから読んでいます。
Pivumo のデモはアプリ自身の音声ファイル、出荷済みのものを再生します。Swarm Kingdoms のデモは、10 言語のうちどれを選んでもゲーム自身の文字列を話し、ゲーム自身のローカライズ関数とまったく同じ形で英語にフォールバックします。ゲームが英語を出す場所で生のキーを表示するデモは、製品にはないバグを見せてしまうからです。このウェブサイト用に書いた翻訳は、製品自身の言葉より製品について劣った主張になります。
デプロイ前にボットが全部プレイする
黙って完走しなくなったデモは、デモがないより悪いものです。だからどのデモもデプロイ前に実際のブラウザで走らせます。起動し、操作し、結果に到達し、報告する。複数の言語で走ります。デモは一つの言語だけで壊れることがあるからです。
このボットは自分について 2 回間違え、2 回とも直すべきはハーネスの側でした。一度はプレイせずにページをスクロールしました。押したキーがフォーカスされたキャンバスに届いていなかったからです。一度は勝つべきゲームの全ラウンドを落としました。同じルールのヘッドレス版が理由を示しました。画面を見ていなかったのです。負けを不安定なテストとして片付けるのは安い手で、プレイできる訪問者の代役にプレイできないボットを残すことになります。
これにかかる費用
11 のデモは、製品を追加することにかかる本物の税金で、意図して払っています。代わりになるのはスクリーンショットのページと一つの主張です。開けられないソフトウェアについて 11 の主張を信じてほしいと見知らぬ人に頼むスタジオは、その一つ一つを別々に信じてもらわなければなりません。デモは、信じてもらう必要のない唯一の論拠です。