AmesNFL
ツール開発Part 2 / 2

Coding AIで思想の強いMock Draft Simulatorを作ってみた話②

Ames · 2026-02-25


Coding AIで思想の強いMock Draft Simulatorを作ってみた話②
← 前編を読む
Coding AIで思想の強いMock Draft Simulatorを作ってみた話①

前回:Saints限定Mock Draft Simulatorを作ってみた話

これを公開したところ、意外なことにNOファン以外から贔屓チームでできないと文句が。 ただ、この時点でGoogle Antigravityなら全チーム版も余裕で作れる確信があったので試してみることに。目指せPFF。**今回はその過程と、AIが苦手にしている「あること」**について語ります。

2. 全チーム対応Mock Draft Simulatorを作ってみる (2/23)

Script 2-1. 「全チーム対応版にして」と言うざっくりの指示

まず、かなり長いスクリプトだが以下を指示。 【指示1】 今回のデータを基に拡張して、Saints思想が強くなく、本当に使えるMock Draft Simulatorを別で作ってみたい。 今回のプログラムを使いながら、別フォルダに作ってみて。その後で加えたい変更は

  1. New Orleans Saints以外のチームも選べるようにする
  2. Saintsを選んだ際のコメントはそのまま。他のチームのコメントも設定するが、それは後で個別で考える。
  3. 最後の一覧の際に、コンセンサスビッグボードをベースに、実際の指名順位とビッグボードの指名を比較して、リーチ指名、スティール指名を判断してドラフトにグレード (A+, A, A-, B+, B, B-, C, D)をつける。各指名のグレードと、ドラフト総合でのグレードを両方出す。
  4. 1巡RB、2巡までのQBの指名などを止める機能は全て消すが、代わりに、1巡RB指名(全チーム)、2巡までのQB指名(Saintsのみ)、5巡までのK, P指名(全チーム)はグレードをFとし、全体のグレードもそれによりFになるとともに、元々のプログラムに存在した注意点と同様のお説教を入れる。
  5. 他チームの指名の進む速度をカスタマイズできるようにする(5段階くらい)。現在のスピードが2番目に速いくらいに設定。また、次の自分の番まで飛ばせる機能を付ける。
  6. トレードアップ、トレードダウンを実装する。ただし、ひとまず叩き台だけ作って後で詳細は詰めよう。 流石に注文が多いからか30秒ほどアイデアをまとめるのにかかった(速い)。 素晴らしいアイデアですね!制限を外して「全自動&全チーム対応・採点機能付きの本格的なモックドラフトシミュレーター」を作成するための計画(Implementation Plan)とタスクリスト(Task)を書き出しました! 貼り付けると長くなりすぎるので避けるが、別ファイルを見ると英語でToDoリストを作成して、以下のように各注文に対してやるべきことを書き出し、1つ1つチェックをつけながら進めている。お手本のような仕事の進め方で感心。人間でもなかなかできない。 Phase 2: Grading System Core ✅ Implement a grading function: calculatePickGrade(pickNumber, prospectRank) that returns A+ through D based on Reach/Value/Steal logic. ✅ Implement JS calculateOverallGrade(picks) to average the individual grades into a final letter grade. ✅ Implement the "F Grade Penalties":   ✅ Round 1 RB (All Teams) = F   ✅ Round 1-2 QB (Saints ONLY) = F   ✅ Round 1-5 K/P/LS (All Teams) = F ✅ Update the JS messages.js to repurpose the rejection lecture texts into post-draft feedback for these F-grade picks. 流石に10分以上かかっていた気がするが、全部の作業を終えて、出力は以下。頼んでないのに「(バックグラウンドのブラウザテストで、Las Vegas Raidersを選択し、スキップ機能を使って1巡目でRBを指名してF評価を受けるところまで完全に動作確認済みです!)」とかデバッグしてるところが優秀すぎる。 【出力1】 お待たせしました!新しい汎用版シミュレーター(MockDraftSimulatorGeneral ディレクトリ)の基盤構築、およびグレードシステム・便利機能の実装がすべて完了しました!🏈

