# TransferTimeTokyo データ取得元と配布条件

最終確認日: 2026-08-09

TransferTimeTokyo 0.1.5 は、利用者のWindows PCが時刻表を取得し、
`TransferTimeData.pdb` をローカル生成してPalmへ送る。PRC、Windows Updater、
API token、時刻表PDB、取得cacheを別物として扱い、取得元の時刻表を配布ZIPへ同梱しない。

本書は実装時点の整理であり、各事業者の提供期間や利用条件を置き換えるものではない。
UpdaterはODPT APIの路線候補を列挙し、GTFSデータリポジトリAPI v2から東京都で
当日有効なオープンライセンスfeedも選択できる。ODPT CKANのGTFS専用バスについては
許可されたdatasetページを低頻度で読み、有効期間とlicenseを確認して当日版へ追従する。
東京メトロ公式の印刷用時刻表PDF、JR東日本公式駅時刻表、利用者指定のHTTPS URLまたは
ローカルZIPにも対応する。

## 取得元を選ぶ際の推奨順位

1. 公共交通オープンデータセンター（ODPT）の公開APIまたは静的GTFS
2. 東京メトロ公式の印刷用時刻表PDF（東京メトロの個人用既定経路）
3. ODPT基本ライセンスのAPIまたはGTFS（利用者自身のtokenでローカル取得）
4. JR東日本公式駅時刻表（個人用、低頻度cache取得）
5. GTFSデータリポジトリの有効なGTFS-JP feed
6. 利用者CSV

Challenge 2026データは単なる個人利用の候補に含めない。応募者が応募作品の開発目的を
満たす場合だけ、通常の取得元とは分離した明示設定で扱う。

祝日だけで事業者固有の運行日を推測してはならない。日付別ダイヤの優先順位は次の通り。

1. ODPT `odpt:Calendar` の `odpt:day`（Specific Calendar）
2. GTFS `calendar_dates.txt`
3. GTFS `calendar.txt`
4. 内閣府「国民の祝日」CSVによる通常の平日／土曜／日曜祝日判定

Specific Calendarには、お盆、年末年始、催事日など国民の祝日ではない日も含まれる。
Updaterはその日付と専用ダイヤをTTT1のspecial profile/date mapへ収録する。

## APIとファイル形式

### 東京メトロ公式印刷用時刻表PDF（個人用）

- 駅・時刻表案内: https://www.tokyometro.jp/station/
- 乗換・時刻表案内: https://transfer.tokyometro.jp/website/timetable

東京メトロの個人用既定経路はODPT APIではなく、東京メトロ公式hostが公開する印刷用
時刻表PDFである。Updaterへ `Y21`、`M17`、`Mb03` のような駅ナンバリングを入力すると、
案内サービスの適用期間付き版情報から対象日の現行版を解決し、公式PDFの駅名、路線名、
駅ナンバリング、方面、平日、土曜・休日を意味検証してから登録する。ODPT tokenは不要で、
土曜にはPDFの土曜・休日ダイヤを展開する。

版情報と意味検証済みPDFは24時間cacheする。再取得した応答が通信・サイズ・host・版・
駅・時刻表の検証を通らない場合はcacheを置換せず、検証済みlast-goodを使う。現行版を
解決できない場合は、登録時に検証済みの版をfallback候補にする。cacheと生成PDBは利用者の
PC内だけに置く。この経路は `publication_policy=personal_only`、`license_class=local` で、
`public` profileは登録を拒否する。公開配布ZIP、公開PDB、第三者向けcacheへはPDFやそこから
抽出した時刻表を同梱しない。ODPT Basicは利用者自身のtokenで使える任意の代替経路である。

### ODPT

- 公式サイト: https://www.odpt.org/
- データカタログ: https://ckan.odpt.org/dataset
- API仕様: https://developer.odpt.org/documents
- 開発者登録: https://developer.odpt.org/

公開データのAPI baseは `https://api-public.odpt.org/api/v4` で、CC0または
CC BYのデータはtokenなしで取得できる。基本ライセンスのAPI baseは
`https://api.odpt.org/api/v4` で、利用者自身のtokenを
`acl:consumerKey=...` query parameterとして渡す。tokenは設定保存時にも
Windows Credential Manager等の保護領域を使い、PDB、ログ、ZIP、Gitへ入れない。

Challenge 2026は別の期間限定ライセンスであり、上記Basic APIと同等の
個人利用ソースとして扱わない。0.1.5の主要4事業者導線、CKAN自動解決、
GTFSデータリポジトリ候補からは除外する。

主な静的endpointは次の通り。

- 鉄道駅時刻表: `GET /odpt:StationTimetable`
- バス停時刻表: `GET /odpt:BusstopPoleTimetable`
- 便単位バス時刻表: `GET /odpt:BusTimetable`
- 運行日カレンダー: `GET /odpt:Calendar`

