ふくふくHukuhuku Inc.
EP.14Open Data 15分公開: 2026-05-10

下水道の老朽化を可視化する:八潮陥没事故から考える、地下インフラのオープンデータ化

2025年1月の埼玉県八潮市の道路陥没は、設置から約40年の流域下水道管の破損が原因。「事故周辺の下水道を経年別に色分けして地図にできるか」を実際に検証した結果、公開データだけでは限界があることが見えてきます。それでも何ができるか、何が未公開なのか、政策提言まで踏み込みます。

#下水道#OpenStreetMap#国土数値情報#インフラ老朽化#防災
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

2025年1月、埼玉県八潮市の県道の道路が突然陥没し、トラックが落下する事故が起きました。原因は設置から約40年経過した県管理の流域下水道管の破損で、地下に空洞ができていたことが後の調査で判明。同様のリスクは全国に数千km分残存していると指摘されています。

この記事の目的

事故現場周辺の下水道を経年別に色分けして地図に出せるか?」を実装で検証します。技術的にはできますが、最大の壁は「データが公開されていない」こと。何が取れて何が取れないか、現実的な代替策まで。

Step 1: 何が公開されていて、何が未公開か

下水道情報の公開度(2026年5月時点・調査結果)
情報公開度ソース粒度
流域下水道の幹線・処理場位置国土数値情報 A36(一部)施設単位
流域下水道の事業計画区域国土数値情報 A35a市町村単位の概略
公共下水道の処理区分布国土数値情報 A35b区域ポリゴン
下水道管路の位置・形状✗ ほぼ非公開市町村台帳のみ
下水道管路の設置年✗ 非公開市町村台帳のみ
下水道管路の点検・更新計画△ 自治体次第各自治体オープンデータ事業区域単位
道路の整備年(推定材料)道路台帳・国土数値情報区間単位
建物の築年○ 一部国勢調査・固定資産税統計メッシュ単位
結論:管路レベルの経年データは公開されていない

下水道台帳は地方公共団体が個別に保有しており、防犯・テロ対策の観点もありほとんど公開されていません。「八潮市の地下下水道管 A の設置年」のような粒度のデータは、自治体に問い合わせるか・情報公開請求するかしか取得経路がありません。これがインフラ老朽化問題の議論で「そもそも全体像を国民が見えない」という壁です。

Step 2: それでも公開データで何が描けるか

管路レベルは描けませんが、以下なら描けます: 1. 流域下水道の処理場と幹線の概略(国土数値情報 A36) 2. 公共下水道の供用区域ポリゴン(国土数値情報 A35b)─ 区域ごとの供用開始年から経年推定可能 3. 道路整備年からの推測(道路と並行して埋設されることが多い) 4. 建物の築年代別エリア(国勢調査メッシュから経年推定)

Step 3: 国土数値情報で八潮周辺の下水道事業計画を描く

データの直接ダウンロードは「手で取る」が前提

国土数値情報の直URLはバージョン更新で頻繁に変わるため、コードに固定 URL を書くのは推奨しません。https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-A35a.html にブラウザでアクセスし、「埼玉県」のZIP をダウンロード → に手動アップロード、というフローが実装上一番安定。コードは shp ファイル名やパスを自動探索する形にしておきます。

Step 3-1:ZIP を Colab にアップ → 解凍 → shp を自動検出
Python
# 1. https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-A35a.html を開く# 2. 「下水道事業計画区域」の埼玉県(11)版を選んで ZIP をダウンロード# 3. Colab 左サイドバー「ファイル」アイコン → ZIP をアップロード(手動)# 4. 以下を実行
import zipfile, glob, os
# アップロードしたファイル名(実物に合わせて書き換え)ZIP_PATH = "A35a-19_11_GML.zip"   # ← 実際にアップロードしたZIP名
os.makedirs("data/sewer", exist_ok=True)with zipfile.ZipFile(ZIP_PATH) as z:    z.extractall("data/sewer")
# .shp ファイルを再帰的に探す(フォルダ階層が版で変わる)shp_files = glob.glob("data/sewer/**/*.shp", recursive=True)print("見つかったShape:", shp_files)SHP = shp_files[0] if shp_files else Noneassert SHP, "shp ファイルが見つかりません。ZIPの中身を確認してください。"
Step 3-2:GeoPandas で読み込み・カラム構造の確認
Python
import geopandas as gpd
# Shape は Shift_JIS(cp932)のことが多いgdf = gpd.read_file(SHP, encoding="cp932")print(f"全体: {len(gdf)} 件、CRS: {gdf.crs}")
# 八潮市の中心 (35.8222, 139.8378) 周辺 5km をフィルタcenter = gpd.GeoDataFrame(    geometry=gpd.points_from_xy([139.8378], [35.8222]), crs="EPSG:4326").to_crs(epsg=6677)buffer_5km = center.buffer(5000).to_crs(gdf.crs).iloc[0]
nearby = gdf[gdf.intersects(buffer_5km)].to_crs(epsg=4326)print(f"\n八潮5km圏の下水道事業区域: {len(nearby)}件")
# ⚠️ カラム名は版・データセットで違う。必ずここで確認print("\nカラム一覧:")for col in nearby.columns:    print(f"  {col}")print("\nサンプル1件:")print(nearby.iloc[0].to_dict())
国土数値情報のカラム名は版で変わる

