気象庁地域コード検索を通信なしで検証する|同名市・親子コード・存在しないコード
要点
- 同名の市は候補を残す。 「府中市」は東京都と広島県の2件を返し、先頭だけを採用しません。
- ファイル名には親のコードを使う。 千代田区
1310100から親をたどると、府県予報区は130000、ファイル内で探す区域は130010です。 - 不明コードはURLにしない。 保存一覧にないコード、階層の取り違え、親子の不一致は別々に止めます。
- 配布例は8検証、取得処理なし。 保存データの抜粋を使う検索の確認で、現在の予報を取得した結果ではありません。
気象庁の地域コード検索を自分のプログラムやAIエージェントへ組み込みたい人向けに、地域を間違えずに選ぶ部分を、通信なしで検証する方法を示します。自作の地域コード検索ツールが使う関数と、2026年10月5日に保存した一覧の一部を、1つのNode.jsファイルにまとめました。ダウンロード後は、APIキーやnpmパッケージの追加なしで実行できます。
予報JSONの取得方法やtimeSeriesの読み方は既存の取得ガイドで扱います。この記事で確かめるのは、検索候補・親子関係・不明コードの処理です。
1ファイルをダウンロードして8検証を動かす
検証コード jma-area-lookup-check.mjs を保存する。リンク先が文字で開く場合は、ブラウザの「名前を付けて保存」でファイル名を確認してください。Node.js 18以降を用意し、保存したフォルダで次を実行します。今回の実行環境はNode.js 24.22.1です。
node .\jma-area-lookup-check.mjs末尾に次の1行が出れば、同梱の8検証がすべて通っています。途中で期待値と違う結果になれば、assertがエラーを出して終了します。
8 checks passed; fetch calls: 0配布ファイルには、検索モジュールの保存版、3市区の行と必要な親の行、検証部分を含めています。抜粋はcenters2件、offices2件、class10s2件、class15s3件、class20s3件の計12行です。全国版の検索データではありません。 天気の値やAPIの応答本文は入っていません。
同名市を最初の1件に決めない
保存一覧の「府中市」には、東京都の1320600と広島県の3420800があります。find()で最初の一致を選ぶと、検索する人がどちらを意図したか確かめる前に1件へ決まります。検索結果が1件出ることと、地域を正しく特定できたことは別です。
以下は配布ファイルの検証部分です。関数とindexを含む完全版は、上のダウンロードファイルにあります。
const ids = result => result.results.map(item => item.level + ':' + item.code);assert.deepEqual(ids(searchAreas(index, '府中市')), [ 'class20:1320600', 'class20:3420800',]);assert.deepEqual(ids(searchAreas(index, '東京都府中市')), [ 'class20:1320600',]);自作ツールは候補に所属を添え、選択後に予報JSONのURLを表示します。なお、全国分の保存一覧を使う自作ツールでは、「青森県府中市」のように指定先へ絞れない入力で元の候補を返す実装です。都道府県名を付ければ必ず一意になる、住所の正しさを判定できる、という機能ではありません。先頭の1件だけをエージェントへ渡さず、候補が複数なら利用者の選択へ戻します。
親子コードをたどり、ファイル名と区域を分ける
気象庁の発表区域の説明では、天気予報を発表する一次細分区域と、警報・注意報の二次細分区域を区別しています。市区町村などのコードを、予報のファイル名へそのまま流用する設計にはしません。
自作ツールが保存一覧からたどる千代田区の経路は次のとおりです。ここでの階層キーとコードの対応は、保存したarea.jsonを加工したデータから読んだものです。
- 地方:関東甲信地方
010300— centers - 府県予報区:東京都
130000— offices。ファイル名に使う - 区域:東京地方
130010— class10s。ファイルの中で探す - 地域のまとまり:23区西部
130011— class15s - 市区町村など:千代田区
1310100— class20s
千代田区から3回親をたどった府県予報区のコード130000で、forecast/130000.jsonという文字列を組み立てます。130010は取得したファイルのareasから区域を探すための値です。配布例は次の2点を別々に検証します。
const request = explainArea(index, 'class20', '1310100').request;assert.equal(request.officeCode, '130000');assert.equal(request.class10Code, '130010');assert.equal(request.forecastUrl, 'https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json');assert.throws(() => buildJmaRequest(index, '130010'), /unknown_office/);最後の行は、区域のコードを府県予報区として渡したときに止まる検証です。この実行でHTTP 404を受け取ったという意味ではありません。 URLを取得せず、保存一覧のどの階層に存在するかで判断しています。同じ数字のコードが複数の階層に現れる場合もあるので、数字だけの1つの辞書にまとめず、levelとコードを組にして扱います。
存在しないコードと、壊れた親子関係を分ける
検証用の9999999は、この抜粋にも元の保存一覧にもないコードです。検索の0件、不明なコードの直接指定、別の府県予報区との組み合わせ、保存データの破損を区別します。
| 入力・操作 | 期待する結果 | 確かめたいこと |
|---|---|---|
searchAreas(index, '9999999') | status: 'not_found' | 0件を架空の地域へ補完しない |
describeArea(index, 'class20', '9999999') | unknown_area | 不明な市区町村コードの説明を生成しない |
東京都130000と広島県の区域340010を組み合わせる | unknown_area | 存在するコード同士でも親子が違えば止まる |
抜粋の親コードを999999へ書き換えて索引を作る | invalid_snapshot | 入力ミスと保存データの不整合を混同しない |
| 空文字と41文字の入力 | emptyとtoo_long | 空入力と長さ上限超過を別に扱う |
壊れた親子関係は、元データの異常を観測したものではありません。検証の中でコピーへ意図的に変更を加え、止まることを確かめる例です。また、この抜粋にない地名が0件でも、日本にその地名が存在しないとは判断できません。全国の検索には地域コード検索ツールを使い、画面に示す一覧の取得日も確認してください。
8検証と既存20テストが確かめる範囲
配布例の8検証は、同名2候補、都道府県による絞り込み、5階層の親子、正しいURL文字列、階層の取り違え、不明コード・親子不一致、意図的なデータ破損、空・長すぎる入力です。fetchを呼ぶと失敗する関数へ置き換え、呼出し回数が0であることも確認しています。
開発側では、同じ検索モジュールに対する既存のnpm run test:jma-areaも2026年10月23日に実行し、20件すべて通過しました。こちらは全国分の保存一覧に加え、検索画面の制御やコピー操作、模擬応答を使った取得コードの停止条件も含みます。20件すべてが、地域検索の精度を測る別々の実データ事例という意味ではありません。
模擬応答の天気は検証用に作った架空の値です。保存済みの実在地域データと、架空の予報応答を同じ実測として数えません。配布例にも検索関数が組み立てる取得コードの文字列は入っていますが、その文字列をプログラムとして実行する処理はありません。
気象庁地域コード検索でまず確認するのは、候補を勝手に決めていないか、親子の取り違えがないか、不明なら止まるかです。それが通っても、現在のURLが200を返すこと、今日の天気が正しいこと、地名の変更へ追従できていることは保証できません。
保存データの出典と今回確認した日
出典は気象庁ホームページのarea.jsonです。2026年10月5日15:46 JSTの保存分からコード・名称・読み・親コードの必要な行を抜き出し、CodeAgentが検証用に加工しました。気象庁が作成・保証するプログラムではありません。2026年10月23日は、この記事とローカルコードを確認した日であり、地域一覧を取得し直した日ではありません。
気象庁の利用条件は出典と加工の明示を求め、内容やURLを予告なく変更する場合があると説明しています。公共データ利用規約 第1.0版と合わせて、2026年10月23日に確認しました。この記事では予報の生成・発表や最新の防災判断は扱いません。
検索を試すなら地域コード検索ツール、取得した保存JSONの構造を確かめるならJSON確認ツール、APIへの接続と発表時刻の読み方は予報JSONの取得ガイドへ進んでください。
この記事の情報・検証メモ
- public-data
- json
- nodejs
- testing
- ai-agent
- 公開日
- 情報確認
- 参考リンク
- 4件
- 更新性
- 定期更新
仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。
一次情報・参考リンク
- 気象庁: 気象警報・注意報や天気予報の発表区域(2026-10-23確認) https://www.jma.go.jp/jma/kishou/know/saibun/
- 気象庁ホームページについて(利用条件・加工の明示・予告なしの変更、2026-10-23確認) https://www.jma.go.jp/jma/kishou/info/coment.html
- デジタル庁: 公共データ利用規約 第1.0版(2026-10-23確認) https://www.digital.go.jp/resources/open_data/public_data_license_v1.0
- 気象庁ホームページ: area.json(2026-10-05の保存分を使用。今回は取得していない) https://www.jma.go.jp/bosai/common/const/area.json