# Windows データ取得 — これだけやる（STEP 手順）

**目的:** `keiba.db` の確定単勝オッズ（`NL_O1.TanOdds`）を増やし、サーバーへ送って p6 を正しく動かす。

**やる場所:** あなたの Windows PC（`C:\Users\oshim\jrvltsql`）

**今の状態（2026-06 時点）:**
- `races_with_tanodds` ≈ 6,734 → **足りない**（目標 18,000 以上）
- `NL_RA_2020` ≈ 6,297 → レースは入っているがオッズが空

**やらないこと:** `--spec O1`、`--option 1` だけの過去一括、quickstart フル(3)+時系列、Manus に無い `download` コマンド

**取得のルール（固定）:**

| ルール | 内容 |
|--------|------|
| **1年ずつ** | いきなり 2020〜2026 一括はしない |
| **順番** | 2020 → 件数確認 → OK なら 2021 → … |
| **1年のコマンド** | `--from YYYY0101 --to YYYY1231 --spec RACE --option 4` |
| **次の年へ** | その年のオッズが十分（または Imported > 0）になってから |
| **70分いても 0件** | 待ち続けない。`Ctrl+C` で止めて同じ年を再実行 or 報告 |
| **fetch 中** | `keiba.db` を触る別プログラムを開かない（件数確認も完了後） |

**`database is locked` が出たら:** 別の fetch / DB 閲覧ツール / python 件数確認が同時に動いていないか確認 → 全部止める → 30秒待つ → 2020年 fetch を1本だけ再実行。詳細: `docs/ops_jv_manus_guides_errata.md`

---

## STEP 1 — JV-Link が動いているか確認

**どこで:** Windows のコマンドプロンプト（cmd）

**貼るブロック（1回）:**

```bat
cd /d C:\Users\oshim\jrvltsql
venv32\Scripts\jltsql.exe status
```

| 表示 | 意味 |
|------|------|
| **利用可能**（緑） | jltsql のモジュール OK |
| **利用不可**（赤）＋下に `Status: Ready` | **必ずしも JV-Link 障害ではない**（古い jltsql の表示バグ）。**STEP 1-2 へ** |

**SSH トンネルはこの手順では不要。** トンネルは Linux サーバーから JV を取る別ルート用。Windows の jrvltsql は PC 上の JV-Link に直接つなぐ。

---

## STEP 1-2 — JV-Link 本体が正常か確認（ここが本当の STEP 1）

**JV-Link 設定で「ご使用のJV-Linkは正常です」が出ていれば OK。**

まだ出ていなければ:

### STEP 1-2-A — Windows サービス（任意）

1. `Win + R` → `services.msc` → Enter
2. **JVLinkAgent** → 止まっていれば開始、動いていれば再起動

### STEP 1-2-B — JV-Link 設定アプリ（スクショの確認）

1. **JV-Link 設定** を開く
2. **「状態を取得する」** → **「ご使用のJV-Linkは正常です」** になるか

**認定情報エラーなら:** 競馬ソフト終了 → JV-Link 再インストール  
https://dl.cdn.jra-van.ne.jp/datalab/JV-Link/web/JV-Link.exe

### STEP 1-2-C — COM 接続の最終確認（cmd に1回貼る）

```bat
cd /d C:\Users\oshim\jrvltsql
venv32\Scripts\python.exe -c "import win32com.client;j=win32com.client.Dispatch('JVDTLab.JVLink');print('JVInit=',j.JVInit('TEST'))"
```

| `JVInit=` | 意味 | 次 |
|-----------|------|-----|
| **0** | JV-Link OK | **STEP 2 へ** |
| **-103** など | 契約・キー問題 | エラー番号を報告 |
| クラスが登録されていません | 32bit Python 以外の可能性 | venv32 を使っているか確認 |

**JV-Link 設定が正常 かつ JVInit=0 なら STEP 1 完了。** `jltsql status` が赤のままでも STEP 2 に進んでよい。

---

## STEP 2 — 確定オッズを含む RACE データを取得（本番作業）

**前提: STEP 1-2 で JV-Link「正常」かつ `JVInit=0`。トンネルは不要。**

**まず 2020年だけ。** 成功を確認してから 2021, 2022 … と増やす。

**貼るブロック（2020年・1回）:**

```bat
cd /d C:\Users\oshim\jrvltsql
venv32\Scripts\jltsql.exe fetch --from 20200101 --to 20201231 --spec RACE --option 4
```