A35a 下水道事業計画 のフィールドは、データ整備版で名前と内容の対応が違います。Step 3-2 の `print` 出力を見て「年データを持つカラム」を特定してから次に進んでください。そもそも年情報を含まない版もあります(公開データの限界)。事業計画区域のポリゴンしか入っていない場合、経年マップは別データソースとの組合せが必要になります。

Step 3-3:年カラムが見つかった前提でプロット(汎用版)
Python
import foliumimport re
# ↓ Step 3-2 で特定した「年データを持つカラム名」を入れるYEAR_COLUMN = "A35a_???"   # 例: 認可年・供用開始年カラム
def parse_year(value):    """'1985' / '1985-04-01' / '昭和60年' / 1985 / None を 西暦4桁の年に変換"""    if value is None:        return None    m = re.search(r"(19|20)\d{2}", str(value))    return int(m.group(0)) if m else None

def get_color(year):    if year is None: return "#999"          # データなし    age = 2026 - year    if age >= 50: return "#d62728"          # 赤:50年以上(最警戒)    if age >= 40: return "#ff7f0e"          # オレンジ:40-49年(八潮事故と同帯)    if age >= 30: return "#ffd92f"          # 黄    if age >= 20: return "#a8d949"          # 緑    return "#1f77b4"                         # 青

m = folium.Map(location=[35.8222, 139.8378], zoom_start=13, tiles="OpenStreetMap")
mapped = 0if YEAR_COLUMN in nearby.columns:    for _, row in nearby.iterrows():        raw = row.get(YEAR_COLUMN)        year = parse_year(raw)        color = get_color(year)        age_label = f"{2026 - year}年" if year else "不明"        folium.GeoJson(            row["geometry"].__geo_interface__,            style_function=lambda feat, c=color: {                "fillColor": c, "color": c, "fillOpacity": 0.4, "weight": 1,            },            tooltip=f"年: {raw} / 経年: {age_label}",        ).add_to(m)        mapped += 1else:    # 年カラムが無い:とりあえず形状だけ表示    for _, row in nearby.iterrows():        folium.GeoJson(            row["geometry"].__geo_interface__,            style_function=lambda feat: {"fillColor": "#999", "color": "#999", "fillOpacity": 0.3, "weight": 1},            tooltip="(年データなし)",        ).add_to(m)        mapped += 1    print(f"⚠️ 指定カラム '{YEAR_COLUMN}' が無いため、年データなしで描画しました({mapped}件)。")    print("→ 年データを別ソースから取得するか、自治体オープンデータと組合せてください。")
print(f"プロット完了: {mapped}件")
legend_html = """<div style="position:fixed; bottom:20px; left:20px; background:white; padding:10px; border:1px solid #ccc; border-radius:8px; font-size:12px;">  <b>下水道事業区域の経過年(推定)</b><br>  <span style="background:#d62728;color:white;padding:2px 8px;">50年〜</span> 最警戒<br>  <span style="background:#ff7f0e;color:white;padding:2px 8px;">40-49年</span> 八潮事故と同帯<br>  <span style="background:#ffd92f;padding:2px 8px;">30-39年</span><br>  <span style="background:#a8d949;padding:2px 8px;">20-29年</span><br>  <span style="background:#1f77b4;color:white;padding:2px 8px;">〜19年</span><br>  <span style="background:#999;color:white;padding:2px 8px;">不明</span></div>"""m.get_root().html.add_child(folium.Element(legend_html))m.save("yashio_sewer_age.html")m
出来るのは「事業区域」レベルまで