鉄道では `odpt:stationTimetableObject[].odpt:departureTime`、バス停では
`odpt:busstopPoleTimetableObject[].odpt:departureTime` を読む。一部のバス事業者は
バス停時刻表を提供せず、`odpt:BusTimetable` の
`odpt:busTimetableObject[]` から対象停留所を組み立てる必要がある。

ODPT FAQ記載の1応答上限は、静的データが原則1,000件、`odpt:BusstopPole`が
10,000件である。絞り込みqueryを使い、全件同期が必要な場合はカタログで提供される
`/RDF_TYPE.json` dumpを使う。取得件数が上限と同じ場合に「全件取得済み」と推測しない。

静的GTFSの公式例:

- 都営交通 鉄道:
  https://api-public.odpt.org/api/v4/files/Toei/data/Toei-Train-GTFS.zip
- 都営バス:
  https://api-public.odpt.org/api/v4/files/Toei/data/ToeiBus-GTFS.zip
- 東京メトロ（個人用PDFに代わる任意経路、token必須）:
  `https://api.odpt.org/api/v4/files/TokyoMetro/data/TokyoMetro-Train-GTFS.zip`

認証GTFSの `feed_url` にtoken queryを保存してはならない。UpdaterはWindows資格情報から
tokenを実行時だけ読み、HTTP requestへ `acl:consumerKey` を付加する。設定URLに
`acl:consumerKey`、`token`、`apiKey` 等が含まれる場合は入力を拒否する。

ファイル名に日付や版が入る事業者があるため、URLを推測して固定しない。Updaterは
`ckan.odpt.org/robots.txt` で許可された `/dataset` ページだけを10秒間隔で読み、
GTFS/GTFS-JPかつバスタグのdatasetを検索する。Basicまたはopen license、開始日と終了日が
ともに明記された当日有効resource、公式ODPT download URLを確認して登録する。
`valid_to` のないresourceは現行性を推測せず、自動登録しない。Challenge datasetは
resourceページを読む前に個人用解決から除外する。

### GTFS-JPとGTFSデータリポジトリ

- 国土交通省 GTFS-JP: https://www.mlit.go.jp/commmmons/document/007/
- GTFSデータリポジトリ: https://gtfs-data.jp/
- リポジトリAPI v2（beta）: https://docs.gtfs-data.jp/api.v2.html
- リポジトリAPI base: `https://api.gtfs-data.jp`

2026-03-19公開のGTFS-JP v4を基本とし、v3以前のoptional列がないfeedも受け付ける。
`stop_times.txt`、`trips.txt`、`routes.txt`、`calendar.txt`、
`calendar_dates.txt`をIDで結合する。`24:07:00` のような24時超時刻を
翌暦日の00:07へ丸めず、サービス日からの分として保持する。`pickup_type`で乗車不可の
停留所を除外し、`frequencies.txt` がある場合は展開するか未対応として明示的に拒否する。
feedの有効開始・終了日はPDB全体のcoverageへ反映し、期限後にbaseダイヤを延長表示しない。

リポジトリAPIの主なendpoint:

- `GET /v2/files?pref=13&target_date=YYYY-MM-DD`
- `GET /v2/feeds?pref=13`
- `GET /v2/organizations/{organization}/feeds/{feed}`
- `GET /v2/organizations/{organization}/feeds/{feed}/files/feed.zip?uid={file_uid}`

Updaterは東京時間の当日を `target_date`、東京都を `pref=13` として `/v2/files` を検索する。
応答をそのまま信用せず、都道府県、有効開始・終了日、UUID、公式download URLとのUID一致、
更新日時、CC0 1.0またはCC BY 4.0のライセンスURLを再検証し、有効な候補だけを表示する。
登録時には提供者ID/feed IDも保存し、定期更新ごとに当日有効なUIDへ解決し直す。該当feedが
失効または消滅した場合は固定した古い時刻表へ黙って戻らず更新を失敗させ、前回の正常な
PDBを保護する。利用者が直接指定したURL/ZIPは自動解決の対象外である。

2026-08-09を対象日にした東京都feedは、荒川区・葛飾区の「さくら」、国立市
「くにっこ」等の区市町村・島しょ部の交通が中心であり、東京メトロ、JR、都営地下鉄、
都営バスをすべて代替するものではない。東京メトロの個人用既定経路には公式印刷用PDF、
都営地下鉄・都営バスには公開ODPTを優先する。東京メトロのODPT Basicは任意代替とし、
JRをODPT Challengeの既定候補にはしない。

### JR東日本公式駅時刻表（個人用）

- 駅検索: https://timetables.jreast.co.jp/
- 固定駅ページ例: https://timetables.jreast.co.jp/timetable/list1039.html

