← 制作記一覧へ

OSM Overpass で子連れスポットを集めた話

公開: 2026-06-20 · #64 / 最終更新: 2026-06-20 OpenStreetMapOverpass個人開発子連れスポット

📌 記事の取り扱いについて:本記事は公開当時の体験・気づきをまとめたものです。現在のツール数・プラン数・対象年齢・記事数・仕様とは異なる場合があります。最新の内容は各ツールページをご確認ください。ツールや外部サービスの仕様・料金は変更されることがあるため、利用前には各公式情報も併せてご確認ください。記載に誤りを見つけられた場合はお問い合わせフォームよりご連絡いただけると助かります。

子連れスポット検索のデータ集めには、OpenStreetMap(OSM)という世界中の地図情報を共有しているプロジェクトを使っています。その中から「公園」「水族館」「子供向け施設」などを条件で絞って取り出してくるのに、Overpass API という仕組みを使いました。

この記事は、Overpass を安定して使い続けるための運用面に絞って書きます。便利なんですが、何も考えずに叩くとすぐ拒否されたり止まったりするので、私が詰まった点と、その対処を残しておきます。

(そもそも子連れスポット検索というツールを何のために作ったのか、という経緯は子連れスポット集めを作った話に、AIに地域ごとに分担してデータを集めた話はエージェント並列でデータを集めた話に書いたので、ここでは繰り返しません。)

結論を先に書くと、3つの予備のサーバーを順に試して最初に成功したものを使う仕組みを組み、失敗したら待ち時間を少しずつ伸ばす形にしたことで、安定運用に持ち込めました。1か所のサーバーだけに頼ると、時間帯によっては延々と返ってこないことがあります。

OSM と Overpass

OSM は、世界中の人が共同で作っているオープンな地図データベースで、利用条件を守れば閲覧・取得できます。Overpass はその中から、「ある条件に合う場所だけ」を絞って取り出せる仕組みです。

たとえば「神奈川県内の公園」「東京都内の動物園」のような問い合わせを送ると、該当する地点を一覧で返してくれます。地図系のサービスを作る個人開発者にとって、心強いインフラです。

ただ、公開されている Overpass サーバーは誰かが立てて維持してくれている共有資源なので、利用にはマナーが求められます。一度に大量に取得しすぎない、定常的に高頻度で叩かない、といった配慮が前提になります。この前提を踏まえた上で、以下の3つで詰まりました。

詰まった点1: User-Agent をきちんと付ける

最初の取得スクリプトで詰まったのが、アクセスのときに名乗る情報(ツール名や連絡先)をきちんと送ることでした。

何も付けずにアクセスしたり、既定のままの User-Agent でアクセスしたりすると、環境によっては「406 Not Acceptable」(ざっくり言えば「その形では受け付けられません」)という意味のエラーが返ってくることがあります。最初は問い合わせ内容が間違っているのかと疑って、そこばかり直していたので、原因に気付くまでに時間がかかりました。

名乗る情報には、ツール名と連絡先を書いておくのがよさそうです。サーバー側から見て「これは個人開発者の○○というツールだ」と分かる状態にしておくと、何か問題があったときにも状況を追いやすくなります。匿名でこっそり叩くのではなく、名乗ってから使う、という感覚で受け止めました。

詰まった点2: 429 エラー(叩きすぎ)

名乗る情報を直した後、しばらく順調に動いたあとで429 Too Many Requests(「リクエストが多すぎます」という意味のエラー)で止まりました。

一気に大量取得すると、サーバーから「リクエストが多すぎます、しばらく休んでください」という意味のエラーが返ることがあります。地域を分けて取得していても、短い間隔で連続して投げていると、上限に引っかかることがありました。

ここで採用したのが、指数バックオフという、失敗のたびに待ち時間を少しずつ長くしていくやり方です。たとえば数秒 → 十数秒 → さらに長く、という具合に待って、サーバーの負荷が落ち着くのを待ちます。失敗のたびに同じ短い間隔で再挑戦すると、混んでいるサーバーにさらに負荷をかけることになるので、待ち時間を伸ばしていくのが大事でした。

詰まった点3: 単一サーバー依存

429 エラーが続いて、待ち時間を伸ばしてもなかなか復旧しない時間帯がありました。これは指数バックオフだけでは越えられない壁です。

調べてみると、Overpass の同じ役割の予備のサーバーが複数あって、それぞれ混み具合が違うことが分かりました。公式の問い合わせ先以外にも、運営が異なる予備のサーバーが複数あり、片方が混んでいても別の方は空いていることがあります。

最終的に組んだのが、3つの予備サーバーを順番に試して、最初に成功したものを使う仕組みです。ある予備サーバーで失敗(406 や 429、あるいは応答が返ってこない)したら、待ち時間を置いてから次のサーバーへ。これでサーバー側の混雑に振り回されることが大きく減りました。指数バックオフ(縦方向の粘り)と予備サーバーへの切り替え(横方向の逃げ道)を組み合わせるのがポイントだったと思います。

マナーとしての配慮

OSM と公開 Overpass サーバーは公共財に近いインフラなので、使い続けるなら配慮が要ります。私が意識したのは次のあたりです。

  • 一度取得したデータは可能な限り保存して、再取得を避ける
  • 大量取得は、相対的に空いている時間帯にまわす
  • 取得スクリプトの並列度は控えめにする
  • 失敗したらすぐ叩き直さず、間を空ける(指数バックオフ)

これらを守らないと、自分の取得が止まりやすくなるだけでなく、他の利用者にも迷惑がかかります。「無料で叩き放題」と思って雑に使うと、サーバーを維持してくれている人たちの善意を消耗させることになるので、丁寧に運用する意識が必要でした。

ちなみに、OSM から取得したデータには利用条件としてクレジット表示が必要なので、掲載情報の出典として OpenStreetMap を明記しています。データをタダで使わせてもらっている以上、ここは省けないところです。

振り返り

Overpass を使うことで、地図上の場所データを低コストで集められました。元データの精度や粒度は OSM への投稿内容に依存していますが、個人開発で扱うにはかなり実用的だと感じています。

詰まったのはいつも「中身(問い合わせ内容)」ではなく「作法(ヘッダーや叩く頻度、どのサーバーに投げるか)」の方でした。アクセス時にきちんと名乗り、失敗したら粘らず待ち、混んでいたら別の予備サーバーへ逃げる ── この地味な3点を整えるだけで、ぐっと安定しました。

地図系のツールを作る人には、Overpass は知っておくと選択肢が広がる仕組みです。使うときは、サーバーを貸してもらっている側だという意識で、作法から入るのがおすすめです。


← 他の制作記を見るトップお問い合わせ