Claude Media
e-Stat APIをClaude Codeで呼ぶ — 統計表IDを確かめて政府統計を取得

e-Stat APIをClaude Codeで呼ぶ — 統計表IDを確かめて政府統計を取得

e-StatのAPIでappIdを取得し、統計表情報取得・メタ情報取得・統計データ取得の3段階をClaude Codeに任せる手順。統計表IDや項目コードを取り違えない確認の組み込み方も書きます。

政府統計の総合窓口(e-Stat)には、統計データを機械判読可能な形式で取得できるAPI機能があります。Claude Codeに取得スクリプトを書かせれば、Excelを1枚ずつ開く手間は省けます。

一方で、e-Statの統計表IDや項目コードは名前から推測できない文字列です。Claudeに「消費者物価指数のID」を聞いて出てきた値をそのまま使うと、別の統計表を引いたまま分析が進みかねません。この記事は、appIdの取得から3段階の取得手順、そしてコードを取り違えないための確認の組み込み方までを順に扱います。

e-Stat APIの利用条件とappIdの取得

APIは誰でも使えます。ただし利用ガイドが求める手順は4つあり、先に踏むのは登録とIDの取得です。

手順

取得を始めるまでの準備

  1. 1

    e-Statのユーザ登録をする

    API機能の利用にはe-Statのユーザ登録が必要です。登録済みなら飛ばせます。

  2. 2

    マイページでアプリケーションIDを発行する

    ログイン後のマイページにあるAPI機能(アプリケーションID発行)から、開発するアプリケーションごとにIDを取得します。

  3. 3

    API仕様を確認する

    現在のバージョンは3.0で、ホスト名は api.e-stat.go.jp、リクエストURLは /rest/3.0/app/ 以下です。

  4. 4

    公開するときはクレジットを表示する

    アプリケーションを公開する場合は、利用者が見られる場所にクレジット表示を置きます。

