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
e-Statのユーザ登録をする
API機能の利用にはe-Statのユーザ登録が必要です。登録済みなら飛ばせます。
- 2
マイページでアプリケーションIDを発行する
ログイン後のマイページにあるAPI機能(アプリケーションID発行)から、開発するアプリケーションごとにIDを取得します。
- 3
API仕様を確認する
現在のバージョンは3.0で、ホスト名は
api.e-stat.go.jp、リクエストURLは/rest/3.0/app/以下です。 - 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
統計表情報取得で統計表IDを探す
調査年月・調査名・検索キーワードなどで統計表を検索し、目的の統計表IDを取得します。
- 2
メタ情報取得で中身を確認する
①で得た統計表IDを渡して、分類事項・時間軸事項・地域事項・表章事項を確認します。
- 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に入れておけば、取り違えたまま分析が進む失敗を減らせます。