約3,000種のドラえもん道具ガチャをどう作ったか(データ設計・ランダム抽選・ディープリンクSEO)
自作サイト「ドラえもん道具ガチャ」(doraemon.autoarticles.net)は、約3,000種類のひみつ道具から1つをランダムで引き当てるだけの単機能サイトだ。フレームワークもビルドも使わず、静的な index.html と2つの JavaScript(道具名の配列と説明データ)だけで動いている。この記事では、その割り切った設計判断と、手元で再現できる最小コードを説明する。
設計の要点:データを2つに分ける
道具は「名前の一覧」と「説明」を別ファイルに分けている。
main.js: 道具名だけを並べた巨大な配列tools = ["あいあいガサ", "あいあいパラソル", ...](約3,000要素)。descriptions.js: 名前をキーにした説明の辞書window.TOOL_DESC["どこでもドア"] = { desc, use }。
分ける理由は明快で、名前は網羅したいが、正確な説明を全件分は用意できないからだ。有名な道具は作品で確立した働きを正確に書き、名前から機能が読み取れる道具は簡潔に補い、説明できない道具は辞書に登録せず表示側で「準備中」にフォールバックする。捏造した設定(話数や価格など確証のないもの)を書かないための、素直な割り切りだ。
もう一つの実務的な注意として、元データには末尾に空白が混じるキー("アセッカキン " のような)がある。参照側で必ず trim() してから照合することで、データを無理に一括修正せずに済ませている。
ランダム抽選とディープリンク
ガチャの中身は「配列から一様乱数で1件選ぶ」だけだ。凝った重み付けはしていない。検索は ?q= クエリで状態を持たせ、共有・ブックマーク・再訪問でも同じ結果が開けるようにしている(SearchAction の構造化データもこの ?q= に対応させている)。この「URLに状態を載せる」小さな工夫が、道具名の長尾検索からの流入口になる。
実際に試す
依存ゼロで、道具名配列・trim照合・ランダム抽選・?q= ディープリンクの核をブラウザだけで再現する。以下を gacha.html として保存し、ブラウザで開く。
1 | |
期待される動作:
- 「ガチャを引く」を押すたびにランダムで道具が表示され、URLが
?q=どこでもドアのように書き換わる。 - 検索欄に「どこでも」と入れると部分一致でヒットする。
gacha.html?q=タケコプターを直接開くと、その道具が最初から表示される(ディープリンク)。- 説明が無い道具は「(説明は準備中)」になり、エラーにならない。
数千件でも、配列と辞書に分けて trim 照合するだけなら、この規模のフロントは軽量に保てる。実際の完成物は ドラえもん道具ガチャ で触れる。
まとめ
- データは「網羅する名前」と「正確に書ける説明」を分離し、無い説明は捏造せずフォールバックする。
- ランダム抽選は一様乱数で十分。凝る前にまず動くものを。
?q=で状態をURLに載せると、共有性と長尾SEOの入口を同時に得られる。