**option 4 初回:** 画面に「ダイアログが表示されます」と出たら、**タスクバー / Alt+Tab で JV-Link のダイアログを探して OK**。これを押さないと何時間も 0% のまま。

**成功の見え方:**
- 数分以内に **ファイル / レコードが 0 以外** に動き始める
- 最後に `Imported` が **0 より大きい**
- `Failed: 0` に近い

**失敗の見え方（待ち続けない）:**
- **30〜60分いても ファイル:0 レコード:0 のまま** → `Ctrl+C` で止める
- `-111` など JVOpen エラー → STEP 1 をやり直し
- `Imported: 0` だけどファイルは動いた → STEP 3 で件数確認。増えなければ STEP 6

**2020 が OK なら 2021（年だけ変える）:**

```bat
cd /d C:\Users\oshim\jrvltsql
venv32\Scripts\jltsql.exe fetch --from 20210101 --to 20211231 --spec RACE --option 4
```

2022 以降も同じ形。2026年は `--to 20261231` または今日の日付。

---

## STEP 3 — オッズ件数を確認

**STEP 2 が終わってから** 実行。

**貼るブロック（1回）:**

```bat
cd /d C:\work\ai-horse-race.maspis.com.gitclone\scripts\windows
check_odds_count.bat
```

| 結果 | 次にやること |
|------|----------------|
| **18,000 以上** | STEP 4 へ |
| **6,734 付近のまま** | **STEP 3-B へ** |
| 6,734 より増えたが 18,000 未満 | STEP 2 をもう一度（同じコマンド） |

※ bat が無い場合も **同じブロックで OK**（bat 内で git pull → scp まで自動）。

---

## STEP 3-B — DataKubun 確認（TanOdds が少ないとき必須）

蓄積データでは確定オッズが **DataKubun=5（確定・月曜）** のことが多い。`4` だけ見ても 0 件になり得る。

**貼るブロック（2026年・1回）:**

```bat
cd /d C:\work\ai-horse-race.maspis.com.gitclone\scripts\windows
check_o1_datakubun.bat 2026
```

**見る行:**

```
races with TanOdds (confirmed kubun):
  kubun in (4,5):    ← この数字
```

| 結果 | 次 |
|------|-----|
| **NL_RA に近い（例: 1,200〜1,500+）** | データは足りている → サーバー取込で `DataKubun 4,5` 対応（開発側）→ STEP 4 |
| **457 付近のまま** | 取得不足 → STEP 6（quickstart）または年単位 RACE option 4 |

---

## STEP 4 — keiba.db をサーバーへ送る

**STEP 3 で 18,000 以上になってから。**

**貼るブロック（1回）:**

```bat
scp C:\Users\oshim\jrvltsql\data\keiba.db root@163.44.117.9:/root/keiba.db
```

パスワードを聞かれたら入力。

**成功の見え方:** エラーなく終了し、転送完了のメッセージが出る。

---

## STEP 5 — サーバーで取込と p6 再予想

**どこで:** サーバーに SSH ログインしたあと

**貼るブロック（1回）:**

```bash
cd /var/www/html/tools.kachiumaai.com
./scripts/backfill_odds_pipeline.sh /root/keiba.db --repredict
```

**成功の見え方:** オッズ取込完了 → p6 再予想 `done ok=... err=0` に近い表示。

---

## STEP 6 — 困ったとき（STEP 2 や STEP 3 で詰まったら）

ここまでやって **報告してほしい数字（コピペ）:**

1. STEP 2 の最後の `Imported` / `Parsed` / `Failed`
2. STEP 3 の `races_with_tanodds`

**自分で試す最終手段（STEP 2 が何度も Imported 0 のときだけ）:**

```bat
cd /d C:\Users\oshim\jrvltsql
quickstart.bat
```

対話の答えだけ固定:

| 質問 | 答え |
|------|------|
| DB | SQLite |
| モード | **1) 簡易** |
| 開始日 | `2020-01-01` |
| 時系列オッズ | **N** |

---

## 参照（詳細・背景）

- Manus 正誤一覧: `docs/ops_jv_manus_guides_errata.md`
- Manus メモ: `docs/ops_jv_manus_setup_notes.md`
- コマンドの貼り方: `docs/ops_windows_cmd_guidelines.md`
- -111 などの説明: `docs/ops_jv_o1_odds_troubleshooting.md`
