「人間に生まれる確率」制作記 人の確率を4.8兆分の1から直した話
目次(17)
作り始めた日と、最初の仕様
「人間に生まれる確率」は、このサイトに置いているブラウザゲームです。開発名は「来世ガチャ」。遊び方としくみは解説ページにまとめたので、この記事では、作る途中で何を決め、何を変え、何をやめたかを、開発の記録から書き出します。日付や数字は記録に残っている値のままです。
始まりは2026年10月13日の夜でした。記録には、22時49分に私が「私のサイトにブラウザゲームを作成したい」と言い、どのゲームかを聞かれて、仕様、設計判断、作業の指示の3つの文書を渡したとあります。実装はAIのコーディング道具であるClaude Codeが担当し、私は区切りごとに、動く画面やテストの結果を見て判定する形で進めました。ドット絵もBGMも、AIがコードで描き、コードで作曲したものです。
最初の文書で決めていたこと
- 地球上の生き物から、個体数に比例した確率で1個体として生まれる。生まれる先は選べない
- 操作は無し。開いた瞬間から誕生、生、死、再誕が流れ続ける。例外は画面タップの倍速切替と、墓碑の共有ボタンだけ
- 種の一覧は生物多様性のデータベースGBIFの目録を使い、サーバーを置かず静的ファイルだけで配る。維持費はゼロ
- 絵はドット絵。当初はベクターのシルエットの案でしたが、少ない情報量で生き物らしさが出るので、私の指定でドット絵に変えていました
- 対象は動物と原生生物。植物、菌、細菌、古細菌は外す
- 名前の付いた約200万種に加えて、「まだ名前のない一種」に生まれる枠を置く
このうち、原生生物、名前のない一種、そして「操作は無し」の3つは、作る途中で大きく変わりました。
一晩で動くところまで
骨組みと抽選の核ができたのが23時17分です。綱までの個体数の表は154項目で、10万回引いたときの出方が重みと合うかを確かめる分布テストを含めて、テストは19本から始まりました。日付が変わった0時50分には、データ、生態の設定、1日の計算、画面までがひととおり動き、1時25分にはドット絵89体がそろっています。
489MBの目録を束にまとめる
いちばん手間がかかったのはデータでした。GBIFの目録の一括ファイルは489MBあり、ダウンロードが遅いうえに途中で切れたため、通信の方式を変えて続きから取り直しました。そこから動物界だけを取り出すと、177万の分類群(うち種が161万)になります。
置き場にも制約がありました。サイトと同じ配信の仕組みは1か所あたり2万ファイルまでで、属ごとに小さなファイルを作ると数十万になります。そこで、親の分類群ごとの一覧を4,097個の束にまとめました。合計74MB、いちばん大きい束で192KBです。遊ぶ人が最初に読むのは、目次と、抽選でたどる束7つの約120KBだけで済みます。
目録の形は教科書どおりではない
作ってみて分かったのは、目録の階層が「界、門、綱、目」ときれいに並んでいないことです。魚には綱が無く、スズキ目などの目が脊索動物門のすぐ下に並びます。ヘビにはヘビ全体をまとめる節が無いので、生態の設定は27の科ごとに置きました。恐竜の科や三葉虫のような化石の分類群も、門や界のすぐ下に大量に入っています。
いま生きている個体として生まれるゲームなので、絶滅した生き物は外すと決めました。絶滅の印を20.9万件集め(この作業だけで約45分かかります)、11.7万の枝を除きました。ティラノサウルス科、ホモ・エレクトス、三葉虫、マンモスが消え、ヒトと線虫の一種のC. elegansは残ることを確かめています。
確率の数字を見直した経緯
題名を「人間に生まれる確率」に変えたのは、10月14日の20時20分です。根拠にしたのは、人口82億を動物全体の個体数9.2×10の20乗で割った、現実の値の約1,120億分の1でした。
ところが、そのあと私が「人間の確率は?」と聞いて、ゲームの中の確率を実際に測ってもらうと、人は4.8兆分の1でした。現実より43倍も出にくかったのです。原因は、個体数を手で入れていたのが綱までで、その下は種の数で割り振っていたことでした。種ごとの補正は同じ属の兄弟にしか効かず、ヒト属にはいま生きている兄弟の種がいません。ニワトリは800倍、ウシは9倍出にくくなっていました。
そこで21時05分に、人と家畜(イヌ、ネコ、ウシ、ヒツジ、ヤギ、ブタ、ニワトリ)だけは、目から種までの個体数を出典つきで入れました。これで人は1,120億分の1になり、イヌは9,184億分の1、ニワトリは353億分の1、哺乳類全体は71億分の1になりました。
続けて私は「全生き物の確率が正しいか見直して」と頼みました。綱、目、科ごとに、確率と、その根拠が手入力か種の数か、を一覧にして、ずれの大きい所から直しています。主な変更は次のとおりです。
| 直した所 | 直す前 | 直した後 |
|---|---|---|
| 人(10月14日21時05分) | 4.8兆分の1 | 1,120億分の1 |
| ナンキョクオキアミ | 種の数で割り振られ、2,000倍出にくかった | 文献から8×10の14乗匹 |
| オニハダカ属(深海の魚) | 100倍出にくかった | 文献から1.9×10の15乗匹 |
| クモ | クモ綱の47%を占めていた | 文献から2.5×10の16乗匹 |
| 土の線虫 | 寄生の科(ギョウチュウ科1.1%など)が出すぎていた | 食性ごとの個体数を、食性の分かっている科に割り振った |
| 線虫の総数 | 8×10の20乗 | 7.1×10の20乗 |
| 人(10月14日21時40分) | 1,120億分の1 | 1,011億分の1 |
線虫の総数を見直したことで、動物全体は9.23×10の20乗から8.29×10の20乗に下がり、人の確率は1,011億分の1になりました。これがいまゲームの画面に出ている値です。
一方で、根拠が見つからず種の数で割り振ったままの所も記録に残しています。たとえば昆虫の目の比率で、甲虫が34%、チョウ目が17%になっています。アリは文献の推定の6倍出すぎで、シロアリは逆に出にくいままです。出典が見つかったら入れる、という扱いにしています。
やめたこと、消したもの
原生生物
最初の文書では、ゾウリムシのように移動や捕食の行動が成り立つとして、原生生物を残すことにしていました。ところが原生生物の個体数は10の27乗以上で、動物全部の10の21乗ほどとは桁が違います。個体数どおりに引けば、ほぼ毎回原生生物になります。重みを手で抑える案もありましたが、それでは「出典のある個体数で引く」という決まりから外れます。初日の23時25分に、原生生物も外して動物界だけにすると決めました。
確率の手加減
同じとき、個体数どおりだと哺乳類も鳥も人もほとんど出ないことも分かっていました。個体数を0.5乗して差を縮めれば、哺乳類が数百回から数千回に1回は出ます。それでも圧縮はしないと決めました。記録には、どこに生まれるか分からない理不尽さが核だから、と理由を書いています。
まだ名前のない一種
0時12分の時点で、見本の20人生を通すと、線虫が17、カイアシ類が3でした。しかも線虫の未記載率97%、カイアシ類70%で「名前のない一種」を引くため、ほとんどが「○○科の、まだ名前のない一種」になり、実在の学名がほぼ出ません。0時50分の見本でも、実在の学名は20人生のうち4つでした。0時57分に私は「未命名は削除」と決め、必ず目録に載っている実在の種に生まれるようにしました。
短い人生を長引かせる案
最初の仕様には、1回の人生を2〜8分にするという目標がありました。けれど見本の人生は4〜155ターンで、1〜2日で食べられて終わるものが多く、目標に届きません。死亡率を下げる案も、短い人生だけ表示を遅くする案も、現実から離れるので取りませんでした。決め手は私の「人間になれば人生長いですよね?であれば実在のテンポでいい」という一言です。人は1ターンが半年で約140〜160ターンあり、1倍速なら7〜15分の人生になります。
線虫を消す案
公開したあと、線虫を抽選から消すかという話も出ました。調べると、線虫を外しても次はカイアシが84%になるだけで、人は146億分の1と、実質ゼロのままです。10回引いていちばん珍しい1匹を生きる案も、それでもカイアシが6割になるので見送りました。最後は、確率はそのままにして、一度生きた線虫とカイアシは回数だけ数えて飛ばす形にしています。題名の確率を正直に保てるからです。飛ばす前提で数えると、実際に生きる人生は昆虫が52%、ダニとクモが16%と幅が出ました。
「操作なし」から6つの操作へ
最初の文書では、操作は倍速のタップと共有ボタンの2つだけでした。それが作りながら次の順に増えていきました。
- 「生まれ変わる」ボタン(10月14日20時45分)。墓碑は10秒で自動的に閉じる作りでしたが、ゆっくり読んだり共有したりする時間が足りないので、ボタンを押すまで止まるようにしました
- 重ね画面をタップで進める(同じ時刻)。誕生の演出やエンドロールも時間では閉じず、タップで次へ進みます。読む速さは人によって違うためです
- 最初の範囲の選択(21時46分)。「全動物」か「哺乳類だけ」かを選びます
- BGMの切り替え(22時22分)。音源ファイルを同梱しない決まりがあるので、BGMも絵と同じくコードで作曲しています
操作が増えた引き換えに、放っておくと墓碑の画面で止まるようになり、眺めているだけで回り続ける作りではなくなりました。このことも記録に書いてあります。
範囲の選択の出発点は、私の「線虫を消して人間の確率がだいぶ上がるなら、最初に線虫の有無を選べるようにしたい」という要望でした。上がらないと分かったので、人が実際に出る範囲として「哺乳類だけ」を用意し、「飛ばすパターンと、最初に全動物パターンの2つにしよう」と決めています。
最初の画面で増えていく「いま世界で」の数字は、世界の出生と死亡を数える1in8b.lifeというサイトを見せて、こういうものをリアルタイムで入れてほしいと頼んだものです。最初は人だけの数字で作られましたが、「リアルタイムは全動物対象です」と伝えて作り直しました。動物は1秒に283兆匹生まれる計算で、そのうち人は4人です。元のサイトにある「いま何人がこのシミュレーションの中にいるか」という接続数は、サーバーが要るので入れていません。
見た目と寿命を作り直した
ドット絵と写真
ドット絵は最初の89体から、190体、223体、235体、243体と増えました。増やす途中で、次のような直しが出ています。
- 種ごとの色は色相を回して変えていましたが、一律に±40度回したらネコが緑になりました。イヌ、ウシ、ペンギンなど自然な色を保ちたい絵は±10度に絞っています
- 同じ絵を使う種が最大16万(ガ)あり、違いは色と明るさだけでした。種ごとに5通りの模様を入れ、種の多いガ、甲虫、ハエ、ハチ、巻貝は科ごとに描き分けて、1つの絵が受け持つ種を最大9万まで減らしました
- 誕生の画面に写真を出すとき、GBIFの出現記録の1枚目をそのまま使うと、ネコでは死骸の写真になりました。人が選んだ代表写真を先に探す順に変えています。サイトに広告を置く予定だったので、非営利に限るライセンスの写真は使わないことにしました
寿命を実際の値に
寿命も作り直しました。それまで人は計算の癖で平均余命より4〜7年早く死に、イヌとネコは種として一律11年で、飼い犬が飢え死にすることもありました。人は国の平均余命に、犬と猫は品種ごとの平均寿命に合わせ、飼い主がいる間は餌に困らないようにしています。
400人生で確かめると、英国の表で生きた犬の死亡年齢は平均12.1歳、中央値12.8歳で、研究の中央値は12.5歳でした。飼い猫は平均12.4歳、中央値12.8歳(研究は11.7歳)です。野良猫は7.1歳でしたが、生まれた場所で死亡率が変わる仕組みを入れたあと、街の事故の多さで5.6歳になり、実際の野良猫の2〜5年に近づきました。
公開までの速さと、まだ残っていること
公開は10月14日の18時50分、私の「一旦これで公開して」の一言でした。作り始めてから約20時間です。その夜のうちに21時20分、21時48分、22時13分、22時25分と更新を重ね、翌15日の20時33分には英語版も出しました。英語の辞書は1,340語あります。テストは19本から始まり、英語対応のときには83本になっていました。10月14日に投稿したXのポストは、5日で189,230回表示され、いいねが1,622、リポストが547、ブックマークが1,079でした。
終わっていないことも記録に残っています。
- 実機での計測(1日の表示のテンポ、16倍速での描画の重さ、長生きの種の最短の長さ)はまだです
- 絶滅の印が科や目に付いている所を枝ごと消したため、いま生きている種まで消えている所があります。例はエラヒキムシ科で、Priapulus caudatusが出ません。種ごとの印で判断する作り直しが要ります
- 昆虫の目の比率など、出典が見つからず種の数で割り振っている所が残っています
- 英語の文の校正は、まだ手を付けていません
振り返ると、個体数どおりに引くという決まりを守るほど、目録の形の癖やデータの欠け、計算の偏りが、そのまま確率のずれとして表に出てきました。題名の「約1,011億分の1」は、最初から分かっていた数字ではなく、測って、ずれを見つけて、直した結果の数字です。