Task SchedulerでWindows PCを競艇AI予想マシンにした方法

PR本記事はアフィリエイト広告を含みます。リンク経由でのご購入により運営者に成果報酬が支払われることがありますが、読者への価格や条件は変わりません。

結論:Task Scheduler×Pythonで毎朝6時に競艇予想が自動生成される仕組みになった

結論から書きます。Windows11のTask Scheduler、Python、OpenAI APIを組み合わせて、毎朝6時に当日の競艇全レースの予想がLINEに飛んでくる環境を作りました。私のケースでは、この仕組みを30日間動かして、API代は月500円程度、回収率は98%という結果でした。利益にはなっていませんが、「朝起きたら今日の買い目が決まっている」状態は、想像以上に時間効率が良いです。

仕事前にスマホで予想サイトを見回す時間が消えた、これだけでも個人的には作って良かったと感じています。以降、再現できるレベルで手順を書いていきます。

構成図と必要なもの:Windows11 + Python + OpenAI API + 公式オッズスクレイピングの最小セット

最小構成はこうです。

  • OS: Windows11 Home
  • Python 3.11(Anaconda不要、公式インストーラでOK)
  • ライブラリ: requests / beautifulsoup4 / openai / gspread / python-dotenv
  • OpenAI API(私はgpt-4o-miniを使用、安いので)
  • LINE Notify(廃止前提なら、LINE Messaging APIに置き換え可)
  • Googleスプレッドシート(gspread経由で書き込み)
  • データ取得元: 競艇公式サイト(boatrace.jp)

処理フローはシンプルです。Task Scheduler → run.batpredict.py → 公式サイトからオッズ・選手データ取得 → OpenAI APIで買い目生成 → LINEに送信 → スプレッドシートに記録、これだけ。

ステップ1:競艇公式サイトから前日オッズ・選手データを自動取得するPythonスクリプトを書く

公式サイトはHTML構造が比較的素直なので、requests + BeautifulSoup で十分取れます。私が実際に使っている取得用関数の骨格はこんな感じです。

import requests
from bs4 import BeautifulSoup

def fetch_race_info(jcd, race_no, date):
    url = f"https://www.boatrace.jp/owpc/pc/race/racelist?rno={race_no}&jcd={jcd}&hd={date}"
    res = requests.get(url, timeout=10)
    soup = BeautifulSoup(res.text, "html.parser")
    # 選手名・級別・モーター2連率などを抽出
    rows = soup.select("table.is-w495 tbody")
    return [parse_row(r) for r in rows]

注意点として、リクエスト間隔は最低3秒空けています(time.sleep(3))。公式サイトに迷惑をかけないため、ここは絶対に削りません。24場×12レースを全部取りに行くと約7分かかりますが、深夜帯に走らせるので問題なしです。

ステップ2:取得データをChatGPT APIに渡して「軸・ヒモ・買い目」をJSONで返させるプロンプト設計

ここが一番工夫したところです。GPTにそのまま「予想して」と投げると曖昧な文章を返してくるので、JSON Schemaで出力形式を強制しています。

prompt = f"""
あなたは競艇予想の分析アシスタントです。
以下のレース情報をもとに、軸(1名)・ヒモ(2-3名)・推奨買い目(3連単5点以内)をJSONで返してください。

{race_data}

出力形式:
{{ "axis": 1, "himo": [3,4], "tickets": ["1-3-4","1-4-3","1-3-5"], "confidence": 0.62, "reason": "..." }}
"""

response_format={"type":"json_object"} を指定するとパース失敗がほぼゼロになります。confidence を返させているのは、後から「自信度の高いレースだけ買う」フィルタを入れるためです。私の運用ではconfidence >= 0.6 のレースだけLINE通知しています。

ステップ3:Task Schedulerで毎朝6時に.batを叩く設定(つまずきポイントと解決法を全部書く)

Task Schedulerで.batを毎朝6時に実行する設定自体は5分で終わりますが、私は3点でハマりました。

つまずき1: 環境変数(API Key)が読めない

.envの読み込みパスが相対パスだと失敗します。load_dotenv(r"D:\boat\.env") のように絶対パスで指定して解決。

つまずき2: PCがスリープ中だと動かない

タスクのプロパティ →「条件」タブで「タスクを実行するためにスリープを解除する」にチェック。

つまずき3: 文字化け(cp932エラー)

.batの中で chcp 65001 を入れて、Pythonのprintencoding='utf-8'を明示。これでUnicodeDecodeErrorが消えました。

run.batの中身は実質3行です。

chcp 65001
cd /d D:\boat
python predict.py >> logs\run.log 2>&1

ログを残すのは絶対やった方がいいです。失敗した日に原因追跡できないと詰みます。

ステップ4:予想結果をLINE Notify+Googleスプレッドシートに自動記録して回収率を可視化する

予想を出すだけだと結果検証ができないので、スプレッドシートへの自動記録は必須です。gspreadでサービスアカウント経由で書き込みます。記録項目は以下。

  • 日付 / 場 / レース番号
  • 軸 / ヒモ / 買い目 / 自信度
  • 結果(手動 or 翌日に確定オッズAPIで自動更新)
  • 投資額 / 払戻額 / 単レース回収率

LINE通知は1日1通にまとめて、自信度0.6以上のレースだけリスト形式で送ります。これで朝の通知爆撃を回避できます。スプレッドシート側はピボットで「場別回収率」「自信度帯別回収率」を可視化していて、ここを見ると改善ポイントが見えてきます。

30日間運用してわかった的中率と月額コスト:API代500円・回収率98%のリアルな数字

30日間(2026年4月)回した実績の概算は以下です。

項目 数値(概算)
通知レース数 約180レース
3連単的中率 約11%
回収率 98%
OpenAI API代 約500円
Googleスプレッドシート 0円
LINE通知 0円

回収率98%は「収支トントンに近いがマイナス」という現実的な数字です。これを「ダメ」と見るか「ベース」と見るかは人によりますが、私はベースだと考えています。プロンプトの改善(直近の節間成績を重み付け)、フィルタ強化(自信度0.7以上だけ買う)、そもそも買い目数を3点に絞る、など改善余地が大量にあるからです。

完成品を作って終わりではなく、毎週少しずつチューニングできる「土台」が手に入ったのが一番の収穫でした。

まとめ

Task Scheduler×Python×OpenAI APIの組み合わせは、競艇に限らず「毎朝定時に何かを自動生成してLINEに送る」用途に応用が効きます。私はこの仕組みをベースに、株のスクリーニング通知、天気×服装提案にも横展開しています。Windows PCをただの作業端末から「自分専用の自動化サーバー」に変える第一歩としても、競艇予想は題材として手頃です。まずは1場・1レースだけ取得するところから始めてみてください。

関連ツールを見る

この記事で紹介したツール・サービスをまとめてチェック。

おすすめ

エックスサーバー

国内シェアNo.1のレンタルサーバー。WordPressブログをすぐに始められる。このブログも実際にXserverで運営しています。

Xserverを見てみる →

ムカイ
この記事を書いた人

ムカイ

個人事業主エンジニア。C#フルリモート案件に参画しながら、Claude Codeを使ってAI×副業の自動化・コンテンツ制作を実践中。「稼ぐ仕組みを作るのが好き」がモットー。

コメントを残す