SlideShare a Scribd company logo
1 of 22
Download to read offline
PHPカンファレンス北海道2024
全国700個以上の
路線バスGTFS-JPオープンデータを
毎⽇取得、反映し続けて得られた経験
2024年1⽉12⽇
バス停検索、バス時刻検索運営
⽇本バス情報協会 正会員
⻘い森ウェブ⼯房 代表 福⽥ 匡彦
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
1
・⻘森県⼋⼾市在住(四⼗代)
・東京で8年間ほど会社員ウェブプログラマー
・主な職歴
2000年 横浜市の開発会社へ⼊社(未経験)
3ヶ⽉後に雑誌「◯◯ウォーカー」ウェブサイト運営会社へ常駐
(この頃にPerlのCGIへ触れる)
・2004年 ゲーム会社「元気」へ転職
(この頃にPHPやMySQLを使い始める)
・2008年 地元⼋⼾市へUターンし、⻘い森ウェブ⼯房を開業
・2011年6⽉から全国対応「バス停検索」サービスを運営中
URL: https://buste.in/
〜このあたりからバスが趣味から仕事になり始める〜
・標準的なバス情報フォーマット(GTFS-JP)を広める活動へ参加する
福⽥の⾃⼰紹介
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
2
・「GTFS」という名前を聞いたこと
ありますか︖
・「GTFS」データを触れてみた事が
ある⽅いますか︖
・GTFS.JP 標準的なバス情報フォーマット
URL: https://www.gtfs.jp/
GTFSとは何者︖
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
3
「GTFS(General Transit Feed Specification)」
は、Googleが公開して世界標準となった公共交通情
報⽤フォーマットです。
⽇本の路線バス事情へ合わせたものが「標準的なバ
ス情報フォーマット(通称︓GTFS-JP)」です。
⽤途別の複数CSVテキストファイルをまとめてzip圧
縮し配布します。
標準的なバス情報フォーマット
(GTFS-JP)とは︖
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
4
・Googleへ送れば、Googleマップの経路検索へ載
せてもらえる︕(要契約)
→Googleマップへ出てこないバス路線は、⾛って
いないも同然という視点もあります
・オープンデータ公開すれば、誰かがそのデータで
公式よりも便利なサービスを作って公開してくれる
かも︖
→公式が不便なら⾃分達で作ってしまえの精神
GTFSデータを
作ればどうなる︖
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
5
⽇本国内のGTFS作成&オープンデータ化は年々進んでいるが、
地域格差が⼤きい状況。
なお、北海道内は函館地区を除き、データ整備率⾼し。
(2020年春頃、⼀気に整備されました︕)
(参考︓ https://gtfs-gis.jp/gtfs/map.html 2023年12⽉作成版)
GTFSデータは全国出てるの︖
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
6
「バス停検索」は、地図から全国のバス停を探せる無料
サービス
※2011年6⽉公開(12年前)
正確度の低い従来バス停データを補完するため、GTFS由来データ
も合わせて地図上へ表⽰等へ活⽤して
います。
URL: https://buste.in/
運営サービス1
全国のバス停を探せる「バス停検索」
バス停検索 検索
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
7
「バス時刻検索」は、全国のバス停や駅、電⾞停留所の
時刻表を探せる無料サービス
※2022年9⽉に公開(昨年)
「バス停検索」を補完する形で、GTFS
オープンデータ等を活⽤して、時刻情報に
特化したサービスです。
URL: https://bustime.jp/
運営サービス2
全国のバス停時刻を探せる「バス時刻検索」
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
8
※オープンデータ全件数は「公共交通オープンデータ⼀覧」で有効期限内のデータ数
を参考(2024/01/08確認)
これ以外に条件付き公開データ約30個でも時刻公開中です。
・公共交通オープンデータ⼀覧 (GTFS)
URL: https://tshimada291.sakura.ne.jp/transport/gtfs-list.html
「バス時刻検索」の
オープンデータ時刻表公開状況
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
9
647
全国のオープンデータ件数
約600
バス時刻検索で公開
・VPS(仮想専⽤サーバー)で稼働中
(当初は共有レンタルサーバ利⽤で、アクセス増により乗換)
・Webサーバ Apache
SSL(https)対応済み
・使⽤データベース MySQL
・主な使⽤⾔語 PHP、JavaScript、少しPython
・使⽤フレームワーク CakePHP
・地図 OpenStreetMap、国⼟地理院地図、leaflet(フレーム
ワーク)
(Google Maps APIから切替え)
PHPとMySQLが好きです︕
各サイトの動作環境
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
10
1.⼀⽇数回GTFSを⾃動ダウンロード
(いつ更新版公開されるか不明で、定期的なチェック必要)
↓
2.基本情報(feed_info.txt)の有効期間、
バージョン情報を確認し、前回と変更あれば更新版
と判断
↓
3.更新データを解析し、DBへ取り込む
↓
4.バス停情報や時刻情報として利⽤
GTFSデータを取り込む流れ
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
11
◆「file_get_contents」関数で取得できない
取得対象を拡⼤するにつれて、file_get_contentsで
ダウンロード時の取得エラーが徐々に増えました。
対策1︓まずは「User-Agent」情報を追加
対策2︓SSL関連オプション設定を追加
ここ3〜4年で⾃治体サイトでもSSL対応が増えるに
つれ、SSL証明書関連エラーが出る
GTFSダウンロード
で困る事(1)
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
12
◇記述例
$options = stream_context_create(array('ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false
)));
file_get_contents($target_url, false, $options);
・参考URL
・file_get_contentsが動かないときの対策【PHP】
https://self-
development.info/file_get_contents%E3%81%8C%E5%8B%95
%E3%81%8B%E3%81%AA%E3%81%84%E3%81%A8%E3%8
1%8D%E3%81%AE%E5%AF%BE%E7%AD%96%E3%80%90p
hp%E3%80%91/
GTFSダウンロード
で困る事(2)
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
13
対策3︓「wget」コマンド使⽤で解決
それでも解決できない場合、「wget」コマンドを使
⽤しています。
CDN等の別サーバへリダイレクトされる系に多い。
(file_get_contentsはリダイレクト対応ですが、うまくいかず…)
・コマンド例
/usr/bin/ wget --no-check-certificate <URL>
(「--no-check-certificate」オプションでSSL関連エラーを無視)
本当はfile_get_contentsなら、ファイル情報を戻り
値で取れて便利なのですが…
GTFSダウンロード
で困る事(3)
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
14
◆ダウンロードが固定URLではなく、可変URL
配信ページを⽬視等で確認や各配信サイト専⽤APIを
利⽤する⼿間が増える。
(※更新版の公開へ気づくのが遅れがちです)
アップロード毎にURL変わる仕様の⾃治体CMSも多
くあります…
可変URLデータは徐々に減っているものの、まだ⼆
百数⼗個あり、対応が⾯倒なところです…
(概ね固定URLだが、担当者次第で可変する可能性あ
るサイトも含む)
GTFSダウンロード
で困る事(4)
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
15
◆やたら応答が重いWebサーバがある
該当データだけ、タイムアウトを⻑くして対応。
(現在は応答早くなりました︕)
◆ブラウザからでは問題無いが、プログラムから取
得時に「403 Forbidden」エラーが返ってくる
Pythonから試しても同様の現象で、問い合わせても
そんな制限は⾏っていないとの事で、⼀旦使⽤を断
念した。
しかし、数カ⽉後に試すと問題解消したため、利⽤
開始した。(原因は謎なまま)
GTFSダウンロード
で困る事(5)
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
16
◆仕様が緩めなため、各カラムへ⼊るデータ内容が
定まらず、DBテーブル設計がしづらい
半⾓、全⾓⽂字いずれも使⽤でき、⽂字数の上限も
無い項⽬が多い。
(バス停を紐づけるIDですら、そんな仕様です…)
対策︓カラムのデータ型は「varchar」、サイズも
⼤きめの「256」にする事で、現状はデータが収
まっています。
(より⼤きいデータが登場する可能性ありますが…)
GTFSデータを
取り込む際の課題(1)
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
17
◆毎朝、更新版が公開されるデータへの対策
* 毎朝4時台に、当⽇有効開始となるデータ⼆⼗数個が公開さ
れます。
(岡⼭や熊本等リオス社(両備システムズ)配信と都営バス)
しかし、始発便出発までの時間が短く苦慮しています…
(始発バスまでに取込が間に合っていないかも…)
当初は朝4:30頃までに公開され、「4:45」ダウンロード開始
し取込だったが、昨年にもっと遅い時間の公開データが増え、
新たな対策が必要となった。
対策︓現在は2回取込とした
1回⽬で⼤半を取込、2回⽬で残り1〜3個取込としました。
GTFSデータを
取り込む際の課題(2)
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
18
◆⼤きい更新データの対策
特にデータサイズの⼤きい「都営バス」や「九州産
交バス」データも毎朝更新で⼤変です。
例えば、2024/01/06更新版「都営バス」GTFSは圧
縮時「7.3MB」、解凍後「78.6MB」もあります︕
そのうち、バス1便の1バス停につき1⾏となる
「stop_times.txt」(経由バス停と時刻等を記載)は
「約101万⾏」です︕(⽇により⾏数も変動)
データ取り込み時のSQL改善する等を⾏ないました。
GTFSデータを
取り込む際の課題(3)
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
19
対策1︓UPDATE⽂とINSERT⽂を数千件まとめて
実⾏する
ただし、プレースホルダの上限「65,535個」制限に
引っかからないデータ件数としています。
しかし、普段の⼤半はUPDATE⽂だが、ダイヤ改正
時等には差分も多く、INSERT⽂を⼤量実⾏で、普段
より数⼗分単位で取込時間かかります…
対策2︓トランザクションも活⽤
(当初は⾃動コミットされまくりで時間かかり…)
GTFSデータを
取り込む際の課題(4)
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
20
GTFS取込みを⾼速化する余地はありそ
うなため、ウェブサイトの⾼速化(重め
なSQL対策等)と合わせて今後も試⾏錯
誤していきます︕
その他に例えば、緯度経度を含む施設
情報オープンデータとGTFSを組み合わ
せると新たなサービス出来るのではと
妄想しています♪
今後も改善を⾏ないます︕
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
21
* ⻘い森ウェブ⼯房 代表 福⽥匡彦
* ご質問やお問い合わせは下記へ
URL: https://8nohe.info/work/
旧Twitter @8nohe
2024年1⽉12⽇
ご清聴ありがとうございました
青い森ウェブ工房 https://8nohe.info/work/ 2024/1/12
22

