「半径 3km にチラシ撒いて、何 km 先から来店してもらえたか」を集計したくて、Claude Code を相棒に Web アプリを作りました。2 つの住所の直線距離(km)を一発で出すツールです。ポスティング・交通広告など立地に紐づくマーケティング施策の立案と効果検証用に、自分のために作りました。登録不要・無料で公開しています。

👉 使ってみる: https://distance.mylil.jp/

作った背景 — マーケティング施策の数字を“距離”で語りたい

店舗・サービス業のマーケで地味に困るのが「顧客がどこから来ているのか」を数字にすること。住所の文字列を眺めても判断材料にならない。距離(km)に落とし込むだけで、施策の評価軸ができる。

これまでは、Google スプレッドシートの GEOCODE 関数や Google Maps API を使う方法もあったけれど、

  • 無料枠の制限がある/クレカ登録が必要(Maps API 系)
  • 住所の表記ゆれ(全角・半角・建物名・部屋番号)でエラーになる
  • 1,000 行ある CSV を回すには結局スクリプトが要る

…という不便があり、結局自分のサーバーで動く軽量ツールが一番速かった、というのが今回の動機です。

具体的な使い道 — ポスティング・交通広告での施策と検証

① ポスティング配布エリアの設計

「店舗から半径 5km の世帯に配る」と決めたとき、外注のポスティング業者が出してくる見積もりエリアが本当に半径 5km 内に収まっているか、業者から渡された配布対象住所リストを CSV にして店舗住所と一括比較できます。「実は半径 7km 圏まで含まれていて、過剰請求されていた」みたいなチェックが 1 分で終わります。

② ポスティング後の反響率検証

チラシを配ったエリア(住所リスト)と、その後実際に来店してくれた顧客の住所を CSV で比較。距離別ヒストグラムを描けば、

  • 0〜2km:来店率 8.4%
  • 2〜4km:来店率 3.1%
  • 4〜6km:来店率 0.7%

のような「反響率の距離減衰カーブ」が出せます。次回のポスティングで配布範囲を最適化する根拠になる。

③ 交通広告(駅看板・電柱広告)の到達圏分析

駅に看板を出す案件で、「この駅利用者の居住エリアは店舗から見てどの方角・どの距離か」を見たいとき。駅周辺の住所と顧客 DB の住所を比較すれば、看板を出すべき駅と、避けるべき駅が見えてくる。

たとえば「A 駅利用者の 80% が店舗から 6〜10km 圏に集中」と分かれば、看板出稿の費用対効果を事前に予測できます。

④ 交通広告 × 来店データのキャンペーン後評価

「○月○日〜○月△日に B 駅で広告出稿、その期間の新規顧客の住所」と「広告出稿地点」の距離分布を出すと、

  • 広告地点から 2km 以内の新規来店:出稿前の同期間比 + 38%
  • 2〜5km:+12%
  • 5km 超:+1%(影響ほぼなし)

のように、広告効果が地理的にどこまで届いたかを数字で語れる。役員報告で説得力が段違いになります。

⑤ 新店舗候補地の事前評価

新しく出店する候補地が複数ある場合、各候補地の住所と既存顧客の住所を一括比較。「候補 A は既存顧客の 45% から 5km 以内にある」「候補 B は 28%」のようなカニバリ/取りこぼしの予測に使えます。

⑥ 配送・出張サービスの可否判定

配送可能距離 30km、出張範囲 50km などの線引きがあるサービスで、顧客リストに対して可否フラグを一括で振るのに使える。「30 km 以内=OK/それ以外=NG」という判定列を CSV に足すだけ。

⑦ そのほか業務系の小ネタ

  • 引越し検討:候補物件と職場の距離、配偶者の職場との距離を一気に出す
  • 不動産仲介:物件と最寄り駅、スーパー、学校の距離を物件 PR 用に取得
  • 採用:内定候補者の自宅と勤務地の通勤距離を一覧化(オファー時の通勤負荷説明に)
  • 訪問営業:その日のアポ住所リストを店舗住所と比較してルート設計の素材に

機能

① 単発計算(住所 2 つ → 距離 km)

テキスト入力欄に住所を 2 つ入れて「距離を計算」を押すだけ。直線距離(km)と、API がマッチした地名(誤マッチ確認用)が返ります。サクッと 1 件だけ調べたいときに。

② CSV 一括変換

A 列に住所 1、B 列に住所 2 を入れた CSV をアップロードすると、C 列に距離(km)を加えた CSV を返します。最大 1,000 行まで対応。文字コードは UTF-8(BOM 可)/ Shift_JIS(Excel 標準)両対応。