IDの扱いで押さえる点は、FAQから拾うと次のとおりです。

  • 取得できるIDは3つまで
  • ID登録時の名称・URL・概要は、あとから変更できる
  • 公開サイトで使わないなら、URL欄にはローカルアドレス(http://test.localhost/ など)を入れてよい
  • IDそのものを変えるには、削除して再発行する。削除したIDは使えなくなる
  • 取得データの商用利用は可能で、リクエスト回数の制限は現在のところない

公開時のクレジットは、e-StatのAPI機能を使っていること、サービスの内容は国が保証するものではないことを述べる一文が、公式のクレジット表示ページに示されています。ブログやダッシュボードに分析結果を載せる場合は、この一文を忘れずに入れます。

appIdをClaude Codeに渡さない置き方

appIdはリクエストのクエリパラメータ(appId=...)で送ります。URLの一部になるので、コマンド履歴やログ、Claudeへの貼り付けにそのまま残りやすい値です。

環境変数に置き、スクリプトは環境変数から読む形にしておくと、コードにIDを書かずに済みます。

export ESTAT_APP_ID="(マイページで発行したID)"

.env に書いて使う場合は、Claude CodeのRead拒否ルールで読み取りを止められます。公式のpermissionsには Read(./.env) が例として載っています。プロジェクトの .claude/settings.json に次のように置きます。

{
  "permissions": {
    "deny": ["Read(./.env)"]
  }
}

ただし、このルールが対象にするのはClaudeのファイルツールです。公式は、ReadルールをGrepやGlobなどの組み込みツールにも「ベストエフォート」で適用すると説明しています。Bashで cat .env を実行できる設定のままだと防げない可能性があるため、Bashの許可範囲も合わせて確認します。

統計データを取るまでの3段階

e-Stat APIは機能ごとにURLが別です。開発ガイドは、統計データ取得までの流れを3つに分けています。

手順

統計データ取得プロセス

  1. 1

    統計表情報取得で統計表IDを探す

    調査年月・調査名・検索キーワードなどで統計表を検索し、目的の統計表IDを取得します。

  2. 2

    メタ情報取得で中身を確認する

    ①で得た統計表IDを渡して、分類事項・時間軸事項・地域事項・表章事項を確認します。

  3. 3

    統計データ取得で数値を取る

    統計表IDとメタ情報で確認したコードを指定して、数値を取得します。

エンドポイントは、API仕様の3.0に次のとおり載っています。JSONで受けるなら app/ の後ろに json/ を挟みます。

段階機能名エンドポイント(/rest/3.0/app/ 以下)
①機能名統計表情報取得エンドポイント(/rest/3.0/app/ 以下)json/getStatsList
②機能名メタ情報取得エンドポイント(/rest/3.0/app/ 以下)json/getMetaInfo
③機能名統計データ取得エンドポイント(/rest/3.0/app/ 以下)json/getStatsData

CSVで受けたいときは、getSimpleStatsList や getSimpleMetaInfo のように名前が変わります。

①統計表を検索するときの主なパラメータ

統計表情報取得の searchWord は、表題やメタ情報に含まれる文字列を検索します。AND・OR・NOT で複数語を組み合わせられ、仕様には 東京 AND 人口 の例があります。絞り込みには次も使えます。

  • statsCode: 5桁なら作成機関、8桁なら政府統計コードで検索
  • surveyYears: yyyy・yyyymm・yyyymm-yyyymm の形で調査年月を指定
  • statsField: 2桁なら統計大分類、4桁なら統計小分類

パラメータ値はUTF-8でURLエンコードしてから結合する決まりです。日本語の検索語をスクリプトに書くときは、urllib.parse.urlencode のようなエンコード処理を通します。

③統計データ取得の絞り込みと件数制限

数値の取得では、statsDataId に加えて cdCat01(分類事項01の単一コード)、cdArea(地域)、cdTime(時間軸)などでコードを指定します。指定しなければ全項目が返ります。

一度に返るのは最大10万件です。超える場合はレスポンスの NEXT_KEY を startPosition に渡して続きを取ります。最初に cntGetFlg=Y で件数だけ取得し、取得量を見積もる方法も使えます。

Claude Codeに書かせる取得スクリプトの例

次は、3段階を1本にまとめた最小の例です。公式のサンプルに載っている統計表ID・項目コードを使うと、手順を試す土台になります。公式の「APIの使い方」は、統計表ID C0020050213000(社会・人口統計体系の東京都のデータ)と項目 #A03503(老年人口割合[65歳以上人口])で東京の老年人口割合を取る例を示しています。

import json
import os
import urllib.parse
import urllib.request
 
BASE = "https://api.e-stat.go.jp/rest/3.0/app/json/"
APP_ID = os.environ["ESTAT_APP_ID"]
 
 
def call(func, **params):
    params["appId"] = APP_ID
    url = BASE + func + "?" + urllib.parse.urlencode(params)
    with urllib.request.urlopen(url) as res:
        return json.load(res)
 
 
def status(body, root):
    # RESULT.STATUS は 100 以上がエラー。1 は正常終了だが該当データなし
    result = body[root]["RESULT"]
    code = int(result["STATUS"])
    if code >= 100:
        raise RuntimeError(result["ERROR_MSG"])
    if code == 1:
        raise LookupError("該当データなし")
    return result
 
 
# ① 統計表を検索し、候補を表示する(IDを決め打ちしない)
found = call("getStatsList", searchWord="社会・人口統計体系 AND 東京都")
status(found, "GET_STATS_LIST")
tables = found["GET_STATS_LIST"]["DATALIST_INF"]["TABLE_INF"]
for t in tables if isinstance(tables, list) else [tables]:
    print(t["@id"], t["STATISTICS_NAME"], t["TITLE"])
 
# ここでは公式サンプルのIDを使う。実運用では①の出力から選んだIDを渡す
# ② 選んだ統計表のメタ情報から、項目コードと名称を確認する
meta = call("getMetaInfo", statsDataId="C0020050213000")
status(meta, "GET_META_INFO")
 
# ③ 確認したコードだけを指定して数値を取る
data = call("getStatsData", statsDataId="C0020050213000", cdCat01="#A03503")
status(data, "GET_STATS_DATA")
values = data["GET_STATS_DATA"]["STATISTICAL_DATA"]["DATA_INF"]["VALUE"]
print(len(values), "件")
# 初回だけ階層を確認する: print(json.dumps(meta, ensure_ascii=False, indent=2)[:3000])

urlencode を通すので、#A03503 の # は %23 に変換されます。公式サンプルの %23A03503 と同じ結果です。

JSONでは属性が @id や @code、値本体が $ というキーで返ります。公式のJavaScriptサンプルも valueData[key]['@time'] や ['$'] の形で読んでいます。

なお、このコードの検索語やJSONの階層は、API仕様のXML構造と公式サンプルから組んだ例です。実際のレスポンスの形を確かめてから使います。最初の呼び出しでは、結果を階層ごと出力させます。

統計コードの取り違えを防ぐ確認手順

e-Stat APIで起きやすい失敗は、通信エラーより「通ってしまうが別物」です。次の3点を、スクリプトとCLAUDE.mdの両方に仕込みます。

統計表IDはレスポンスから取らせる

統計表IDは、統計表情報取得のレスポンスに含まれる文字列です。FAQは、id 属性値(概ね10桁)が該当すると説明しています。Claudeの記憶にあるIDではなく、検索結果に出たIDだけを使わせます。

候補が複数あるときは、統計名・表題・調査年月を並べて、人が選ぶ段階を挟みます。

項目コードはメタ情報の名称と突き合わせる

メタ情報取得は、分類事項・時間軸事項・地域事項・表章事項を返します。cdCat01 に入れるコードは、ここで返る CLASS の code とその name の組で確認します。

取得後にも、統計データ側が返す CLASS_INF の名称と、依頼した項目名が一致しているかを出力させます。公式サンプルが分類事項の名称と単位(unit)をメタ情報から取り出して表示しているのは、この確認と同じ考え方です。

取得結果に出典と単位を付けて報告させる

分析結果には、統計表ID・統計名・項目名・単位・調査年月を必ず併記させます。結果を読む人が、値だけを見てもどの統計かが分かる状態にするためです。

CLAUDE.mdには、たとえば次のように書いておけます。

## e-Stat APIの扱い
- 統計表IDは getStatsList のレスポンスから取る。記憶や推測で書かない
- 項目コード(cdCat01 など)は getMetaInfo で code と name を確認してから使う
- 数値を報告するときは、統計表ID・統計名・項目名・単位・調査年月を併記する
- STATUS が 100 以上、または 1(該当データなし)のときは、条件を変えずに止めて報告する
- appId は環境変数 ESTAT_APP_ID から読む。コードやログに出さない

STATUSの扱いは、仕様で決まっています。0〜2は正常終了、100以上はエラーです。1は「正常に終了しましたが、該当データはありませんでした」を意味するため、HTTPが200でも結果は空です。条件が合わなければ空の結果になり得るので、空のまま分析に進まないようにします。

統計表が変わる回と、取得でつまずく場面

統計表IDやコードは固定ではありません。API機能のお知らせには、統計の改定に伴うID等の変更が並びます。消費者物価指数の基準改定に伴う、APIで利用可能な統計表IDの変更も2026年7月10日付で告知されています。

つまり、以前動いたスクリプトの統計表IDを使い回すと、改定後は別の表や古い表を指す場合があります。定期実行するスクリプトでは、統計表IDを固定せず、検索から再確認する流れにしておきます。

取得でつまずきやすい点は、FAQに載っています。

  • 地域メッシュ統計が検索に出ない: searchKind=2(小地域・地域メッシュ)を指定する。省略時は1(統計情報)
  • 最近更新された表だけ知りたい: 統計表情報取得で updatedDate を範囲検索の形(yyyymmdd-yyyymmdd)で指定する
  • 10万件を超える: NEXT_KEY を startPosition に渡して続きを取る
  • 認証エラー(STATUS 100): HTTPステータスは403で、appIdの誤りが原因になる

分析そのものをClaude Codeに繋ぐ例は、GA4のMCPサーバーやSearch Console APIの記事にあります。公的なWeb-APIをスクリプトで呼ぶ流れは、インボイス登録番号のWeb-API照合とも共通です。

まとめ

e-Stat APIでは、統計表IDを探し、メタ情報で中身を確かめ、コードを指定して数値を取る3段階を踏みます。Claudeに任せる範囲は、検索結果とメタ情報に現れた値だけに絞るのが安全です。

統計表IDと項目コードは、記憶や推測で書かせず、毎回レスポンスの名称と照らす。この確認をスクリプトとCLAUDE.mdに入れておけば、取り違えたまま分析が進む失敗を減らせます。

この記事を共有:XはてブLinkedIn