# 第五世代乱数調整ツールをwebアプリ化した話 この記事は[Pokémon Past Generation Advent Calendar 2025](https://adventar.org/calendars/11526)の9日目の記事となります。 こんにちは。[ニアト](https://twitter.com/21i10r29) です。ご無沙汰しております。 今年もアドベントカレンダーの季節がやってきましたね。 [昨年](https://adventar.org/calendars/10546)は業務に追われていたのと[何故か2023年が終わらなかった](https://scrapbox.io/PokemonPRNGDiscord/Pok%C3%A9mon_Past_Generation_Advent_Calendar_2023)のもあって投稿を見送っておりましたが、今年はまとまった時間が取れた&ちょうどいい記事のネタもあるため寄稿させていただくことになりました。 テーマは **第五世代乱数調整ツールのwebアプリ化** です。さっそく参りましょう。 ## はじめに この記事のタイトルをご覧になられた方の多くは次のように思われたのではないでしょうか? 「[5genSearch](https://blog.bzl-web.com/entry/2090/11/11/000000#5genSearch)や[プラスルツール](https://plusletool.hatenadiary.org/entry/20100918/PlusleSeedCalculator)、[SSS4やbwseedlist](https://rusted-coil.squares.net/tool/syokiseedsearch/sss_down.htm)などが既にあるのに、なんでわざわざWebアプリ作ったの?」 **\*\*その質問、本質を突いた良い指摘です。\*\***(GPT-5並感) ...まあ実際のところ、今回のアプリ制作理由は9割がた "**しゅみです**" の五文字で終わってしまうのですが、敢えて言うならば、 現状の課題として - 既存のツールがWindows専用[^windows]であること - ツールのインストールやランタイムのインストールなどの環境構築の手間があること - **スマホユーザーだとそもそも導入すら出来ない**[^PPRNG]こと といったものが挙げられることを踏まえ、これらの解決策となるwebアプリ化にトライしてみました!!! などというとそれっぽいですね。~~取ってつけ感も凄いですが。~~ ともあれ本題に移りましょう。 [^windows]:一応WineやBootCampなどの抜け道もあるにはあります [^PPRNG]:実は10年以上前には[PPRNG](https://x.com/pprng_app)というスマホ向け第五世代乱数調整ツールもリリースされていました。が、こちらはストアから既に削除されてしまっています。(2025年現在) ## アプリの概要 早速webアプリの紹介に移りましょう。以下のリンクからアクセスできます。 **[Pokémon BW/BW2 Initial Seed Search](https://niart120.github.io/pokemon-gen5-initseed/)** PCで開くと以下のサイトが開きます。  画面上部のタブでパネル(機能)の切り替えが可能です。詳細については後述します。 - `Search` : MTの初期seedから起動時刻を検索する - `Generation` : LCGの初期seedまたは起動時刻から出現個体の一覧を出力する - `Search(Egg)` : 親個体や希望する孵化個体の条件から起動時刻を検索する(BW限定) - `Generation(Egg)` : LCGの初期seedまたは起動時刻から孵化個体の一覧を出力する(BW限定) - `Misc` : その他雑多な機能(ID調整/MT初期seed全探索/etc) 基本的には 5genSearch を踏襲した構成を取っているため、そこまで違和感なく使えると思います。 ただ、私の環境(4K&ディスプレイスケール150%)でしか動作確認できていないため、他の環境だと表示が崩れる場合があります。 表示がおかしいな、と思ったら`Ctrl`+ホイールスクロールでブラウザの画面倍率を調整してみるとうまく映るかも。 スマホだとこんな感じ。  各入力UIをスタック配置にしています。 スクロールなどで指が忙しくなる・画面サイズの制約上出力結果が見にくい...など不便な部分もあるやもですがお許しを。~~だれかスマホ向けUIの最適解を教えて欲しい~~ ## 主な機能について ### `Profile` (共通) 各パネルの上部には共通のProfile入力フォームが配置されています。  乱数調整に必要なハードウェア/ROMの情報やそれらに紐付く関連情報の(MACアドレス/表ID/裏ID/etc)の入力に使います。ハードウェア種別・ROMバージョン・言語の情報を入力することでNazo値/VCount/Timer0などのパラメータも自動的に設定されます。 また、設定内容は自動的にlocalStorageに保存され、必要に応じて保存したプロファイルを切り替えることも出来ます。 ### `Search` パネル このパネルでは、固定・野生乱数時の起動時刻を検索する機能を提供します。  CPUまたはGPU(要:WebGPU対応ブラウザ)による検索に対応しています。詳細は後程。 :::info なお、GPUによる検索については一部のスマートフォンだと動かない場合可能性があります。 OS・ブラウザアプリのアップデートを実施したうえで再度お試しください。 ::: 検索結果は画面右側にテーブル形式で出力され、必要に応じてcsv/json/txt形式でのエクスポートも可能です(他の機能も同様)。  また、Resultsテーブル内の👁️のアイコンを押下すると各結果の詳細が表示されます。  LCG Seedまたは起動時刻を押下することで当該結果を`Generation`パネル側に反映してくれます。 (カーソルを合わせると当該Seedで出現するポケモンの個体値も表示してくれたりします) #### 検索方式について `Search` パネルでは[さき](https://xxsakixx.com/archives/54569341.html)氏や[夜綱](https://note.com/sub_827/n/naf3514955225)氏が言及している、高個体値を出力する既知のMT seedを対象として検索を行う方式を採用しています。 この手法は検索時間を圧縮できるメリットがある一方で、希望個体に対応するMT seedの事前把握をユーザー側に強いるというデメリットがあります。 ...なんだか言っていることが小難しいですね。そもそもMT seedってなんだよ、もっと楽に検索させてくれよ! ということで今回は、ツール側でテンプレート機能を実装してみました。 `Template`ボタンを押下すると専用のダイアログが出てくるので、希望する条件にチェックを入れて`適用`すれば、自動的に検索フィールドに反映してくれます。  6V、5VS0、めざ氷など、需要の高そうなものをは一通りテンプレートに突っ込んであるのでご活用ください。 ○○のテンプレないの?といったご要望があれば可能な範囲で対応します。 ### `Generation` パネル このパネルでは、指定されたLCG Seed or 起動時刻及びエンカウント設定に基づき、生成される固定・野生個体を一覧表示する機能を提供します。  本機能では以下のエンカウントに対応しています。(データソース:ポケモンの友(https://pokebook.jp/)さま) - 野生 - 草むら・洞窟 - 水上 - つり - (WIP)揺れる草むら/砂埃/泡/ポケモンの影[^ShakingGrass] - 固定 - 伝説・準伝説 - 御三家 - 化石 - 一般ポケモン(ヒヒダルマ/ウルガモス/etc) - 徘徊(ボルトロス/トルネロス) 色違いを狙う場合は`Filter`内で絞り込みも可能です。`ステータス`の欄に実数値を入力すれば失敗時のTimer0/消費数ズレの特定にも使えます。 [^ShakingGrass]:砂埃・ポケモンの影からのエンカウントについてはアイテム判定が未実装のため出力結果が整合しません。今後改修予定です。 ### `Search(Egg)`パネル :::warning 本機能はBW専用です。BW2では利用できません。 ::: このパネルでは、孵化乱数時の起動時刻を検索する機能を提供します。 親となる個体の情報に基づいて、希望個体が産まれるタマゴを受け取るための起動時刻を検索します。  #### `NPC消費を考慮する` `NPC消費を考慮する`にチェックを入れると、NPCによる不定消費を加味した結果を出力するようになります。 また、小屋外に出てから育て屋翁に話しかけるまでの猶予フレームが30F以上[^EggStable]あるものについては`安定`列にマークが付きます。 候補が複数出現する場合はマーク付きのものを優先して選ぶと良いでしょう。 [^EggStable]:育て屋横のチュリネ/モンメンが左下の角を出発してから左上の角に到達するまでが約30F #### `不明`チェック また、個体値関連の機能として`不明`チェックを実装してみました。 これは親個体の個体値が不明な場合にチェックをつけると、ツール側でそれを考慮した検索をしてくれるというものです。 例えば、`不明`にチェックがついている♂親の個体値から遺伝すると、出力結果上も当該ステータスが`?`で表示されるようになります。`Filter`による絞り込みを行う際も、`任意`にチェックが付いていないステータスについては `?`となる場合は自動的に弾いてくれます。 「メタモンの方は6Vなのは分かってるけど、もう一方の個体値が分からん…ジャッジに聞いて特定するのも面倒…」なんてときに使って見てください。 ### `Generation(Egg)` パネル :::warning 本機能はBW専用です。BW2では利用できません。 ::: このパネルでは、指定されたLCG Seed/起動時刻とエンカウント設定に基づき、生成される孵化個体を一覧表示する機能を提供します。  出力されるのが実数値ではなく個体値になっているなどの差異はありますが、機能としては`Generation`パネルとほぼ同一です。 レポート針を用いたtimer0ずれの確認や色違い個体の検索などに使ってください。 :::info 5genSearchで実装されている小屋内消費/小屋外消費の機能は本ツールではオミットしています。これは、小屋外での追加の消費操作を挟むことで手順が煩雑になることを懸念しているためです。 `NPC消費を考慮する`にチェックを入れた場合、以下の手順で乱数消費とタマゴ受け取りを行ってください; 小屋内で`Adv.`回だけ消費*する →外に出る →最速で育て屋翁に話しかける (*消費:レポートorペラップのステータス確認) ::: ### `Misc`パネル このパネルではその他雑多な機能を提供しています。  説明は割愛しますが、MT Seedの検索であったり、ID調整時の起動時刻検索(+timer0の調査)などに使えると思います。要望があれば他の機能も追加するかも。 ## 実際に使ってみよう ツールの概要は分かったけど肝心の使い方が分からん...という人向けのサンプルとして、"BWにおける6Vメタモン捕獲"の手順書を書いてみました。 ガイドのリンク:[BW 6Vメタモン乱数調整ガイド](https://github.com/niart120/pokemon-gen5-initseed/blob/main/note/bw_ditto_6V/guide.md) 他の乱数調整については気が向いたらガイドを書きます。 :::spoiler 困ったときは もし困ったらツール本体のURLと共にChatGPT/Claude/Gemini/{その他任意のLLM}に聞いてみるのも一つの手です。 **但し、生成AIによる回答結果にはハルシネーション(嘘や誤り)が含まれる可能性があることに留意してください。** プロンプト例: > ポケモン第五世代(BW/BW2)の乱数調整に関する質問です。 > BW/BW2用の乱数調整webアプリ(https://niart120.github.io/pokemon-gen5-initseed/)において{やりたい乱数調整の名称}の乱数調整を行いたいのですが、ツールの利用手順が分からず困っています。 > > 既存ツール向けの説明記事やGitHubリポジトリ(https://github.com/niart120/pokemon-gen5-initseed) の実装などを調査したうえで、当該webアプリにおける乱数調整手順をstep by stepで説明してもらえますか? ::: ## パフォーマンス かつて第五世代の乱数調整をやったことがある方はご存じかと思いますが、この世代の乱数調整はとにかく検索に時間が掛かるのが難点です。 令和最新版ツールである5genSearchでは様々な最適化のお陰で検索時間が大幅に短縮されていますが、今回のようなwebアプリの場合でも実用に耐えうるパフォーマンスを出せるのでしょうか? `Search`パネルにて検索を実行したときの処理時間をPC/スマートフォンの両方で計測してみます。 ### 検索条件 | 項目 | 値 | |:-----|:-----| | ROM | ブラック(日本版) | | 日時範囲 | `2000/01/01 00:00:00`〜`2099/12/31 23:59:59`(100年全探索)| | Timer0 | Auto (`0x0C79`〜`0x0C7A`) | | キー入力 | なし | | 目標Seed数 | 5件 | ### 計測環境 **PC** | 項目 | スペック | |:-----|:---------| | CPU | AMD Ryzen9 9950X3D / 16C32T | | GPU | NVIDIA GeForce RTX 5090 | | OS | Windows 11 | | ブラウザ | Chrome 143 | | コミットハッシュ | [`4bc2a3a`](https://github.com/niart120/pokemon-gen5-initseed/commit/4bc2a3a728f0b718ed9b284229f89eb8ee862063) | **スマートフォン** | 項目 | スペック | |:-----|:---------| | 機種 | iPhone 15 | | SoC | A16 Bionic | | OS | iOS 26.1 | | ブラウザ | Safari | | コミットハッシュ | [`4bc2a3a`](https://github.com/niart120/pokemon-gen5-initseed/commit/4bc2a3a728f0b718ed9b284229f89eb8ee862063) | ### 測定結果 信じられないくらい**爆速**で動いてくれています。  PC(GPU版)に至っては1秒もかかわらず100年分の探索を終えています。マジか。  > PC(GPU版)の処理速度 : 8,315,573,123/s ~~RTX 5090の ちからって すげー!~~ スマホ側についても、凡そ1分強で検索が完了していることを踏まえれば、実用に耐えうるパフォーマンスを発揮できていると言ってよいのではないでしょうか。 iPhone15 と同等以上のSoCを積んでいる端末[^smartphone]であればストレスなく検索が行えると思います。 [^smartphone]:スマホ用SoCのベンチマーク一覧を見る限りだとGoogle Tensor G3 / Snapdragon 8 Gen 2 あたりが近しい?有識者いたらマサカリ投げてください。 ### 余談:高速化の要因について 期待以上のパフォーマンスを得られたのはなんといってもGPU、ひいては[WebGPU](https://www.w3.org/TR/webgpu/)のお陰といってよいでしょう。 WebGPUというのは、簡単に言えばブラウザからGPUによる描画・計算能力を利用できるようにしてくれるWeb標準API[^webGPUAPI]です。 2025年になってPC/スマホの主要ブラウザで正式サポートされた[^WebGPUSupport]ことを受け、勉強も兼ねて検索機能に組み込んでみるかー、ぐらいの軽い気持ちで実装してみたのですが。。。まさかここまで効果を発揮するとは...嬉しい誤算ですね。 なお、WebGPUに関しては以下の解説記事が非常に分かりやすく纏まっているため、技術回りに興味がある方はそちらも是非ご一読ください。 > - WebGPUがついに利用可能に - WebGL以上の高速な描画と、計算処理への可能性 - ICS MEDIA @icsweb https://ics.media/entry/230426/ > - WebGPUの基本 - webgpufundamentals https://webgpufundamentals.org/webgpu/lessons/ja/webgpu-fundamentals.html [^webGPUAPI]: ブラウザからのGPUアクセスを提供するAPIとしてはwebGLもありますが、こちらはコンピュートシェーダーをサポートしていないため今回は不採用としました。 [^WebGPUSupport]: Chrome・Edge(Chromium)は2023年の時点で既にサポートされていたようですが、FireFox(Gecko)は2025年8月、iOS版Safari(WebKit)では2025年9月の iOS 26 アップデートにてようやく対応となったようです。 ## おわりに というわけで今回は第五世代乱数調整ツールをwebアプリ化してみたよ、というお話でした。 折角今年はBW15周年というのもありますし、久々に第五世代で6Vメタモン調達してみるかー、などといった方がいらっしゃれば是非ツールを使っていただけると嬉しいですね。 さて、アドベントカレンダー自体はまだまだ続きます。 引き続き色々な人の記事をお楽しみいただければ 一参加者としても幸いです。 10日目はメイユール氏による"3DS自動化のなんらか"の記事となります。[2023年のアドベントカレンダーでは3DSの自動化基盤を発表されていました](https://qiita.com/u1f992/items/09617ae326288a0df703)が、今年はさてはて...? 明日もお楽しみに! :::spoiler 余談 余力があれば技術系の話についても触れたかったのですが力尽きてしまいました。 前述のWebGPUも含めた全体的な技術スタックの話や、TypeScript・Webアプリ初挑戦の話など、語れそうなネタは山のようにあったのですが間に合わず。 ~~語れるだけの日本語力があるかと言われるとそこも苦しいところです~~ ::: spoiler 余談の余談 実は今回の開発で実装したコードの90%以上はGitHub Copilot(生成AI)に書かせていたりします[^AIRatio]。 作業フローとしてはざっくり以下のような感じ。 1. 大まかな要件をAIに伝えて設計方針を吐かせる 2. 出力された設計方針をRvし、実装のgo/no goを判断する 3. no goの場合は妥当でない点や疑問点をFBして修正させる 4. 2,3を繰り返す 5. 妥当な設計方針が立てられたらAIに実装させる 6. 出力されたソースコードをRvする/開発サーバ上でe2eの動確をする(手動・目検) 7. 問題がなければcommit/deploy 正直あんまり洗練されてないです。多分世の中の最先端を突っ走ってる人はもっと体系立てて良いやり方をしているんでしょうね。 今回のAIコーディングにおける工夫点とか改善点とかの話も書き留めておきたいなぁ。。。 ::: [^AIRatio]:リファレンス実装なども含めるのであればもう少し下がる気はします。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up