店舗住所と顧客 DB の住所をペアで並べた CSV を投げれば、商圏分析の素材ができあがります。

使い方の細かいコツ

住所はなるべく具体的に

国土地理院の API は 「都道府県+市区町村+町名+番地」までフルで書くと精度が一番高い。「東京駅」「新宿駅」のようなランドマーク名でも検索はかかりますが、同名地が全国に多数あるので、結果に出る「マッチした地名」を必ず確認してください。

  • 東京都新宿区西新宿2-8-1 → 一発で正確
  • 新宿駅 → 山形県や群馬県の「新宿」がヒットしてしまうことが多い

全角・半角はアプリ側で自動変換

NFKC 正規化+ダッシュ統一を入れているので、以下は全部同じものとして扱われます:

  • 2-8-1(半角ハイフン)
  • 2-8-1(全角ハイフン)
  • 2ー8ー1(長音記号)
  • 2丁目8番1号(漢字表記)

建物名がついてても OK

東京都新宿区西新宿2-8-1 新宿野村ビル20F」のように建物名・階数が後ろにくっついていても、段階的に削って再試行する fallback を仕込んであるので、ほとんどの場合ヒットします。郵便番号 prefix(〒163-0808)や「店舗住所:」のようなラベルも自動で除去されます。

これは現場のリアルなデータ(顧客 DB から吐き出された CSV、業者から渡された配布リスト)が表記ゆれだらけだからこそ重要なポイント。「データクレンジングを先に済ませないと使えない」ツールだと結局誰も使わなくなる、というのを過去の経験で痛感しているので。

どうやって作ったか — Claude Code との合作

このツールは、ほぼ全行を Claude Code(Anthropic 社の CLI 型 AI コーディング支援)と一緒に書きました。設計と動作確認の往復を繰り返しながら、半日ぐらいで本番デプロイまで持っていけました。

採用したもの
Web フレームワーク Flask
ジオコーディング 国土地理院 地名検索 API
距離計算 Haversine 公式(球面直線距離)
並列処理 ThreadPoolExecutor(15 並列)
文字正規化 jaconv(NFKC 正規化)

Haversine 公式

球面三角法で、2 つの緯度経度から「球面の上を直線でつないだ距離」を計算する古典公式です。地球は完全な球ではないですが、km スケールの距離なら誤差 0.5% 以下で実用十分。

def haversine_km(lat1, lng1, lat2, lng2):
    R = 6371.0  # 地球半径 (km)
    phi1, phi2 = math.radians(lat1), math.radians(lat2)
    dphi = math.radians(lat2 - lat1)
    dlam = math.radians(lng2 - lng1)
    a = math.sin(dphi/2)**2 + math.cos(phi1)*math.cos(phi2)*math.sin(dlam/2)**2
    return 2 * R * math.asin(math.sqrt(a))

並列ジオコーディング — CSV を速く回す工夫

CSV を 1,000 行受け付けて、住所 2 つ分(最大 2,000 ジオコーディング)を順に叩いていたら数分かかってしまいます。そこで:

  1. CSV 全体から ユニークな住所だけを抽出(重複排除)
  2. それを ThreadPoolExecutor(max_workers=15) で並列に投げる
  3. 結果を辞書にキャッシュして、距離計算ループで参照する

これで実測 200〜300 行の CSV なら 10〜30 秒で返ってきます。同じ店舗住所が何度も出てくるマーケティング用途では特に高速化が効くのが嬉しい設計です。

制約

使う前に知っておいてほしいこと:

  • 直線距離のみ:道路を辿った実距離ではない。実距離が欲しい場合は Google Maps Distance Matrix API(有料)が必要
  • 日本国内のみ:国土地理院 API は日本の住所が対象。海外住所は使えない
  • 住所が古い/曖昧だと精度が落ちる:旧地名や、住居表示が新しいエリアは要注意
  • 無保証:仕事で使う場合は数値の妥当性を別ソースでクロスチェックしてください

使ってみてください

店舗運営してる方、ポスティング・交通広告の効果を検証したい方、不動産・採用・配送など「住所間の距離」を業務で使う方、ぜひ試してみてください。CSV のサンプルがあれば、A 列・B 列に住所を 2 つずつ並べて投げるだけで C 列に距離が書かれた CSV が落ちてきます。

👉 https://distance.mylil.jp/ で試す

「こういう機能ほしい」「実距離も計算できるようにして」「この業務にも使えそう」など要望があれば連絡フォーム or X までどうぞ。次のバージョンで取り込みます。


関連記事: Claude Codeでオーディオビジュアライザーを作りました — 同じく Claude Code で作った自作 Web アプリ。