More Related Content

Similar to 全国700個以上の路線バスGTFS-JPオープンデータを毎日取得、反映し続けて得られた経験

浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみNaoyuki Yamada
 
地域情報アプリ
地域情報アプリ地域情報アプリ
地域情報アプリyohei iwakura
 
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったことメンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったことMembers_corp
 
全国から若者を集めるサブカルに特化したイベントをやりたい!
全国から若者を集めるサブカルに特化したイベントをやりたい!全国から若者を集めるサブカルに特化したイベントをやりたい!
全国から若者を集めるサブカルに特化したイベントをやりたい!さぶみっと!ヨクスル
 
全国から若者が集まるようなサブカルに特化したイベントをやりたい!
全国から若者が集まるようなサブカルに特化したイベントをやりたい!全国から若者が集まるようなサブカルに特化したイベントをやりたい!
全国から若者が集まるようなサブカルに特化したイベントをやりたい!Noriaki Sugimoto
 
インターネットを活用した移住促進について(第1回いなかみライフセミナー)
インターネットを活用した移住促進について(第1回いなかみライフセミナー)インターネットを活用した移住促進について(第1回いなかみライフセミナー)
インターネットを活用した移住促進について(第1回いなかみライフセミナー)Noriaki Sugimoto
 
今話題のChatGPTでウェブマーケティングを簡単かつ効果的に!
今話題のChatGPTでウェブマーケティングを簡単かつ効果的に!今話題のChatGPTでウェブマーケティングを簡単かつ効果的に!
今話題のChatGPTでウェブマーケティングを簡単かつ効果的に!Noriaki Sugimoto
 
