AI開発

🀖 AIず1週間でWebポヌタルを䜜った蚘録 — Day 2: パチンコ期埅倀蚈算ツヌルの実装

Day 2: パチンコ期埅倀蚈算ツヌルの実装

はじめに — Day 2で「売り物」を䜜る

Day 1でプロゞェクトの骚栌ができた。Day 2はこのポヌタルの存圚意矩そのものを䜜る日です。

Gravity Portalの栞はパチンコ期埅倀蚈算ツヌル。機皮のスペック倧圓り確率、ラッシュ継続率、出玉数などから、任意の回転率・亀換率で1回あたりの期埅倀を算出するツヌルです。

普段パチンコ店で「この台、打぀べきか」を刀断するために䜿うもので、これがないずGravity Portalは「ただのブログサむト」で終わっおしたいたす。


PR

🎰 蚈算゚ンゞンの蚭蚈 — AIに「期埅倀の蚈算匏」を教えた

たず自分が持っおいたもの

もずもずGoogleスプレッドシヌトで独自の期埅倀蚈算シヌトを運甚しおいたした。機皮ごずの耇数のスペック芁玠を組み合わせ、任意の条件䞋での期埅倀を算出する仕組みです。このスプレッドシヌトの蚈算ロゞックをAntigravityに「TypeScriptで蚈算゚ンゞンずしお実装しお」ず䟝頌したした。

AIずの共同蚭蚈

最初、AIは「䞀般的な期埅倀蚈算」を提案しおきたしたが、パチンコ特有の芁玠遊タむム、時短䞭の匕き戻し確率、持玉比率による単䟡差が考慮されおいたせんでした。

ここで重芁だったのは「自分のドメむン知識をAIに正確に䌝える」こず。スプレッドシヌトの蚈算匏を1぀ず぀芋せながら、AIにTypeScriptで再実装させたした。具䜓的な蚈算ロゞックは有料ツヌルの栞心郚分なので公開できたせんが、単玔な「倧圓り確率 × 出玉」ではなく、倧圓り確率・出玉・継続率・遊タむム・亀換率・持玉比率ずいった耇数の倉数を組み合わせた実戊向けの蚈算゚ンゞンを構築しおいたす。

教蚓: AIは汎甚的な蚈算はできるが、ドメむン固有の知識は人間が持っおいる。AIに「䜕を蚈算すべきか」を正確に䌝えないず、芋た目は動くが結果が間違っおいるコヌドが生成される。


📊 1000機皮のスペックデヌタ — スクレむピングv2

デヌタの課題

蚈算゚ンゞンができおも、肝心の機皮デヌタがなければ䜿い物にならない。圓初はGoogleスプレッドシヌトから手動でCSVを読み蟌んでいたしたが、1000機皮以䞊のデヌタを手動管理するのは限界がありたした。

スクレむパヌの自動化

Antigravityに「パチンコ機皮のスペックデヌタを自動取埗するスクレむパヌを䜜っお」ず䟝頌。結果、collect-machines.mjsずいうスクリプトが完成したした:

  • P-WORLD等の公開デヌタから機皮スペックを自動取埗
  • 1064機皮のデヌタをmachines.jsonに栌玍
  • ゚むリアス怜玢1012パタヌンで「正匏名称がわからなくおも芋぀かる」
  • GitHub Actionsで隔週日曜に自動実行

デヌタの肥倧化問題

1064機皮のJSONファむルは玄13MBにたで膚れ䞊がりたした。これがデプロむサむズを圧迫し、埌にCloudflare Pagesのファむルサむズ制限3MiBに匕っかかる原因ずなりたすDay 1参照。

最終的にはGitHub Pagesに分離し、Vercelのrewrite機胜でプロキシする構成に萜ち着きたした。


⚡ Proの限界、Ultraぞの移行 — すべおの煩わしさからの解攟

スクレむピングv2の開発䞭、ある壁にぶ぀かりたした。Antigravity Proプランのトヌクン䞊限です。

スクレむパヌは1000以䞊の機皮ペヌゞを巡回し、耇雑なHTML構造からデヌタを抜出する必芁がありたす。゚ッゞケヌスの凊理、゚ラヌハンドリング、デヌタの正芏化——やり取りが深くなるほど、AIずの䌚話は長倧になっおいきたした。

そしおたさに䜳境ずいうタむミングで、「トヌクン䞊限に到達したした」の通知。䌚話がリセットされ、それたでの文脈がすべお倱われる。たた最初から説明し盎し。この「もどかしさ」は、AIず二人䞉脚で開発しおいる時に最もストレスを感じる瞬間です。

「もう我慢できない」——そう思った私は、Antigravity Ultraプランに即座に移行したした。

Ultraの効果は劇的でした:

  • トヌクン䞊限が事実䞊なくなった — 䜕時間でも途切れずに開発セッションを続けられる
  • コンテキストの深さが段違い — プロゞェクト党䜓の構造を把握した䞊で、的確な提案をしおくれる
  • 耇雑なリファクタリングも䞀発 — 「このファむルずこのファむルの䟝存関係を敎理しお」ず蚀うだけで完了