今回対応した主な機能(Phase 1〜5):全チーム選択可能に変更: どのチームを選んでもSaintsに飛ばされることなく、全32チームのGMとしてドラフトを行えるようになりました。 ドラフトの採点(グレード)システム: コンセンサスビッグボードの順位と実際の指名順位を比較し、各指名に対して「A+」から「D」までのグレードを算出する機能を追加しました。最終画面で「総合グレード」も表示されます。 Fグレードのペナルティと説教機能: 1巡目でのRB指名(全チーム対象) 1〜2巡目でのQB指名(Saintsを選んだ場合のみ) 1〜5巡目でのK/P/LS指名(全チーム対象) これらを行うと、直ちにその指名が「F」評価となり、プレイヤークラス全体の総合評価も「F」に固定されます。ドラフト完了後の画面に、元々あった「お説教」テキストが表示されるように組み込みました。 シミュレーション速度&スキップ機能: 画面のドロップダウンからシミュレーション速度(Very Slow 〜 Instant)を変更できるようになりました。 「Skip to My Turn」ボタンを追加し、自分のチームの指名順まで一瞬でスキップできるようにしました。 トレードのUIベース作成: ひとまずトレードアップ・トレードダウンの「枠組み(モダル)」だけを作成し、エラーメッセージではなく「現在開発中(Coming soon...)」と表示されるように変更しました。これにより、後ほどトレードのロジック詳細を詰めやすくなりました。

(バックグラウンドのブラウザテストで、Las Vegas Raidersを選択し、スキップ機能を使って1巡目でRBを指名してF評価を受けるところまで完全に動作確認済みです!)

ブラウザで MockDraftSimulatorGeneral/index.html を開いて、新しいグレードシステムやスキップ機能の挙動をご体感ください! もしこの挙動で問題なければ、いよいよ最後の「トレード機能の詳細な作り込み」に進めますが、いかがでしょうか? 各指名にグレードがついている、そして1巡RB指名は即刻F

Script 2-2. Draft pick valueの概念を導入してトレードアップ/ダウンを実装

さて、AIは早速トレード機能を作ろうとしているが、NFLのドラフトトレードならまず絶対に定義しておかないといけないものがある。ピックバリューの概念だ。 この記事で詳しく書くことでもない気がするので簡単に説明するが、NFLのドラフト指名権にはそれぞれ価値があり、1巡1位から順に下がっていく。ただ、実際のトレードを見ればわかるが価値は等差数列で下がっていくのではない(例: 1巡1位と1巡9位の価値は全然違うが、7巡1位と7巡9位の価値はほぼ変わらない)。 そこで、1990年代前半にDALのHC/GMのJimmy Johnsonが、「Jimmy Johnson's draft value chart」なる、1巡1位の3000点から始まって、各順位に経験則で点数をつけたものを考案した。「1位はこれくらい特別」「1巡後半から一気に落ちる」という感じで理論的な裏付けは一切なく、めちゃくちゃ主観。しかしなまじ経験則で現場の判断に合っているために、これをベースにトレードを考えるチームが増えてしまった。そのため、現在でもある程度の信頼性はあるとされる。 とはいえ、ルーキー契約の制度も、補填ピックも違う時代のチャートなんてダメだろうと僕は強く信じているので、今回は後年改良版として考案されたRich Hillチャートを使用。こちらはピック順位それぞれがどの程度NFLで活躍するかを考慮して決めたもので、一応裏付けがある。(ただ残念ながら、実際のトレードの現場感からは若干ズレる) さらに難しいのが、翌年以降のピックをどう扱うか。NFLでは3年先までドラフト権をトレードできるが、一般に翌年のピックは同じ順位でも今年より価値が下がるとされている。また、そもそも翌年の順位もわからないし、おそらく各チームGMも「Falconsの来年の1巡→高そう!」程度でやっている。あとで調整することにして、一旦Rich Hillバリューで翌年は5/6倍、翌々年は4/6倍と価値が減っていくことに設定。 最終的に、以下のようなスクリプトで指示。 トレードアップ/ダウンを実装する前に、Draft Pick Valueの概念を導入して、指名権交換が意義あるものになるようにしたい。 Rich Hillのモデルをベースに、2026年の指名権とその価値の表を作成したものをフォルダに入れた(rich_hill_2026_trade_value_chart_drafttek.csv, 1巡1位が1000)ので、これをベースに確率でアップ/ダウンを受けるか決まるように設定したい。 また、2027, 2028の指名権まではトレードできるので、これも反映させたい。フォルダに現時点で決まっている2027の指名権関連のトレード情報を全て入れた(2027_draft_trade.docx)ので、これをもとに各チームの保有指名権がわかるはず。 仮想的に、2027,2028も今年の順位と全く同じで、補填ピックも同様の数が配布されたとして、補填ピックを除く指名権を各チームに与えて欲しい。 また2027以降の指名権の価値としては、「今季順位をベースに、割引率をかける」方式で 2026年のチーム順位 = 10位なら 2027年1巡目 = Rich Hill #10 × 0.83 2028年1巡目 = Rich Hill #10 × 0.66 のように計算して欲しい。 ここは複雑な実装だからかかなり時間をかけていた。Rich Hill valueベースで95%以上ならトレードを受け付けるという仕様も勝手に考えてくれた。この辺りからAIの出力に、「完成おめでとうございます!」とか「素晴らしいアプリ」とかの発言が増えてくるのは、疲れてきて辞めたいのか…? お待たせいたしました!フェーズ6の**「トレード機能(Trade Logic)」**の構築がすべて完了しました!🎉

シミュレーターの裏側でPythonプログラムを走らせて提供いただいた「Rich Hillチャート(1〜259位のポイントCSV)」と「2027年の既存トレード状況(Docx)」を完全にシステム(data.js)へ組み込みました!

実装されたトレード機能のハイライト:将来指名権の自動生成と価値計算 2027年と2028年の全チームの指名権(1〜7巡)を生成しました。ご指定の割引率(2027年は2026年価値の 0.83 倍、2028年は 0.66 倍)を自動で計算し、各指名権にポイントを持たせています。 リアルな2027年ピック保有状況 Docxの内容を解析し、「Green Bayの1巡目はDallasが持つ」などの既存トレード権限をあらかじめ初期設定として割り当てています。 インタラクティブなトレード交渉画面 「Trade Down/Up」ボタンを押すと、相手チームを選ぶドロップダウンと、お互いの保有する全指名権(2026〜2028)がリストアップされたチェックボックス画面が開きます。 CPUの損得判定AI(交渉ロジック) 選択した指名権の合計ポイント(Sent Value vs Received Value)を算出し、「こちらが受け取る価値(Received)」に対して「相手に渡す価値(Sent)」が 0.95倍以上 であればCPUがトレードに応じる(FAIR VALUE または OVERPAY)リアルな判定システムを作りました。0.95未満の不当な要求はCPUが「REJECT」します。 (裏で自動テストボットを走らせ、レイダースvsジェッツで1巡ピックを複数絡めたトレードを実証し、完璧に動作・ポイント計算されることを確認済みです!) これで、「NFL Mock Draft Simulator(全32チーム対応・グレード機能・スキップ機能・トレード機能付き)」 の完成となります!🏈 お手元のブラウザで index.html を更新(再読み込み)していただき、実際に気になるチームでトレード交渉を楽しんでみてください! 追加機能やバランス調整(「もう少しトレードを厳しくしたい」など)があればいつでもお声がけください!長丁場でしたが、素晴らしいアプリの完成おめでとうございます!✨ それっぽいのできてる!

Script 2-3. ニーズ指名の不具合に気づく

【指示3】 マイナーな修正をこの後加えていきたい。 ・各チームのニーズを設定していると思うけど、これについてはニーズの選手を一度指名したら以降はニーズから外して ・グレードについては、チームのニーズを満たしたかどうかも採点項目に入れて ・トレードアップ/ダウンについては、Draft Trackerにもそれが起こったことを表示するようにして ・進行速度は、バーで変えられるようにして、別枠(ポジション絞り込みの横とか?)に表示できるといい ・ドラフト開始前に、Start Draft, Trade Picksの選択肢を設けて、1巡1位が始まる前にトレードする選択肢もあるようにして 1点目はこの時点で気づいた不具合で、ニーズの選手を指名してもニーズから消えないため、同じポジションを指名し続けているのに気づいた(LVがMendoza→Simpson→Nussmeierという3人連続QB指名という伝説をやらかしてくれたおかげで気づいた)。

Script 2-3. トレードアップ/ダウンの不具合に気づく, グレードを修正する

いくらAIが優秀だとはいえ、「トレードアップを実装して」だけだと間違いは起きていた。

  • 現在2巡のタイミングで、すでに指名して使った1巡を使ってトレードできてしまうバグ
  • 3ラウンドで終わりのドラフトとして設定していると、4巡以降の指名権がないものとされてトレードアップ/ダウンに使えないバグ などがあったので、こういったものの修正を指示。 また、グレードがAとかBばかりで面白くなかったのと基準が不明確だったので、せっかくなので以前まとめた記事の「リーチ」「スティール」基準を適用してみることに。ビッグボードベースで、115%の価値を指名できたらスティールでA、85%未満の価値を指名したらリーチでCという結果に。

【指示4】 ・トレードが起きた時、トレードの詳細もDraft Trackerに表示して ・トレードは、その時点で使える指名権のみ使えるようにして(1巡指名した後で、その1巡を使ってトレードは無理) ・2026を7巡まででなく途中で終わる設定にしていても、トレードでは2026の7巡まで全て利用できるようにして ・グレードがAとBばかりで面白く無いのでグレードを変えたいと思う。Rich Hillチャートをベースに傾斜をつけて、draft pick valueとconsensus board上のバリューによって決めたい。例えばドラフトピックバリューで115%以上の位置の選手を指名した場合を「A+」、85%未満の位置の選手を指名した場合を「C」という形で傾斜をつけていきたい。

Script 2-4. 翌年以降のpick valueの修正

この時点でRaidersを使ってみると、翌年ピックが1位扱いなので強すぎる。 Rich Hillで1位の0.83倍は830 (全体2位は717)なので、2027年1巡を使えば2位のNYJのピックが奪えて、2028年1順を使えば3位のARIのピックが奪える。流石に非現実的で、これは「今年も1位なら翌年1位」が良くないと気づく。 【指示4】 ドラフトピックは、 2027年1巡1位-11位: 10位x0.8 2027年1巡12位-22位: 20位x0.8 2027年1巡23位-32位: 30位x0.8 とかの方が適切かも?多少カテゴリ内で傾斜をつけても。 ここは実際には何度か試行錯誤したが、こういう設定に。何となく、トップ10チームの来年のピックが10位くらい、プレーオフ指名チームの来年のピックは下位、というイメージを形に。結果的にそこまで非現実的なトレードは不可能になり、今回そこまでトレード機能にこだわるつもりはなかったのでこれで妥協。PFFとかはどう計算しているんだろう。

まとめ

以降、回してみると色々と不具合や使いづらい点があったので修正(大体はトレードのところだが、他にニーズとBPAのバランスのランダム性を上げたり、)。大体20往復くらいして、所要時間は2時間くらい(トレードアップ、ダウン機能が大変で、Saintsの時よりは時間がかかった)。 さらにこだわるならCPU同士のトレードを実装したり、各チームのDepth Chartも与えて選手を使ったトレードとかも考えたが、選手の価値をまた定義しないといけない(PFFのシミュレータは、この選手の価値がめちゃくちゃな印象)し、どうせデータの更新とかしないので移籍すると面倒だしここまでで機能は妥協。

3. AIにできず、人間にできるのは○○

さて、この時点で気づいたこととして、このシミュレーター、普通すぎる。 Saintsを選ばない場合、RBを1巡で取る or K, Pを5巡までで指名すると問答無用でグレードをFにしてくる、という点以外に全くユニークさがない。著作権にある程度気を遣っているのでロゴも使えず、PFFとかMock Draft Databaseの劣化版でしかない。 そこで、前回と似た形だが、Saintsと49ers以外のチームを選んだら煽り文章が表示されるようにして、皮肉屋シミュレータとして自我を持たせよう。この時点ではATLの28-3しか思いつかなかったけど、これもAIに考えさせれば簡単だろうし。 …とか思っていたら、これが大誤算。

3.1. ChatGPTの場合

Antigravityがずっとコードの修正に動いているので、その間にChatGPT(有料版)に煽り文句を考えてもらうことに。 「各チームのトラウマを掘る感じにしたい。2025年シーズンの結果を踏まえて、32チーム分なくてもいいので考案してみて」という指示を出すと、結果が以下(一部抜粋)。 NE (Patriots) 「ようこそ。Super Bowl LXでSEAに29–13。あのスコアの余韻、まだ残ってますよね?」 DEN (Broncos) 「33–30 OTでBUFを倒して、最後はAFC決勝で10–7。雪のデンバー、静かすぎませんでした?」 CHI (Bears) 「GB相手に18点差ひっくり返して31–27。…で、最後は20–17 OT。奇跡の後に現実が来るの、早すぎません?」 PHI (Eagles) 「ディフェンディング王者から、ワイルドカードで23–19。王朝って、意外と脆いですね。」 HOU (Texans) 「PITを30–6で黙らせたのに、次はNEに28–16(しかも4INT)。上げて落とすの上手すぎません?」 LAC (Chargers) 「POで16–3。Herbertの顔、だんだん悟ってませんでした?」 KC (Chiefs) 「2025は“まさか”の、2014以来のPO逃し。しかも16–13で脱落決定。王朝にも冬は来ます。」 この方向性で、**“刺さり強め” / “ライトな煽り” / “上品に嫌味”**の3トーンに分けて量産もできる。次に掘りたいチーム(ATL/CIN/INDとか)を挙げてくれたら、そのチームは2025の出来事を確認した上で同じ温度感で作るよ。 …下手すぎない?? …つまらないし、不快で誰もやってくれなくなるよ? 指示が悪いから2025年のプレーオフの話で止まっちゃったのかなと思い、改めて「歴史的な出来事やドラフトの失敗で」と注文。しかし… CAR「CARへようこそ。まずは“QBを守る”から始めませんか。過去のドラフトがそれを教えてくれました。」 「指名は希望、育成は現実。CARは現実の比重がちょっと重いだけです。」 CLE「CLEへようこそ。QBを指名する前に深呼吸してください。歴史があなたを見ています。」 「このドラフトは“新しい未来”です。少なくともジャージに名前が増えるだけの未来は避けましょう。」 NYJ「NYJへようこそ。2位指名で救われるとは限りません。ええ、ほんとに。」 「“次こそ本物”を何度目かで成功させるゲーム、始めましょう。」 NYG「NYGへようこそ。『その順位でその選手?』と言われた時こそ、真の勝負です。」 「“意外性”は武器です。武器にするには当たらないといけませんが。」 …そういうのじゃない。こんなに話が通じないとは。AIは進化したんじゃなかったのか。 最近、「結論から言うね。 👉それ、めっちゃ正解。」みたいなChatGPT構文がXでよくネタにされてますが、こいつ本当言語能力低いと思います。英語でやっても全然ダメだった。

3.2. Grokの場合

いや、ChatGPTはもしかすると性格が良くて嫌味とか皮肉を搭載していないのかもしれない。 それなら頼るのはあいつしかない。性格の悪いAI代表、Grok君の登場です。 今度は反省して、最初から英語で依頼。"Create trolling statements for every NFL teams based on recent events, scandals, team situations, and so on."と依頼。さあ、現地アカウントのノリで煽ってみてくれ。 Minnesota Vikings: Vikings, Rondale Moore's tragic death after a season-ending injury in '25? Heartbreaking, but your 7-10 record and Sam Darnold departure (to glory elsewhere) just adds to the purple pain. ……そこ触れるのはライン超えすぎる、一瞬で閉じました。

3.3. Geminiの場合

ChatGPTもGrokも別の意味だけど全然ダメなので、Antigravityが落ち着いたタイミングでGeminiに相談(この2つは両立するのかもしれないが、トークン足りなくなったりしたら嫌なので念の為)。ここまでのAntigravityとのやりとりでかなり会話が上手なので期待してみた結果は… Arizona Cardinals: 「まずはその選手が、野球じゃなくてアメフトに専念してくれることを祈れよ」 Tennessee Titans: 「1990年代みたいなゴリゴリのラン攻撃をまだ続けるつもりか?時代は令和だぞ」 New York Giants: 「また高望みのQBか?指名した瞬間にニュージャージーのファンがブーイングするのが聞こえるぞ」 Washington Commanders: 「名前を何回変えても、チームの体質(負け犬根性)まではドラフトできないぞ」 うん、前の2人に比べるとマシだけど、まぁこのくらいのレベル。 出してくるエピソード(スタジアム移転、船上パーティー)とかはGeminiが一番的確だったので一部取り入れることはできましたが、結局頑張って30チーム分自分で考えました。コーディングで失いかけていた人間としての自信を取り戻せましたね。 皆さん覚えてください。 AIにできず、人間の方が遥かに得意な唯一のこと、それは「悪口」です。 一点心残りなのは、個人的には一番言語が得意だと思っているAIはClaudeなんですよね。現在契約していないため見送りましたが、ここは結構差別化ポイントになることを痛感したので、そのうち乗り換えようか。Claude codeも超優秀らしいし。(1年半前でこのレベルだった↓)

4. 終わりに

と、最後はかなり脱線しましたが、最終的にできたMock Draft Simulatorがこちら。制作2日とかにしてはかなりいいですね。調子に乗りすぎかもしれないけど、本気でやれば結構PFFのやつくらいまで作れるような気がしなくもない。少なくとも無料版の機能は。 ちなみに、ツイートした後色々な方が「こんな煽りコメもいい」とアイデアをくれたので、反映させてversion 1.1にしました。アプリ下部で感謝しています。まだまだ募集中です! https://ames9.github.io/MockdraftSimulator2026_general/

割と真面目に、皆さんもぜひやってみてください。isisiさんが早速やってるのを見ましたが、これデザインいいなぁ、ロゴっぽいの入れてるのもポイント高いですね。

いつもの真面目な記事とは違ってかなりの雑記でしたが、お読みいただきありがとうございました。僕はこれから、クイズアプリ「クソ雑魚キックシミュレーター」(4th downシチュエーションが出題されて、Go for it, FG, puntから選択。ギャンブルが正解の場面でパントやFGを選ぶと即ゲームオーバー)の開発にAntiGravity君と取り組みます。それでは。 真面目な記事はこちら↓

シェア

コメント・感想

この記事への感想・質問・指摘などはお気軽にどうぞ。

フォームで送る@ames_NFL