2015.2.6神戸PHP勉強会おちゃのこネット
2015.2.6神戸PHP勉強会おちゃのこネット2015.2.6神戸PHP勉強会おちゃのこネット
2015.2.6神戸PHP勉強会おちゃのこネットMasaya Arimoto
 
ウェブクリエイターズ高知活動報告(JAWS FESTA 中四国 2017)
ウェブクリエイターズ高知活動報告(JAWS FESTA 中四国 2017)ウェブクリエイターズ高知活動報告(JAWS FESTA 中四国 2017)
ウェブクリエイターズ高知活動報告(JAWS FESTA 中四国 2017)Noriaki Sugimoto
 
2017年下期コーポレートフェロー募集資料 活動紹介 葛城友香さん
2017年下期コーポレートフェロー募集資料 活動紹介 葛城友香さん2017年下期コーポレートフェロー募集資料 活動紹介 葛城友香さん
2017年下期コーポレートフェロー募集資料 活動紹介 葛城友香さんCode for Japan
 
PWAをWebサービスに導入した話
PWAをWebサービスに導入した話PWAをWebサービスに導入した話
PWAをWebサービスに導入した話dobby618
 
オープンプロセスで変える調達改革
オープンプロセスで変える調達改革オープンプロセスで変える調達改革
オープンプロセスで変える調達改革Hal Seki
 
