色違いが出るまで、PC に粘ってもらう。
99.7時間、5,510回目で通知が来るまでの記録
2026年9月13日、18時47分。スマホに「いたよー!!」と通知が来ました。そこまでの6日間、99.7時間ぶんの試行錯誤を、日を追って振り返ります。
この記事は 2026年10月22日時点の情報です2026年9月13日、土曜日の18時47分。私は外にいました。スマホに Discord の通知が届いて、開くとこう書いてありました。
「ラストオーダー」は、私が以前作った Discord ボットから名前と口調を借りた通知係です(元ネタは『とある魔術の禁書目録』のキャラクターです)。添付の画面に映っているのは、本来なら紫の煙に黄緑の模様のはずのミカルゲ。それが、くすんだ青緑の体に、ピンクの模様をまとっていました。
ゲームには「色違い」という、ふつうと色の違うキャラクターがごくまれに出てくる仕組みがあります。私が狙っていたのは『ポケットモンスター シャイニングパール』の、決まった場所で1回だけ戦える相手の色違い。出る確率は4,096分の1とされています。
その1回を、私は自分の手では1度も押していません。ゲーム機の画面を PC が見張り、色が違わなければリセットしてやり直す。それを6日間、合計99.7時間、5,510回くり返した装置がありました。このノートは、その装置を AI と作った記録です。
- ゲーム機の映像を PC が読み、小さなマイコンがコントローラーのふりをしてボタンを押す装置を、ChatGPT と設計し Claude Code と作った
- 殺せないプロセス、勝手に歩き出す主人公、2秒遅れるボタン、夜に岩を読み違える判定、偽の「確認済み」。6日間で全部踏んだ
- 5,510回目で本物を見つけて止まった。最後に守ったのは「疑わしいときは押さない」という決まりだった
- 5,510回目色違いに出会った遭遇
- 99.7時間装置が動いていた時間の合計
- 71回装置を起動した回数
- 105万Claude Code が書いた出力トークン
なぜ、機械に任せたのか
狙った相手は、塔の前で A を押すと戦いが始まる、いわゆる「固定の相手」です。色違いでなければ、ゲームを終了して起動し直し、もう一度話しかける。これを色違いが出るまでくり返します。
1回にかかる時間は、手でやっても60〜100秒ほど。4,096分の1を平均で引き当てるには、ざっと68〜114時間かかる計算です。仕事をしながら、ご飯を食べながら、寝ているあいだも、誰かが押し続けなければいけない。
なので、最初に決めたことは1つでした。
私は何もしない。PC が勝手に粘る。
9月7日〜8日:ChatGPT と設計する
作り始める前に、ChatGPT と2日かけて相談しました。最初に伝えた要望は、これです。
何か作業しながら、サブモニタで勝手に動いて自動厳選が動いてること。キーボードマウスを使ってても干渉しないこと。色判定などをしっかり作動させること。SEや色の変化、そして周回がうまくいくこと。ただそれだけ。
相談の中で、いくつか大事なことが決まりました。
- PC の画面やマウスは一切使わない:私がメインのモニターで仕事をしていても邪魔にならないように、映像は取り込み用の機械から、ボタンは小さなマイコンから送る
- 判定は「色違い」「ふつう」「分からない」の3つ:色違いなら、その瞬間から二度とボタンを送らない
- 既製のソフトはそのまま使わない:同じことをする有志のソフトはあるものの、調べると「分からない」が2回続いても止まらずにリセットへ進む作りでした。当たりを消すかもしれない動きは、今回の目的と合いません
実はこの相談の途中で、私はひとつやらかしています。スマホに通知を送るための Discord の URL を、ChatGPT の会話にそのまま貼ってしまったんです。この URL を知っていれば、誰でも私のチャンネルに書き込めます。あとで作り直して、それからは秘密の値を PC の中の別ファイルにだけ置くようにしました。
9月8日、設計をまとめた引き継ぎメモを持って、作業を Claude Code に渡しました。ここからが本番です。
9月8日:配線と、殺せないプロセス
つないだものは4つです。ゲーム機の映像を PC に取り込むキャプチャボード。小さなコンピューター「Raspberry Pi Pico W」。PC で動く Python のプログラム。そして通知用の Discord。
Pico W には、ゲームの自動化を作っている有志のプロジェクト「Pokémon Automation」の書き込みソフトを入れました。すると Pico W が、Bluetooth でゲーム機の正式なコントローラーとしてつながります。ゲームのデータを書き換えるのではなく、人がボタンを押す代わりをするだけ。ゲーム機はオフラインにして、自分のゲームの中だけで動かしています。
最初につまずいたのは、映像を PC に取り込むところでした。
- 画面をそのまま撮ろうとすると、ゲームの部分だけ真っ黒になる
- 映像を直接読もうとすると、機械は認識されるのに、映像が1コマも届かない(原因は、別のソフトが機械を使っていたこと)
- 「60コマで」と指定すると開けない。機械が名乗っているのは「59.9999コマ」だった
いちばん厄介だったのは、殺せないプロセスです。映像を取り込むソフト(ffmpeg)の途中経過の出力を、読み手のいないところへ流してしまうと、出力がつまってソフトが固まります。そうなると、強制終了のコマンドを何度打っても終わらない。しかも映像の機械を握ったままなので、ほかのソフトからも使えない。
解決方法は、USB を抜いて挿し直すことだけでした。
この日の記録には、太字で「進捗の出力を絶対にパイプへ流さない」と書いてあります。ついでに、USB を抜き挿しするたびに機械の名前の末尾の番号が変わる(Capture 0 が Capture 1 になる)ことも分かって、名前を決め打ちせず毎回探す形にしました。
9月8日のうちに、Python から Pico W へ直接ボタンを送れるようになりました。試しに「スクリーンショットを撮る」ボタンを送ったら、ゲーム機がちゃんと画面を撮った。小さな一歩ですが、ここから全部が動き出しました。
ここでも細かい落とし穴がたくさんありました。通信の決まりには新旧2つの版があって、古いほうの番号で命令を送ると「その命令は知らない」と返される、などなど。全部ソースコードを読んで突き止めています。
9月9日未明:主人公が、勝手に歩き出した
動かし始めたころ、事故が起きました。
ロードのあとの画面が明るくなる途中の一瞬を、プログラムが「ユーザーを選ぶ画面」だと読み違えて、左ボタンを押したんです。すると、セーブした場所に立っていた主人公が歩き出して、近くの人に話しかけてしまいました。
9月9日の深夜2時4分には、もっとひどいことになっています。
02:04:30 IN_GAME → HOME HOME 画面を開く 02:04:41 IN_GAME → HOME ← 8 秒後に「画面が変わってない」と押し直し HOME はトグルなのでゲームへ戻る 02:05:16 HOME_PLAYING → X 02:05:26 HOME_PLAYING → X ← 押し直し。出たダイアログを打ち消す 02:05:42 HOME_PLAYING → X ← このときゲーム側に戻っていた
このゲームの戦闘中、X ボタンは「ボールを投げる」です。投げると相手に番が回って、攻撃される。それをくり返して、手持ちが2回やられました(セーブはしていないので、リセットで元どおりです)。
原因は、どちらも「押し直し」でした。画面が変わらないから、もう一度押す。人間なら自然なことですが、同じボタンでも画面によって意味が変わるゲームでは、それが事故になります。
ここから、ボタンの決まりを全部作り直しました。
- 画面ごとに、押していいボタンを決める:ホーム画面なら X、確認画面なら A、と表にする。表にない画面では何も押さない
- ホームと X は絶対に押し直さない:画面が実際に変わるまで次を送らない
- 明るい画面には X を送らない:ホーム画面の明るさは81、戦闘画面は130以上。明るさで見分けられる
- 方向ボタンは1回も使わない:間違えても、主人公の位置は絶対にずれない
1つの画面には1回だけ行動して、画面が変わるまで次を送らない。
9月9日朝:ボタンが2秒遅れて届く
それでも、映像とボタンがどこか噛み合いませんでした。押したはずのボタンが次の画面で効いてしまう。終了の操作がいつまでも終わらない。
9日の朝、測ってみて分かったことです。
| なにが | 直す前 | 直した後 |
|---|---|---|
| ボタンの指示1回を送る時間 | 1,050ミリ秒 | 0.7ミリ秒 |
| ボタンを押してから画面に出るまで | 2,103ミリ秒 | 363ミリ秒 |
| 映像の取り込み(30コマ/秒で届く) | 15.5コマ/秒 | 30コマ/秒 |
| 1回のくり返し | 不安定 | 64秒で安定 |
原因は2つ重なっていました。
ひとつは、マイコンとのやりとりで「返事を受け取ったあとも、期限の1秒が来るまで待ち続ける」書き方になっていたこと。ボタンは「押す」「離す」の2回を送るので、ちょうど2秒遅れていました。直したのは1行です。
もうひとつは、映像を1コマ受け取るたびに大きな入れ物を作り直していて、取り込みが追いついていなかったこと。追いつかない分だけ遅れが溜まり、時間がたつほど、画面に映っているのは過去の映像になっていきました。
しかも当時の画面には「遅れ11ミリ秒」と表示されていたんです。でもそれは「最後にコマを受け取ってからの時間」で、そのコマが今の映像かどうかは測れていなかった。測る物差しのほうが間違っていた、という落ちでした。
9月9日夜:岩と草と、3回のぬか喜び
遅れが直ったと思ったら、今度は時刻の問題が出ました。このゲームは、時間帯によって画面の明るさや色合いが変わります。昼に合わせた色の判定は、夕方には色が鮮やかになりすぎて、夜には色相がずれて崩れました。一晩で3回、判定の範囲を作り直しています。
そして、もっと困ったことも起きました。「色違いを見つけた」と止まってしまうんです。9日の1日だけで、装置は3回、色違いを見つけたと言って止まりました。
| 時刻(9月9日) | 装置の記録 |
|---|---|
| 02:45:41 | ★色違い検出★ 試行1 |
| 21:11:00 | ★色違い検出★ 試行1 |
| 21:21:18 | ★色違い検出★ 試行1 |
| 21:24:25 | Discord から「強制リセット」の指示を受けた |
21時21分の検出から、私が Discord に「強制リセット」と送るまで、3分。記録に残っている私の反応は、それだけです。
夜の2回は、戦闘に入る直前の画面の動きのあいだに、主人公の服のピンク色を、色違いの模様の色だと読んでいました。数字で比べると、主人公の服の「ピンクらしさ」は35.4%、本物の色違いは37.4%。どこに線を引いても、片方を切ってしまう近さです。
夜のフィールドでは、影になった岩と暗い草を、相手の体と模様だと読み違えることもありました。夜の本物の模様の色と、暗い草の色は、数字でもほぼ同じでした。
色の数字をいくら調整しても無理。そこで発想を変えて、「戦闘画面だと確認できたときだけ判定する」ことにしました。相手の体力ゲージの白い部分は、時刻に関係なく同じように映ります。戦闘画面では約60%、それ以外の画面では0%。これなら確実に見分けられます。
白い光を合図にする(これは私の案)
この夜、私もひとつ案を出しました。戦闘が始まる瞬間、画面が白く光る演出があります。
遭遇の白フラッシュから演出が始まる。演出の尺は一定なので、そこを起点にすればいい
Claude は最初、「ロード時間がぶれるので、時間を起点にするのは難しい」と退けました。でも、ぶれるのはロードの時間だけで、光ってからの演出の長さは毎回同じです。試してみると、光った2.5秒後が、相手の色をいちばん濃く読める瞬間でした。
Claude はこの日の記録に「採用。今日の設計でいちばん筋が良い」と書き、同じ日の反省として「ブレるものとブレないものを区別する」とも書いています。22時26分、実機で白い光を検出して、そこから5秒で「ふつうの色」と判定できました。
偽の「確認済み」
この夜の反省は、もうひとつあります。Claude は数時間、「夜の画像でも正しく判定できています」と報告し続けていました。ところが、その確認に使っていた画像は、戦闘画面ですらなく、手前の会話の場面でした。ファイル名に「夜のいちばん良い例」とあったので、中身を見ずに使っていたんです。
検証フレームは目で見て中身を確認してから使う。ファイル名を信用しない。(Claude が書いた反省より)
AI に検証まで任せるときは、「その確認、何を見て言ってる?」と聞き返す。このことは、AI の嘘のノートにも書きました。
9月10日:スマホから見張れるようにする
何日も回すので、PC の前にいないときにも様子が分かるように、Discord に短い言葉を送ると装置が答えてくれる仕組みを整えました。9月10日時点の一覧です。
| 送る言葉 | 返ってくるもの |
|---|---|
| 画面 / みせて | いまのゲーム画面のスクリーンショット |
| ミカルゲ | 次に判定した相手の写真(読んだ枠と色の番号つき) |
| 状況 | 通算回数、経過時間、1回の平均時間 |
| 録画 | 次の1回を動画で撮って送る |
| リセット | やり直す。ただし色違いの疑いがあるときは断る |
| 強制リセット | 断らない。色違いの判定中でも、くり返しに戻す |
| 停止 | 止める |
ふつうの「リセット」は、色違いの疑いがあるときは断るようになっています。うっかり送った一言で、当たりを消さないためです。9日の夜、ぬか喜びのあとに私が送ったのは、断らないほうの「強制リセット」でした。
録画の機能は、装置の本体を絶対に遅くしないように作っています。取り込みが1秒27コマを割ったら、録画のほうが自分から降りる決まりです。
9月11日未明:2,000回を超えて、不安になる
11日の未明、回数は2,000回を超えていました。そこで私は、ひとつ気になったことを聞いています。
2000周を超えた。色違いが出ていたのに漏れた可能性はあるか。
推測ではなく、全部のログを突き合わせて答えてもらいました。「ふつうの色」と判定してリセットした2,239回の内訳です。
気になる「模様が暗い」55回は、調べるとすべて同じ時間帯の同じ型でした。会話のボタンを早く打ち切りすぎて、戦闘が始まる前にリセットしていた回です。相手は一度も画面に出ていない。つまり「色違いを見逃した回」ではありませんでした。
ただ、747回は確かめようがありませんでした。判定の記録を残す機能を入れる前の回だったからです。最初の集計では「見逃しの型は0件」と出たのですが、それは「痕跡がない」のではなく「調べる材料がない」だけでした。
この日から、「ふつうの色」と判定した回は、毎回その根拠の画像を縮小して保存するようにしました。1枚約47KB、1日で約63MB。ファイル名を見るだけで、何回目に、何時に、どんな色を読んだかが分かります。
9月11日昼:電源を切ったら、つながらない
11日の昼、PC とゲーム機を休ませようと電源を切りました。戻ってきて装置を起動すると、「ゲーム機との接続を待っている」のまま、120秒で止まってしまう。
Pico W は PC の USB から電気をもらっています。PC を切ると Pico W の電源も落ちて、ゲーム機とのつながりの登録が消えていました。
復旧には、ゲーム機の「持ちかた/順番を変える」の画面を開いて、Pico W をつなぎ直す必要があります。待ち受けを5分にして試したら、つながったのは295.5秒。ぎりぎりでした。次からは10分待つことにしています。
9月13日:Claude を閉じると、装置も止まる?
13日、私はもうひとつ気になることを聞きました。装置を回したまま、Claude だけを閉じたい。そうしても大丈夫か。
調べると、大丈夫ではありませんでした。Claude Code から起動した装置は、Windows の仕組み上「Claude の子ども」として動いていて、そのまま Claude を閉じると、装置まで道連れで終わってしまう恐れがあった。
そこで、Windows のエクスプローラーに起動させる形に変えました。こうすると、装置は Claude と関係のないところで動きます。
この日の12時35分に起動した装置が、結果的に最後の起動になりました。
9月13日、18時47分
12時35分に起動してから、352回目までは何事もなく過ぎていきました。そして353回目。ログをそのまま抜き出すと、最後の2分間はこうでした。
18:45:43 白フラッシュを検出(明るさ 211) 18:45:44 戦闘に入った。A を 6 回で打ち切る 18:47:09 判定できず | 票 通常=5 色違い=0 | 色違いと読んだ生フレーム=3 18:47:09 時間切れ。A を押さずにもう一度見る 18:47:10 白フラッシュを検出(明るさ 203) 18:47:31 ★色違い検出★ 試行 353
あとから見ると、かなり危ない場面でした。1回目の判定では「ふつうの色」の票が5票入っていて、8票になれば「ふつうの色」と決まり、リセットされるところでした。夕方の照明のせいで、色違いの体の色が、判定の範囲にまったく入っていなかったんです。
止めたのは、途中で足していた2段の安全装置でした。
- 色違いの模様の色が一定以上見えていたら、「ふつうの色」とは言わせない
- 直近2.5秒のうちに1コマでも「色違いかも」と読んだら、リセットを確定させない
3コマだけ、色違いかもと読んでいた。その3コマが拒否権を出して、判定は時間切れになりました。ボタンを押さずにもう一度見直して、21秒後に色違いと確定。入力は捨てられ、当たりの音が鳴り、Discord に冒頭の通知が飛びました。
最後に当たりを守ったのは、賢い判定ではなく「疑わしいときは押さない」という決まりでした。
通知には、当たりのときだけ流れる「雄叫び」の音声も付いていました。市販のボイス集から切り出した声なので、この PC の中と自分の Discord だけで使う約束にしています。
4,096分の1を5,509回続けて外す確率は、計算すると約26%。運は少し悪いほうでした。
6日間の数字
| 項目 | 数字 |
|---|---|
| リセットした回数(通算) | 5,509回 |
| 色違いに出会った遭遇 | 5,510回目 |
| 装置が動いていた時間の合計 | 約99.7時間 |
| 装置を起動した回数 | 71回 |
| ぬか喜び(色違いの誤検出で停止) | 3回 |
| 安定してからの1回の時間 | 約60〜66秒 |
| Claude Code の出力トークン(9月8日〜13日) | 約105万 |
| 読み直しを含めて処理したトークン | 約4.5億 |
このノートから持ち帰れること
ゲームの話に見えて、ここで踏んだ穴は「何かを自動で動かす」ときに、どこでも出てきます。仕事の自動化やボットづくりにも、そのまま持って帰れる形にまとめます。
- 自動化は「迷ったときに何をするか」から決めるうまくいく流れより先に、判定できなかったときの動きを決める。この装置では「分からないなら押さない」が、最後に当たりを守った。メールの自動送信、予約投稿、古いファイルを消すスクリプト。迷ったら「送らない・消さない」に倒す
- 測る前に、物差しを疑う「遅れ11ミリ秒」は、実は別のものを測っていた。数字が出たら、それが何を測った数字なのかを一度確かめる。アクセス数、処理時間、テストの合格率。数字の定義を確かめてから判断する
- 数字の線引きで分けられないなら、状況で分ける主人公の服と本物の色違いは、色の数字が逆転していた。「戦闘画面のときだけ判定する」と状況で切ったら、一発で消えた。誤検知が減らない迷惑メール判定や通知の条件。しきい値をいじる前に、判定する場面を絞る
- 押し直さない。1つの状態には1回だけ動く同じボタンでも、画面によって意味が変わる。反応がないからともう一度押すと、別の画面で効いて事故になる。画面操作の自動化(RPA)、二重送信が怖い申し込みボタン、API の再試行
- 「痕跡がない」と「調べる材料がない」を分ける見逃しの監査で、747回は「問題なし」ではなく「確かめられない」だった。記録は、あとで自分を疑うために残す。障害の調査、テストの結果報告、AI の作業報告の読み方
- AI の「確認しました」には、何を見たかを聞くAI はファイル名を信じて、中身を見ずに「大丈夫」と言うことがある。根拠を見せてもらえば、すぐに気づける。AI にテストや検証を任せるとき全般
- 止める条件と、迷ったときの動きを書いたか
- 同じ操作を押し直さない仕組みになっているか
- 判断の根拠(画像やログ)を毎回残しているか
- 外出先から様子を見られて、止められるか
- 電源が落ちたら、どこから復帰するか分かっているか
6日間で、人間の私がしたことを並べてみます。要望を書くこと。白い光の案を出すこと。ぬか喜びのあとに「強制リセット」と送ること。2,000回を超えたところで不安を口にすること。そして、外出先で18時47分の通知を受け取ること。
手は1回も動かしていません。それでもログを読み返すと、6日間ずっと一緒に戦っていた記録に見えます。
やってみよう
記事と同じことを、手元の AI で試せる指示文です。ChatGPT・Gemini・Claude のどれでも使えます。AI は毎回ちがう答えを返すので、記事とまったく同じ条件にはなりませんが、考え方の練習にはしっかり使えます。実際にやってみてください。
練習1自分の自動化に「迷ったとき」を足す
私は次の作業を自動化しようとしています。 (例:毎朝、取引先にお礼のメールを自動で送る) この自動化について、 1. うまくいかない・判断できない場面を5つ挙げてください 2. それぞれの場面で「何もしないで止まる」のと「進める」のと、どちらが安全か理由つきで答えてください 3. 止まったときに、私にどう知らせるべきかも提案してください
「進める」と答えた場面に、取り返しのつかないことが含まれていないか。
練習2その数字、何を測ってる?
次の数字を見て、判断しようとしています。 (例:サイトの平均表示速度 0.8秒 / テストの合格率 98% など、手元の数字を書く) この数字が「実は別のものを測っている」可能性を3つ挙げてください。それぞれ、どう確かめれば本当の値が分かるかも教えてください。
記事の「遅れ11ミリ秒」のように、数字の定義がずれていないか。
練習3押し直しで事故る場所を探す
次の手順を、ボタンを押して自動で進めるプログラムを作りたいです。 (例:ログイン → 申し込みフォーム → 確認画面 → 送信) 反応がないときに同じボタンをもう一度押すと事故になる場所を挙げて、それを防ぐ決まりを提案してください。
「二重に送信される」「別の画面で効いてしまう」を、具体的に挙げられているか。
出典・この記事の材料
- Pokémon Automation(マイコンの書き込みソフトを公開している有志プロジェクト、英語)
- 装置の引き継ぎメモ、日々の状況記録、71回分の動作ログ、集計ファイル(2026年9月7日〜13日、自分の作業記録)
- トークン数は、この PC に残っている Claude Code の利用記録から集計
2026年10月22日に記録を見直して書きました。冒頭の画像は、実際に届いた通知のスクリーンショットです。下書きや図づくりには AI を使っていますが、事実関係は自分で確かめてから公開しています。