雇用・賃金の統計をAPIで取る
完全失業率や就業者数、平均賃金といった雇用・労働の統計は、報道で数字を見る機会は多いものの、いざ自分のプログラムから取ろうとすると意外と入口が分かりにくいものです。実は総務省統計局の「統計ダッシュボード」がAPIを公開しており、こちらは利用登録もAPIキーも不要で、約5,800系列の主要統計を時系列・地域別に取得できます。ただし系列コードの探し方に癖があり、さらにパラメータ名を一文字でも間違えると、エラーメッセージではなくHTTPの404が返ってくるという厳しい作りになっています。このガイドでは、雇用・賃金のデータを実際に取るまでの手順と、途中で必ず引っかかる罠を整理します。
登録不要で取れる「統計ダッシュボード」API
統計ダッシュボード(総務省統計局)は、各府省の主要統計を横断的に集めて可視化しているサイトで、その裏側のAPIが公開されています。e-Stat本体のAPIは利用登録してアプリケーションIDを取得する必要がありますが、統計ダッシュボードのAPIは登録もキーも不要です。「まず雇用の数字を1本取ってグラフにしたい」という段階では、こちらのほうが圧倒的に早く着手できます。
収録されている系列を実際に数えたところ、5,799系列ありました。雇用・労働の分野では、完全失業者数・完全失業率(男女計/男/女)とその前年同月増減、就業者数、現金給与総額、労働時間などが揃っています。データの元をたどると、労働力調査や毎月勤労統計調査といった基幹統計です。
ベースURLは `https://dashboard.e-stat.go.jp/api/1.0` で、系列のメタ情報を引く getIndicatorInfo と、実データを引く getData の2つを使い分けます。
系列コードは19桁(ここで最初に詰まる)
データを取るには系列コード(IndicatorCode)が必要ですが、これが19桁の数字です。たとえば「完全失業率(男女計)」は 0301010000020020010 です。先頭の 0301 が労働・賃金の分野を表しますが、0301 だけを渡しても目的のデータは取れません。19桁すべてが必要です。
厄介なのは、短いコードを渡したときの挙動です。エラーにはならず、`status: "1"` と `errorMsg: "正常に終了しましたが、該当データはありませんでした。"` が返ってきます。「正常に終了しました」と書いてあるのにデータが空、という状態です。status が 0 なら正常、1 ならヒット0件、と読み分ける必要があります。
参考までに、雇用系の主な系列コードは次のとおりです。完全失業率(男女計)が 0301010000020020010、完全失業者(男女計)が 0301010000020010010、完全失業率(男)が 0301010001020020010、完全失業率(女)が 0301010002020020010 です。男女別は10〜11桁目が 00 / 01 / 02 で切り替わる構造になっています。
系列一覧は10MB超で返ってくる
「コードが分からないなら一覧を取ればいい」と考えて、getIndicatorInfo をパラメータなしで叩くと痛い目に遭います。5,799系列すべてのメタ情報が一度に返ってきて、レスポンスは10MBを超えました(実測で約12MB、35万行以上のJSON)。ページングのパラメータは用意されていません。
ブラウザやNotebookで気軽に叩くとフリーズしかねない大きさなので、一覧を取るならファイルに落としてから検索する前提で扱ってください。一度取得してローカルにコードと名称の対応表を作ってしまえば、以降は使い回せます。系列の増減は頻繁ではないので、都度取り直す必要はありません。
最大の罠:パラメータ名を間違えると404が返る
このAPIで最も危険なのが、パラメータ名の扱いです。認識されないクエリパラメータを1つでも付けると、JSONのエラーではなく、HTMLのエラーページとともにHTTP 404が返ってきます。試しに `Hoge=1` という存在しないパラメータを足しただけでも404になりました。
これが恐ろしいのは、原因の切り分けを誤らせるからです。404を見ると普通は「URLが間違っている」「エンドポイントが変わった」と考えますが、実際にはエンドポイントは正しく、余計なパラメータが1つ混ざっているだけ、というケースがあります。パラメータ名は大文字小文字も区別されるため、`timefrom` と書いても404です。
期間指定のパラメータは `TimeFrom` と `TimeTo` です。似た名前で `TimeCdFrom` のような書き方をすると、当然404になります。実際に、完全失業率の系列に対して RegionCode だけを指定して叩くと、1953年からの全期間3,836件・約428KBが返ってきますが、`TimeFrom=20250100&TimeTo=20261200` を正しく付けると34件・約7KBまで絞れました。転送量にして98%の削減です。期間指定が効いていないと感じたら、まずパラメータ名を疑ってください。
同様に、地域を指定しないと全地域(実測で66地域)が返ります。全国だけが欲しい場合は `RegionCode=00000` を指定してください。
季節調整値と原数値が混ざって返る
解釈の面で最も事故を起こしやすいのがこれです。完全失業率を素直に取得すると、レスポンスの中に季節調整済みの値と原数値が両方入ったまま返ってきます。実測では、2025年1月以降の34件のうち、季節調整値が17件、原数値が17件という内訳でした。各レコードの `@isSeasonal` フラグで区別されています。
この混在に気づかずに時系列としてそのままグラフに描くと、同じ月に異なる2つの値が並ぶことになり、折れ線がジグザグに振動します。「失業率が月内で乱高下している」ように見えますが、単に2系統のデータを重ねているだけです。
取得時に `IsSeasonalAdjustment` パラメータで絞り込むのが確実です。指定すると実測でレスポンスサイズがほぼ半分になりました。失業率のトレンドを見たいなら季節調整値、原数のまま扱いたいなら原数値、と目的に応じて明示的に選んでください。どちらを使ったかは、グラフや記事に必ず明記すべき情報です。
なお1つのレスポンスに月次・四半期・年度といった異なる周期のデータが混在することもあります(`@cycle` フラグで区別)。周期を跨いだ値をそのまま並べないよう注意してください。
より細かい統計が要るときはe-Statへ
統計ダッシュボードは「主要指標を手軽に」という設計なので、職種別・年齢別・企業規模別といった細かいクロス集計までは持っていません。賃金構造基本統計調査のような詳細データが必要になったら、e-Stat本体のAPIに移ることになります。
e-Statは利用登録してアプリケーションID(appId)を取得する必要がありますが、無料です。統計表を検索してから、メタ情報で分類軸を確認し、数値を取得する、という三段構えになります。まず統計ダッシュボードで全体の傾向を掴み、深掘りが必要な部分だけe-Statに取りに行く、という使い分けが実務的です。
実際に叩いてみる(統計ダッシュボードAPI・登録不要)
総務省の統計ダッシュボードAPIは登録不要のJSON APIで、雇用・賃金を含む主要指標の時系列を取得できます。getIndicatorInfo で指標のメタ(IndicatorCode)を確認し、getData に IndicatorCode を渡して数値を取ります。e-Stat本体のappIdは不要な点が便利です。
curl -s "https://dashboard.e-stat.go.jp/api/1.0/Json/getIndicatorInfo?Lang=JP&IndicatorCode=0201010000000010000"
# 実際のレスポンス(抜粋)
{ "GET_META_INDICATOR_INF": { "RESULT": { "status": "0", "errorMsg": "正常に終了しました。" } } }
# 数値そのものは getData に IndicatorCode を渡して取得
curl -s "https://dashboard.e-stat.go.jp/api/1.0/Json/getData?Lang=JP&IndicatorCode=0201010000000010000"出典
元システムエンジニア。Web系アプリ開発6年+ソリューション9年、IT実務およそ15年。個人開発者として、政府オープンデータや各府省のAPIを実際に叩いて検証し、「何が取れるか」「実装時にどこで詰まるか」「どう活用するか」を一次検証にもとづいて記録しています。
運営者・検証方針について →