マイルデータ管理
概要
ANA・JALの特典航空券に必要なマイル数のデータ構造と、シーズン判定ロジックを定義する。
ANA マイレージクラブ
国内線 特典航空券 必要マイル数
ANA国内線はシーズン(L/R/H)と区間で必要マイルが決まる。
| シーズン | 区分 | 時期の目安 |
|---|---|---|
| L(ローシーズン) | 閑散期 | 1月中旬〜2月、4月、12月前半 |
| R(レギュラーシーズン) | 通常期 | 上記以外 |
| H(ハイシーズン) | 繁忙期 | 年末年始、GW、お盆、3連休 |
区間別必要マイル(片道・エコノミー)
| 区間例 | L | R | H |
|---|---|---|---|
| 東京 ↔ 大阪 | 5,000 | 6,000 | 7,500 |
| 東京 ↔ 札幌 | 6,000 | 7,500 | 9,000 |
| 東京 ↔ 福岡 | 6,000 | 7,500 | 9,000 |
| 東京 ↔ 沖縄 | 7,000 | 9,000 | 10,500 |
| 大阪 ↔ 札幌 | 6,000 | 7,500 | 9,000 |
| 大阪 ↔ 沖縄 | 6,000 | 7,500 | 9,000 |
※ 上記は代表例。正式データはANA公式サイトのマイルチャートを参照。
ANA トクたびマイル
通常より少ないマイルで利用できる期間限定キャンペーン。対象路線・期間は随時変更。
- 通常の30〜50%のマイルで利用可能
- 対象便・期間はANA公式サイトで確認が必要
- 自動取得は困難(手動確認 or スクレイピング)
JAL マイレージバンク
国内線 特典航空券 必要マイル数
JALは「通常マイル」と「JAL国内線特典航空券PLUS」の2種類がある。
通常マイル(片道)
| 区間例 | 必要マイル |
|---|---|
| 東京 ↔ 大阪 | 6,000 |
| 東京 ↔ 札幌 | 7,500 |
| 東京 ↔ 福岡 | 7,500 |
| 東京 ↔ 沖縄 | 9,000 |
JAL国内線特典航空券ディスカウント
通常より少ないマイルで利用できる設定期間あり。
| 区間例 | ディスカウント |
|---|---|
| 東京 ↔ 大阪 | 4,000 |
| 東京 ↔ 札幌 | 5,000 |
| 東京 ↔ 福岡 | 5,000 |
| 東京 ↔ 沖縄 | 6,000 |
※ ディスカウントの設定期間はJAL公式サイトで要確認。
データ取得・更新方針
Phase 1(MVP): 手動入力
ANA/JAL 公式サイト
↓ 手動確認
マイルチャートJSON / SQL
↓ シードデータ
SQLite DB- ANA: 公式マイルチャート(PDF/Web)から転記
- JAL: 公式マイルチャート(PDF/Web)から転記
- 年1〜2回の更新で十分(マイルチャートは頻繁に変わらない)
Phase 2: 半自動更新
公式サイト → PDFダウンロード → パーサーで抽出 → DB更新リスクと制約
| 方法 | リスク |
|---|---|
| スクレイピング | 利用規約違反の可能性、構造変更で壊れる |
| PDF解析 | フォーマット変更で壊れる |
| 手動入力 | 人的コスト、更新遅延 |
推奨: Phase 1 は手動入力。マイルチャートのデータ量は限定的(路線数 × シーズン数)なので手動でも十分管理可能。
シーズン判定ロジック
javascript
function getAnaSeason(date) {
// seasons テーブルから該当日のシーズンを取得
const season = db.prepare(`
SELECT season_type FROM seasons
WHERE airline = 'ANA'
AND ? BETWEEN start_date AND end_date
`).get(date);
return season?.season_type || 'R'; // デフォルトはレギュラー
}
function getMilesRequired(airline, origin, destination, date, seatClass) {
const season = airline === 'ANA'
? getAnaSeason(date)
: getJalSeason(date);
return db.prepare(`
SELECT miles_required FROM mile_charts
WHERE airline = ?
AND origin_code = ?
AND destination_code = ?
AND season = ?
AND seat_class = ?
`).get(airline, origin, destination, season, seatClass);
}空港マスタデータ
日本国内の主要空港(約30空港)をシードデータとして準備。
| コード | 名称 | 都市 | 都道府県 | 地方 |
|---|---|---|---|---|
| HND | 羽田空港 | 東京 | 東京都 | 関東 |
| NRT | 成田空港 | 成田 | 千葉県 | 関東 |
| CTS | 新千歳空港 | 札幌 | 北海道 | 北海道 |
| KIX | 関西国際空港 | 大阪 | 大阪府 | 関西 |
| ITM | 伊丹空港 | 大阪 | 大阪府 | 関西 |
| FUK | 福岡空港 | 福岡 | 福岡県 | 九州 |
| OKA | 那覇空港 | 那覇 | 沖縄県 | 沖縄 |
| NGO | 中部国際空港 | 名古屋 | 愛知県 | 中部 |
| SDJ | 仙台空港 | 仙台 | 宮城県 | 東北 |
| HIJ | 広島空港 | 広島 | 広島県 | 中国 |
| KOJ | 鹿児島空港 | 鹿児島 | 鹿児島県 | 九州 |
| KMQ | 小松空港 | 小松 | 石川県 | 北陸 |
| MYJ | 松山空港 | 松山 | 愛媛県 | 四国 |
| ISG | 石垣空港 | 石垣 | 沖縄県 | 沖縄 |
| MMY | 宮古空港 | 宮古島 | 沖縄県 | 沖縄 |