Updaterは `timetables.jreast.co.jp` の公開HTMLだけを対象とし、認証回避、CAPTCHA回避、
非公開endpointの推測は行わない。駅検索で固定の `listNNNN.html` を選び、路線名と方面を
設定へ保存する。定期更新時は固定駅ページから現行改訂月の平日ページと土曜・休日ページを
解決するため、月が替わっても個別URLを固定しない。別host、HTTP downgrade、不正port、
駅IDや改訂月の不一致を拒否する。

HTML応答は6時間cacheするが、路線表・曜日・発車時刻としての意味検証に失敗したcacheは
直ちに破棄する。`data-misc` に運転日条件がある列車は週3区分だけでは正しく表現できないため
収録せず、除外件数を画面・log・CLIへ警告する。PDBのJR schedule coverageは生成日の前日から
31日後までに制限し、毎日の自動更新で延長する。取得失敗時は新しいPDBを書かず、最後の
正常なPDBを保持する。この経路は `personal_only` であり、公開profileでは登録を拒否する。

### 国民の祝日

- 内閣府説明ページ: https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
- CSV: https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv
- 内閣府サイト利用規約: https://www.cao.go.jp/notice/rule.html
- 公共データ利用規約1.0: https://www.digital.go.jp/resources/open_data/public_data_license_v1.0

CSVは固定URLで、正式なversioned APIや可用性保証はない。2026-08-08時点ではBOMなしの
Windows-31J（CP932）、見出しは
`国民の祝日・休日月日,国民の祝日・休日名称`、日付は `YYYY/M/D` である。
振替休日と国民の休日は既に行として含まれる。Updaterは更新時にCSVを取得し、decode・
見出し・日付順・当年と翌年のcoverageを検証してから正常cacheを置換する。取得または
検証失敗時は最後の正常cacheを使う。0.1.5はETag/Last-Modifiedによる条件付きGETを行わない。

## 2026-08-09時点のデータ源調査と対応範囲

次表は入手可能なデータ源とadapter対応を示す。東京メトロ公式印刷用PDF、ODPT JSON、
ODPT配布バスGTFS、東京都のGTFSデータリポジトリ、JR東日本公式駅時刻表はUpdaterから
選択できる。それ以外のGTFSは利用者が有効なfeed URL/ZIPとlicenseを確認して指定する。

`公開` はtokenなしのCC0/CC BY、`個人用` は公開配布へ転用しないローカル取得、`基本` は
利用者登録とtokenが必要、`Challenge` はChallenge 2026への応募目的および期間制限付き、
`不足` は標準providerだけでは自動coverageできないことを表す。

### 鉄道

| 区分 | 事業者・路線 | 0.1.5での扱い |
|---|---|---|
| 公開 | 都営地下鉄、東京さくらトラム、日暮里・舎人ライナー | ODPT CC BY JSON/GTFS |
| 個人用 | 東京メトロ | 公式印刷用PDF、現行版解決、24時間cache、token不要 |
| 基本（任意代替） | 東京メトロ | ODPT基本ライセンス、利用者token |
| 基本 | つくばエクスプレス、りんかい線、多摩モノレール、ゆりかもめ | ODPT基本ライセンス、利用者token |
| 基本（周辺） | 横浜市営地下鉄 | ODPT基本ライセンス、東京圏登録として任意提供 |
| 個人用 | JR（JR東日本公式駅時刻表に掲載される駅・路線） | 駅名検索、現行平日/土休日HTMLを低頻度取得 |
| Challenge | 小田急、京急、相鉄、京王、東武、西武、東急等の対象データ | 調査上の区分。0.1.5の自動候補には採用しない |
| 不足 | 京成など上記カタログに駅時刻表がない事業者・区間 | 利用者CSV。公開版では権利確認を促す |

東京メトロの個人用既定経路は公式印刷用PDF、JRの既定経路はChallengeではなく公式駅
時刻表である。各ページに掲載されない路線、事業者固有の臨時運転条件、リアルタイム運休は
coverage外である。

### バス

| 区分 | 事業者 | 0.1.5での扱い |
|---|---|---|
| 公開 | 都営バス | ODPT CC BY JSON/GTFS |
| 基本 | 東急バス、西武バス | ODPT JSON、事業者によりGTFSも利用 |
| 基本 | 関東バス、京王バス、西東京バス、小田急バス | ODPT配布GTFSをカタログから有効期間付きで選択 |
| Challenge | 国際興業バス、東武バス、神奈川中央交通 | 調査上の区分。0.1.5の自動候補には採用しない |
| 補完 | GTFSデータリポジトリ掲載の都内コミュニティ交通 | Updaterが当日の有効日・UID・CC licenseを確認 |
| 不足 | 京成系の一部、JRバス関東など上記にない路線 | 利用者CSV |