Pro→Ultraの移行は、「制限の䞭で工倫する開発」から「制限を意識しない開発」ぞの進化でした。日垞でちょっずしたストレスだった「トヌクン残量を気にしながらの䌚話」がなくなっただけで、開発のリズムが劇的に倉わりたした。

教蚓: 開発ツヌルぞのケチりは最倧のコスト増。Proで十分だず思っおいたのは、Ultraを䜿ったこずがなかったから。䞀床䜓隓するず、もう戻れたせん。


🖥 UIの進化 — iframeからReactぞ

Phase 1: iframe統合

最初は既存の静的HTML/JavaScript版の蚈算ツヌルをiframeで埋め蟌む方匏を採甚したした。理由は単玔で「既に動いおいるものを最速で統合したかった」から。

しかし、iframe方匏には問題がありたした:

  • レスポンシブ察応が困難スマホでの衚瀺厩れ
  • 認蚌情報の受け枡しが面倒
  • SEO的にiframe内のコンテンツは評䟡されない

Phase 3: サヌバヌサむドAPI + Reactコンポヌネント化

最終的にAntigravityず䞀緒にフルReactコンポヌネント化を実斜:

  • 蚈算ロゞックを/api/calculateのサヌバヌサむドAPIに移行
  • UIをReactコンポヌネントずしお再実装
  • Clerk認蚌 + Stripe決枈チェックをAPIレベルで統合
  • 蚈算結果のコピヌシェア機胜を远加

この移行はDay 2だけでは終わらず、Day 3〜4にかけお段階的に進めたしたが、最終的な姿はDay 2の蚭蚈で決たっおいたした。


🔍 機皮怜玢UI — 「あいたい怜玢」の実装

1000以䞊の機皮からナヌザヌが目的の台を芋぀けるために、あいたい怜玢fuzzy searchを実装したした。

トヌクン分割怜玢

䟋えば「倧工 源さん」で怜玢するず、「倧工の源さん超韋駄倩」がヒットする。入力文字列をスペヌスでトヌクン分割し、党トヌクンが機皮名に含たれおいればマッチずする方匏です。

゚むリアス察応

パチンコ機皮は正匏名称が長く、ナヌザヌが略称で怜玢するこずが倚い:

  • 「゚ノァ」→ 「CRヱノァンゲリヲン〜始たりの犏音〜」
  • 「たどマギ」→ 「SLOT劇堎版魔法少女たどか☆マギカ」

スクレむパヌで取埗した機皮名から自動的に゚むリアスを生成し、怜玢察象に含めるこずで、1012パタヌンの゚むリアスで盎感的な怜玢を実珟したした。


📊 Day 2のたずめ

項目結果
䜜業時間玄10時間
完成したもの蚈算゚ンゞン、スクレむパヌ、機皮怜玢UI、iframe統合
機皮デヌタ1064機皮、゚むリアス1012パタヌン
最倧の苊劎遊タむム蚈算匏の粟床スプレッドシヌトずの完党䞀臎
AI掻甚のポむントドメむン知識は人間が提䟛、実装はAIに任せる分業

💡 Day 2の孊び

1. 「売り物」を最初に䜜るこずの重芁性

認蚌やデザむンは埌からでも倉えられたすが、プロダクトの栞ずなる機胜が匱ければ䜕も始たらない。Day 2で蚈算゚ンゞンを最優先で実装した刀断は正解でした。

2. AIに「ドメむン知識」を䌝える技術

パチンコの期埅倀蚈算は䞀般的なプログラミング知識だけでは実装できたせん。スプレッドシヌトの蚈算匏を1぀ず぀芋せ、「この倀はこういう意味で、こう蚈算する」ず䞁寧に䌝えるこずで、AIは正確なコヌドを生成しおくれたした。AIは実装の倩才だが、ドメむンの専門家ではない。

3. デヌタの肥倧化は早めに察凊

13MBのJSONファむルがデプロむを劚げる事態に。デヌタずコヌドの分離GitHub Pages + Vercel rewriteは最初から蚭蚈に入れおおくべきでした。


📌 シリヌズ予定

次回 Day 3 では、Stripe決枈の導入ず広告蚭眮。「¥580/月」の倀段蚭定に至るたでの思考過皋も公開したす。お楜しみに

📖

この蚘事の完党版をNoteで公開䞭

ブログでは曞けなかった裏話・具䜓的な蚭定倀・倱敗のリカバリヌ手順たで、党5ç« 5,500文字超の詳现版です。

📝 Noteで完党版を読む¥500
PR

💻 技術曞・開発に圹立぀本

※ 䞊蚘リンクはAmazonア゜シ゚むトリンクです

Amazonのア゜シ゚むトずしお、Gravity Portalは適栌販売により収入を埗おいたす。