上のコードで描けるのは 下水道事業の認可エリア(行政の区域ポリゴン)で、八潮市の場合は中川流域・綾瀬川流域などの区分が見えます。個別の管路 1 本ごとの経年は不可。それでも「40年以上経過した区域」が地図上で赤く塗られると、議論の出発点として強力。

Step 4: 道路整備年から「下水道もこの頃」を推測

下水道は 道路と並行して埋設されることが多く、道路の整備年は下水道の設置年に相関しています。国土数値情報の道路台帳で道路整備年を取れる場合、それを下水道の代理指標として使うアプローチ。

道路整備年の経年マップ(推定)
Python
# 国土数値情報「道路情報」N04(一部の県・市で整備年データあり)roads = gpd.read_file("data/road/N04-19_11.shp")nearby_roads = roads[roads.intersects(buffer_5km)].to_crs(epsg=4326)
# 道路整備年カラム(バージョン依存、要確認)# 例: N04_001 (整備年)for _, row in nearby_roads.iterrows():    year = row.get("N04_001")    if year:        folium.PolyLine(            locations=[(p[1], p[0]) for p in row["geometry"].coords],            color=get_color(int(year)),            weight=3,            tooltip=f"道路整備: {year}年",        ).add_to(m)

Step 5: 自治体オープンデータの確認

自治体によっては下水道台帳の一部を公開しています。埼玉県の場合: - 埼玉県オープンデータポータル: https://opendata.pref.saitama.lg.jp/ - 「下水道」で検索 → 一部の処理場・流域マップが取得可能(ただし管路は基本非公開) 八潮市オープンデータ: - https://www.city.yashio.lg.jp/ → オープンデータ - 上下水道局が公開する設備情報あり、ただし詳細管路は非公開 やってみる価値: 自治体の Web サイトを丹念に当たる + 情報公開請求も視野。ふくふくは過去の案件で「都市計画区域 + 道路台帳 + 配管マップ(限定的公開)」を組み合わせて経年マップを作った経験があります。

Step 6: 政策的視点 ─ 地下インフラのオープンデータ化

国土交通省は2024年から下水道台帳のデジタル化・標準化を推進(i-Sewer / 下水道台帳統合管理)。長期的には「全国の下水道管路がオープンに見える」方向に進みつつあります。 残課題:① テロ対策・防犯上の懸念から完全公開には抵抗、② 自治体ごとのフォーマットがバラバラ、③ デジタル化未完了の自治体多数。 民間からの貢献余地:① OpenStreetMap での「見えるインフラ」マッピング(マンホール位置など)、② 市民調査による陥没・劣化情報のクラウドソース、③ による「衛星画像からの陥没リスク予測」。

ふくふく流アプローチ

実際の案件では「できる範囲で描く + できない部分は明示する」のが信頼を作る進め方。① 公開データで描けるレイヤー(事業区域・道路・建物年代)を全部地図に重ね、② 不足情報は自治体に問い合わせるリスト化、③ 同様の事故リスクが高いエリアを「経年 ≧40年 + 流域下水道 + 高交通量」のスコアで可視化。「八潮の次はどこか?」を仮説化する材料として使ってもらえます。

データ取得の留意点(2026年5月時点)

  • 国土数値情報 A35(下水道): CC BY 4.0、商用OK、出典明記。バージョンに注意(年次更新)
  • 国土数値情報 N04(道路): 一部都道府県のみ整備年データあり。全国統一ではない
  • 自治体オープンデータ: 自治体ごとにライセンス・フォーマット異なる、要個別確認
  • 情報公開請求: 下水道台帳の閲覧は可能だが、デジタルデータ提供は自治体次第(紙のみのケース多)
  • プライバシー・テロ対策: 個人宅への引込管位置などは公開不可。集計レベルで扱う
  • OpenStreetMap タイル: 商用大規模なら Mapbox / Stadia Maps へ切替推奨

ふくふくの進め方

「八潮事故をきっかけに自治体・施設管理者向けのリスク可視化ダッシュボードを作りたい」というご相談は実際に頂いてます。1〜2ヶ月で「経年スコアマップ」のプロトタイプ3〜6ヶ月で本番運用が現実的なペース。公開データ + 自治体保有データ + 民間サービス(NTT空間統計の人流など)を組み合わせて、「事故が起きてからではなく、起きる前」の議論材料を作るのがこの領域の事業価値です。

次回予告

EP.15 では、株価ヒストリカルを社内分析に組み込むレシピ で日経225・・個別銘柄の長期データを取得し、自社の売上 と重ねて景気感応度を測ります。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp