Google Maps Distance Matrix は便利ですが、配送計算で大量に叩くと課金がえぐい。(OSM)と OSRM( Routing Machine)を使えば、自前ホストでルート計算を内製化できます。
OSM ベースの配送計算スタック
| コンポーネント | 役割 | 実体 |
|---|---|---|
| OSM データ | 地理ベースマップ | PBF ファイル(地域別ダウンロード可) |
| OSRM | ルート計算エンジン | でホスト可能 |
| Nominatim | 住所→座標 変換 | OSM 公式の Geocoder |
| pgrouting | PostgreSQL でグラフ処理 | 高度なルーティング |
コスト比較:Google vs OSRM 自前
| 項目 | Google Distance Matrix | OSRM 自前 |
|---|---|---|
| 100万呼び出し/月 | 約 $5,000 | EC2 t3.medium ~ $30 |
| セットアップ | API キーのみ | 1日(Docker) |
| 更新頻度 | Google 任せ | 週次で OSM 取り込み |
| 対応国 | 全世界 | OSM カバー範囲(実質全世界) |
配送最適化への適用
OSRM API(自前ホスト)の呼び出し
Python
import requests
OSRM_HOST = "http://osrm:5000" # Dockerの自前OSRM
def get_route(from_coord, to_coord): """A→B のルートと所要時間を取得""" url = f"{OSRM_HOST}/route/v1/driving/{from_coord};{to_coord}" res = requests.get(url, params={"overview": "false"}) data = res.json() if data["code"] != "Ok": return None return { "duration_sec": data["routes"][0]["duration"], "distance_m": data["routes"][0]["distance"], }で配送最適化ジョブを構築
prompt:配送ルート最適化
自社の配送センターと配送先データから、OSRMを使った配送ルート最適化ジョブを構築してください。
## 入力
- BigQuery: `logistics.delivery_centers`(30箇所)
- {{bigquery|*}}: `logistics.daily_orders`(日次1万件)
- OSRM Docker(既にホスト済み: http://osrm:5000)
## 必要な処理
1. 各注文を最寄り配送センターに割り当て(OSRM での実走距離)
2. センター単位で配送ルートを最適化(TSP/巡回セールスマン問題)
3. 1台あたりの想定積載量で分割
4. 過去30日のGoogle Maps API利用と比較してコスト試算
5. ルート提案を {{looker-studio|*}} で地図可視化
## 出力
- ジョブスクリプト
- ルート割当 mart テーブル
- コスト削減レポート 想定される実行結果(例示)
## 配送ルート最適化 完成
### コスト削減
- 旧: Google Maps Distance Matrix API
- 月間呼び出し: 240万 → 月額 $1,200
- 新: 自前 OSRM (EC2 t3.medium)
- 月額: $32 + 運用工数 0.1人月
- **削減: 月 $1,168(年間 $14,000)**
### ルート最適化結果
- 30配送センター × 1日333件平均
- 旧(最寄り単純割当): 1日合計走行距離 8,400 km
- 新(TSP最適化): 1日合計走行距離 6,800 km
- **走行距離 -19%、燃料費 月額 -¥45,000**
### 構築物
- `pipelines/route_optimize.py` (250行) - メインジョブ
- `mart.delivery_routes` - 日次ルート提案
- `looker_studio/route_map.json` - 地図可視化
- `reports/cost_comparison.md` - 経営層向け
PR #312 を生成しました。
### 注意点
- OSRM の地図データは月1で再生成推奨(道路改良の反映)
- 災害時など道路通行止めは別途オーバーライド機構が必要データ取得の留意点(2026年5月時点)
OpenStreetMap は「公共インフラ」感覚で使う
OSM は寄付ベースで運営される世界最大の地図 OSS。安易な大量アクセスは即ブロック。ライセンスは ODbL(Open License)で、再利用には継承条件あり。
- ライセンス: ODbL(Open Database License v1.0)。商用利用 OK だが、派生データの公開要件あり。地図画像表示時は「© OpenStreetMap contributors」のクレジット表示が必須。
- Nominatim(): 公式インスタンスは 最大 1 リクエスト/秒 が絶対上限。User- または HTTP Referer でアプリケーション識別が必須(デフォルトの User-Agent は不可、ブロック対象)。商用利用は予告なくアクセス停止される可能性あり。
- Nominatim 禁止事項: ① オートコンプリート実装(タイプごとに API 呼び出し)/ ② 系統的クエリ(グリッド逆検索・郵便番号一括取得)/ ③ 詳細ページ自動ダウンロード。違反するとIP単位でブロック。
- Overpass API: 公式 overpass-api.de の目安は 1日 10,000 クエリ以下 / 1日 1GB 以下。デフォルトタイムアウト 180秒(最大 900秒)、メモリ上限 1GiB の指定が可能。
- Main API(api.openstreetmap.org): 編集専用。読み取り用途では使わない。大規模データ取得は `planet.osm` ダウンロードを使う(最大 2 並列)。
- 商用での推奨: 商用サービスで地図機能が止められない場合は、Mapbox / Google Maps Platform / MapTiler / 国産:地理院タイル+自前ジオコーダ などの 有償サービスへの切替が現実的。
- 自前 Nominatim / Overpass: 大規模利用なら 自社サーバーで Nominatim / Overpass を立てるのが最終手段。Docker イメージあり。
公式リソース
Nominatim 利用ポリシー: https://operations.osmfoundation.org/policies/nominatim/ / Main API 利用ポリシー: https://operations.osmfoundation.org/policies/api/ / Overpass API 利用ガイド: https://wiki.openstreetmap.org/wiki/Overpass_API ─ 商用導入前に必ず一読。
次回予告
EP.06 は、誰も知らない宝の山「日銀統計データAPI」の使いどころをお届けします。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。