ODPTの旧JSON提供が終了してGTFSへ移った事業者がある。GTFS-onlyバスはカタログ検索、
Basic/open判定、有効期間、公式URLを自動検証する。終了日の記載がないdatasetは自動採用せず、
利用者CSVまたは権利・有効性を確認した手動GTFSへ回す。

## ライセンスと配布profile

`personal` と `public` は別のEXE/PRCではなく、同じUpdaterの生成policyである。
公開配布ZIPはPRC、Updater、文書だけを収録し、取得済みPDB、時刻表cache、tokenを
同梱しない。`public` は東京メトロ公式PDF、JR公式HTML、ODPT Basic、Challenge、
権利未確認の任意GTFS/CSVをエラーにし、黙って路線を落としたPDBを作らない。

### 公開データ

CC0は条件なしで再利用できる。CC BY 4.0および内閣府の公共データ利用規約1.0は、
出典を表示して利用する。`THIRD_PARTY_NOTICES.txt` は一般的な取得元を示すが、0.1.5は
dataset固有の帰属文・カタログ版・取得日を自動抽出しない。利用者は選択したカタログや
feedの表示条件を確認し、公開時に必要な帰属を追加する。

- Creative Commons Attribution 4.0:
  https://creativecommons.org/licenses/by/4.0/

### 東京メトロ公式印刷用時刻表PDF

公開されていることを、取得したPDF、抽出時刻表、cache、生成PDBを第三者へ再配布できる
根拠とは扱わない。0.1.5は個人用ローカル取得に限定し、`public` profileでは拒否する。
公開版を検討する際は、別途公開可能なデータ源へ差し替えるか、利用者自身の権利確認を伴う
CSV importを用い、この個人用cacheやPDBを配布物へ転用しない。

### ODPT基本ライセンス

- 規約: https://developer.odpt.org/terms/data_basic_license.html

成果物の利用はできるが、取得データそのもの、または全部・大部分を復元できる
加工データの複製、送信、第三者提供はしない。公開配布ではPDBを同梱せず、各利用者が
自分のtokenで取得して自分のPC上でPDBを生成する。tokenも配布・共有しない。

### 公共交通オープンデータチャレンジ2026

- 応募要項: https://challenge2026.odpt.org/ja/outline.html
- ライセンス: https://developer.odpt.org/challenge_license

Challengeデータは「個人利用なら自由」ではない。Challengeへ応募する意思と応募作品の
開発目的が必要で、応募締切は **2027-01-11 23:59 JST**。ライセンスに基づく利用可能期間は
**2027-03-14まで**である。そのため、0.1.5はChallengeを通常の自動候補から除外する。
互換用手動設定で `challenge` を使う場合は明示的なopt-inを必須とし、期限後は取得を
停止し、Challenge routeを含む既存の出力PDB全体を削除してエラーにする。0.1.5は時刻表cacheや
Challenge路線を除いた自動再生成を行わない。Challengeデータまたは大部分を復元できる
派生データをZIPや公開PDBへ同梱しない。

### 利用者CSV

CSVは利用者自身が権利を確認してローカルimportする。初期値は`personal_only`とし、
公開可能と利用者が明示した場合だけpublic profileで許可する。UpdaterはCSVそのものを
release ZIPへ自動コピーしない。

## 実装上のprovider class

Updaterは各登録の設定に次の`license_class`を保存し、UI名や事業者名の文字列比較で
配布可否を決めない。ODPT CKAN自動解決はカタログのBasic/openを検査し、
GTFSデータリポジトリはCC0/CC BYを `open` として検証する。利用者指定の任意GTFSとCSVは、
利用者が出典と権利を確認してclassを選ぶ。

| `license_class` | 用途 | PDB同梱 |
|---|---|---|
| `open` | CC0、CC BY、公共データ利用規約 | 帰属条件を満たす場合のみ可。ただし0.1.5 ZIPでは同梱しない |
| `odpt_basic` | ODPT基本ライセンス | 不可。利用者PCで生成 |
| `challenge` | Challenge 2026 | 不可。応募目的・期限を強制 |
| `local` | 東京メトロ公式PDF、JR公式HTML、利用者指定GTFS/CSV | 東京メトロとJRは同梱不可。任意GTFS/CSVは利用者が権利を明示した場合だけ |

取得失敗、適用期間外、decode失敗、Specific Calendar不整合時は新しいPDBを書かず、
原則として最後の正常なPDBを保持する。0.1.5が自動判定するlicense期限はChallenge 2026
のみである。Challenge bitを含む既存PDB、または期限後もChallenge登録が残る設定の
outputは削除し、fallbackに使わない。この判定は利用者が選んだ`license_class`に依存する。