オープンプロセスで変える調達改革
オープンプロセスで変える調達改革オープンプロセスで変える調達改革
オープンプロセスで変える調達改革Code for Japan
 
Decade 20091215
Decade 20091215Decade 20091215
Decade 20091215武 河野
 
「八戸市営バスGTFS-JPデータ 作成プロジェクト」公共交通オープンデータ最前線 in インターナショナルオープンデータデイ2019
「八戸市営バスGTFS-JPデータ 作成プロジェクト」公共交通オープンデータ最前線 inインターナショナルオープンデータデイ2019「八戸市営バスGTFS-JPデータ 作成プロジェクト」公共交通オープンデータ最前線 inインターナショナルオープンデータデイ2019
「八戸市営バスGTFS-JPデータ 作成プロジェクト」公共交通オープンデータ最前線 in インターナショナルオープンデータデイ2019青い森ウェブ工房(福田匡彦)
 
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみたFlow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみたMasao Niizuma
 
Faye使って見てる話 at MF Geeks Night 2015.04.21
Faye使って見てる話 at MF Geeks Night 2015.04.21Faye使って見てる話 at MF Geeks Night 2015.04.21
Faye使って見てる話 at MF Geeks Night 2015.04.21Naoto Koshikawa
 
kintoneと○○をつないでみた
kintoneと○○をつないでみたkintoneと○○をつないでみた
kintoneと○○をつないでみたSakae Saito
 
お客様のための管理画面カスタマイズ
お客様のための管理画面カスタマイズお客様のための管理画面カスタマイズ
お客様のための管理画面カスタマイズCherry Pie Web
 

Similar to 全国700個以上の路線バスGTFS-JPオープンデータを毎日取得、反映し続けて得られた経験 (20)

浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
 
地域情報アプリ
地域情報アプリ地域情報アプリ
地域情報アプリ
 
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったことメンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
 
全国から若者を集めるサブカルに特化したイベントをやりたい!
全国から若者を集めるサブカルに特化したイベントをやりたい!全国から若者を集めるサブカルに特化したイベントをやりたい!
全国から若者を集めるサブカルに特化したイベントをやりたい!
 
全国から若者が集まるようなサブカルに特化したイベントをやりたい!
全国から若者が集まるようなサブカルに特化したイベントをやりたい!全国から若者が集まるようなサブカルに特化したイベントをやりたい!
全国から若者が集まるようなサブカルに特化したイベントをやりたい!
 
インターネットを活用した移住促進について(第1回いなかみライフセミナー)
インターネットを活用した移住促進について(第1回いなかみライフセミナー)インターネットを活用した移住促進について(第1回いなかみライフセミナー)
インターネットを活用した移住促進について(第1回いなかみライフセミナー)
 
今話題のChatGPTでウェブマーケティングを簡単かつ効果的に!
今話題のChatGPTでウェブマーケティングを簡単かつ効果的に!今話題のChatGPTでウェブマーケティングを簡単かつ効果的に!
今話題のChatGPTでウェブマーケティングを簡単かつ効果的に!
 
2015.2.6神戸PHP勉強会おちゃのこネット
2015.2.6神戸PHP勉強会おちゃのこネット2015.2.6神戸PHP勉強会おちゃのこネット
2015.2.6神戸PHP勉強会おちゃのこネット
 
ウェブクリエイターズ高知活動報告(JAWS FESTA 中四国 2017)
ウェブクリエイターズ高知活動報告(JAWS FESTA 中四国 2017)ウェブクリエイターズ高知活動報告(JAWS FESTA 中四国 2017)
ウェブクリエイターズ高知活動報告(JAWS FESTA 中四国 2017)
 
2017年下期コーポレートフェロー募集資料 活動紹介 葛城友香さん
2017年下期コーポレートフェロー募集資料 活動紹介 葛城友香さん2017年下期コーポレートフェロー募集資料 活動紹介 葛城友香さん
2017年下期コーポレートフェロー募集資料 活動紹介 葛城友香さん
 
PWAをWebサービスに導入した話
PWAをWebサービスに導入した話PWAをWebサービスに導入した話
PWAをWebサービスに導入した話
 
Val研究所
Val研究所Val研究所
Val研究所
 
オープンプロセスで変える調達改革
オープンプロセスで変える調達改革オープンプロセスで変える調達改革
オープンプロセスで変える調達改革
 
オープンプロセスで変える調達改革
オープンプロセスで変える調達改革オープンプロセスで変える調達改革
オープンプロセスで変える調達改革
 
Decade 20091215
Decade 20091215Decade 20091215
Decade 20091215
 
「八戸市営バスGTFS-JPデータ 作成プロジェクト」公共交通オープンデータ最前線 in インターナショナルオープンデータデイ2019
「八戸市営バスGTFS-JPデータ 作成プロジェクト」公共交通オープンデータ最前線 inインターナショナルオープンデータデイ2019「八戸市営バスGTFS-JPデータ 作成プロジェクト」公共交通オープンデータ最前線 inインターナショナルオープンデータデイ2019
「八戸市営バスGTFS-JPデータ 作成プロジェクト」公共交通オープンデータ最前線 in インターナショナルオープンデータデイ2019
 
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみたFlow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
 
Faye使って見てる話 at MF Geeks Night 2015.04.21
Faye使って見てる話 at MF Geeks Night 2015.04.21Faye使って見てる話 at MF Geeks Night 2015.04.21
Faye使って見てる話 at MF Geeks Night 2015.04.21
 
kintoneと○○をつないでみた
kintoneと○○をつないでみたkintoneと○○をつないでみた
kintoneと○○をつないでみた
 
お客様のための管理画面カスタマイズ
お客様のための管理画面カスタマイズお客様のための管理画面カスタマイズ
お客様のための管理画面カスタマイズ
 

全国700個以上の路線バスGTFS-JPオープンデータを毎日取得、反映し続けて得られた経験