【分析メモ】ニセコ・ヒラフの渋滞状況をGoogle ColabとGoogle Maps APIで可視化してみた

冬季のニセコでは、ヒラフから倶知安町の市街地へと向かう道路の渋滞が、たびたび話題となる。観光関係者や地元住民にとっても、渋滞状況を「肌感」ではなくデータとして把握できたら便利ではないかと感じ、簡易的な可視化方法を模索することにした。

その際に注目したのが、Google Mapsの提供するDirections APIである。

経路データの取得には Google Maps API が使える

Googleが提供する Google Maps Platform には、複数のAPIが用意されており、経路検索に特化したAPIが「Directions API」である。このAPIを利用することで、出発地・目的地・出発時刻を指定すれば、現在の道路状況(渋滞含む)を反映した推定所要時間を取得することができる。

例えば、以下のようなリクエストを送れば:

  • 出発地:ヒラフのある地点(緯度経度で指定)
  • 目的地:JR倶知安駅

Google側が現在の道路状況を考慮し、「車で何分かかるか」を秒単位で返してくれる

今回は、ヒラフ地区の座標(42.858657, 140.704895)から、倶知安駅を目的地として、リアルタイムの移動時間データを定期的に取得・記録してみた。

以下の図は、実際にその経路をGoogleマップで検索した際のイメージである。

このように、観光地の混雑や渋滞状況をAPIを通じて定量的に捉えることが可能となる。

Google Colab × Pythonで手軽に記録

コードをどこで実行するかを考えた際、ローカル環境を使うよりも、Google Colabの活用が便利であると判断した。Google Colabを使えば、ブラウザ上でPythonコードを実行し、クラウド上で定期的にデータ取得・保存が可能である。

主な利点は以下の通り:

  • ソフトウェアのインストール不要(ブラウザだけで完結)
  • ライブラリのインストールも1行で済む(例:!pip install googlemaps
  • データをCSV形式でダウンロード可能
  • 定期的なデータ取得もスクリプト次第で対応可能

準備:APIキーの取得と有効化

Directions APIを利用するには、以下の手順が必要である:

  1. Google Cloud Console にアクセスし、プロジェクトを作成
  2. Directions API」を有効化
  3. APIキーを取得
  4. クレジットカード情報を登録し、課金を有効化
  5. 利用上限(クォータ)や無料枠の確認(1日あたりのリクエスト数に注意)

なお、APIキーを取得しただけではリクエストは通らないため、課金アカウントの有効化を忘れずに行う必要がある(未設定の場合、”REQUEST_DENIED” エラーが返る)。

メモ:無料枠の範囲について(APIの利用制限)

Google Maps Platform の Directions API は、無料枠が次のように設けられている(2025年9月時点):

  • 毎月200ドル分の無料クレジット(新規アカウント含む全ユーザー)
  • Directions APIの単価:1,000リクエストごとに5ドル(標準プラン)

このため、毎月の無料枠内で可能な回数は概算で以下の通り:

  • 1日あたり10分ごとに取得 → 1日144回
  • 1か月で約4,300回(144回 × 30日)
  • 料金換算:約22ドル(4,300 ÷ 1,000 × 5)

つまり、毎日10分間隔で実行しても、月200ドルの無料クレジット内に十分収まる計算である。ただし、他のAPIも併用している場合は、合算になるので注意が必要である。

また、APIキーを取得しただけではリクエストは通らず、「課金の有効化(クレジットカード登録)」が必要である点も忘れてはならない。

コード例

以下は、10分おきに所要時間を取得し、CSV形式で保存する簡易スクリプトの一部である:

API_KEYの箇所は、各自で取得したapi keyを入力する

# 必要なライブラリをインストール
!pip install googlemaps

# 必要なモジュールをインポート
import googlemaps
import pandas as pd
from datetime import datetime
import pytz
import time

# Google Maps APIキーの設定
API_KEY = "your_api_key"
gmaps = googlemaps.Client(key=API_KEY)

# 出発地と目的地の設定
origin = "42.858657,140.704895"  # ニセコヒラフの緯度経度
destination = "倶知安駅"

# 日本時間のタイムゾーンを指定
JST = pytz.timezone('Asia/Tokyo')

# データ収集ループ
data = []
try:
    for i in range(144):  # 1日分のデータを10分おきに取得
        # 現在時刻を日本時間に変換
        now = datetime.now(JST)

        # APIリクエストで経路情報を取得
        directions_result = gmaps.directions(
            origin,
            destination,
            mode="driving",
            departure_time="now"
        )

        # 移動時間(秒)を取得
        travel_time = directions_result[0]['legs'][0]['duration_in_traffic']['value']  # 渋滞を考慮した移動時間
        travel_minutes = travel_time / 60  # 分単位に変換

        # データを記録
        data.append([now, travel_minutes])
        print(f"データ取得: {now}, 移動時間: {travel_minutes:.2f} 分")

        # 次の取得まで10分待機
        time.sleep(600)

except Exception as e:
    print("エラーが発生しました:", e)

# データをデータフレームに変換
df = pd.DataFrame(data, columns=["日時", "移動時間(分)"])

# CSVに保存
df.to_csv("travel_time_data.csv", index=False)
print("データ記録完了!")

出力結果

以下は、2025年1月29日および30日に、夕方から夜にかけての移動時間の推移を記録したグラフである。17時台に時間が長くなっており、渋滞のピークが見て取れる

なお、2023-24シーズンはヒラフから市街地まで30分以上の渋滞が発生すると言われていたが、2024-25シーズン開始前に、ボトルネックとなっていた交差点で路線の拡張が行われた結果、渋滞が緩和されており、今回の計測でも渋滞と呼ばれるような移動時間は出力されなかった。

このように、APIを使えば観光地周辺の混雑状況や渋滞ピークをデータで把握することが可能になる。特に、送迎バスやシャトル便の運行計画、DMOによる交通施策の効果検証などにも応用できるだろう。

なお、このようなAPIは定期的に仕様が変更されるため、今後も同様の分析が可能かどうかについては保証できない。

本コラム投稿者

江﨑 貴昭
EZAKI Takaaki

千葉県出身。理系の観光学科を修了後、旅行・観光専門のシンクタンクの研究員として、様々な地域における観光・まちづくりの調査や計画づくり等に従事。霞が関(観光庁)での勤務経験を持つ。
researchmap