Claude Code で47都道府県分析を自動化|公務員のための AI × 統計 7 ステップ

AI
ClaudeCode
e-Stat
公務員
自動化

「47 都道府県の県民所得ランキングを、議会答弁用に明日までに揃えてほしい」——県庁で働いていたとき、こんな依頼は珍しくありませんでした。

e-Stat から CSV をダウンロードし、Excel で結合し、グラフを作り、Word に貼り付ける。1 つの指標で半日仕事です。本記事では、この作業を Claude Code に置き換えて 15 分で終わらせる 具体的な 7 ステップを公開します。

筆者は元県庁職員で、現在は個人でstats47.jp(47 都道府県の統計サイト)を運営しています。1 人で 331 ランキングを毎日更新できているのは、Claude Code による自動化があるからです。同じ仕組みは、自治体の議会資料・補助金交付要綱・決算カード作成にもそのまま転用できます。

自治体で統計を扱う担当者の「半日仕事」

自治体の統計担当の典型的な 1 日を思い出してみます。

  • 議員からの照会で「県民所得の全国順位の推移」を求められる
  • e-Stat を開き、該当の統計表を探す(最初の 15 分はここで消える)
  • CSV をダウンロードし、Excel で「セル参照のずれ」と戦う
  • VLOOKUP で他県データと結合、ピボットテーブルで集計
  • グラフを作り、Word に貼り付け、簡単なコメントを添える
  • 半日経過、デスクの周りはコーヒーカップだらけ

これを月に何回繰り返しているでしょうか。決算カード、補助金交付要綱の参考資料、議会答弁、首長の挨拶原稿、記者発表資料——統計データを引用する場面は枚挙にいとまがありません。

しかも、毎回ほぼ同じ作業です。データソースは e-Stat、整形はピボット、出力は Word/Excel。「定型化されているのに自動化されていない」 業務の代表例です。

本記事で扱う「自動化」とは 単にマクロを組むことではなく、「自然言語で指示するだけで、データ取得から資料出力まで一気通貫で走る」状態を指します。Claude Code は AI が手順書(スキル)に従って実行するので、毎回プログラムを書き直す必要はありません。

Claude Code とは|統計実務での価値

Claude Code は、Anthropic 社が提供する CLI 型の AI コーディングエージェント です。VSCode やターミナルから自然言語で指示を出すと、ファイル編集・コマンド実行・API 呼び出しまでを自律的にこなします。

統計実務における価値は 3 つあります。

価値具体
1. データ取得の自動化e-Stat API を直接叩き、CSV を介さずに整形まで完了
2. コード再利用性1 度書いた取得スクリプトを「スキル」化、翌月以降は引数差し替えだけ
3. レポート自動生成Markdown → PDF/Word、チャート画像、Excel への流し込みまで一括

ポイントは「ExcelやAccessが苦手な人でも使える」ことです。プログラミング経験がなくても、自然言語で「やってほしいこと」を伝えれば、Claude Code が裏でコードを書いて実行 します。

筆者の体感では、Excel マクロを習得するより Claude Code を覚える方が、公務員の方には合っていると思います。マクロは VBA の独自構文があり、ネット検索しても自分の業務にピタッと合うサンプルは少ない。一方 Claude Code は「県民所得を上位 10 県でグラフにして」と日本語で頼めば、その場でコードを書いてくれます。

7 ステップワークフロー|半日仕事を 15 分に圧縮する

ここからが本題です。Claude Code を使って 47 都道府県分析を自動化する 7 ステップを順に解説します。

Step 1: e-Stat API 鍵を取得する

最初に必要なのは e-Stat の API 鍵(appId)です。以下から無料登録できます。

登録後、マイページで appId が発行されます。これを環境変数 ESTAT_APP_ID として保存しておきます。

公務員の方への注意 庁内ネットワークから外部 API にアクセスできない環境では、自宅 PC や個人スマホのテザリングで動作確認するのが現実的です。本格運用時は情報セキュリティ部門に「e-Stat は公開データのみを扱う API である」ことを説明し、ホワイトリスト登録を依頼してください。

Step 2: Claude Code 環境を構築する

Claude Code のインストールは、ターミナルから 1 行で完了します。

npm install -g @anthropic-ai/claude-code

VSCode と統合するなら、Claude Code 公式拡張機能をインストールして、コマンドパレットから Claude Code: Start を実行するだけです。

Pro プラン(月額 $20)に契約すれば、追加の API 料金なしで一定量まで使えます。後述しますが、47 都道府県分析を月に 10 本程度こなす規模なら Pro プランで十分です。

Step 3: 自然言語で 47 都道府県データを取得する

ここから AI に頼む工程です。Claude Code に以下のように話しかけます。

e-Stat API を使って、都道府県別の県民所得(最新年度)を取得して、
prefecture_income.csv に保存して。

すると Claude Code は、e-Stat の統計表 ID を検索し、該当データを取得して CSV に整形するコードを書き、実行までしてくれます。

裏で動くコードのイメージはこんな形です(Python の例)。

import requests
import pandas as pd
import os

APP_ID = os.environ["ESTAT_APP_ID"]
STATS_DATA_ID = "0003445758"  # 県民所得統計(例)

url = "https://api.e-stat.go.jp/rest/3.0/app/json/getStatsData"
params = {
    "appId": APP_ID,
    "statsDataId": STATS_DATA_ID,
    "lvArea": "2",  # 都道府県レベル
}

response = requests.get(url, params=params)
data = response.json()

# DataValue 配列を DataFrame に変換
values = data["GET_STATS_DATA"]["STATISTICAL_DATA"]["DATA_INF"]["VALUE"]
df = pd.DataFrame(values)
df.to_csv("prefecture_income.csv", index=False)

Claude Code を使う最大の利点は、「このコードを書く時間がゼロ」 という点です。「県民所得を取りたい」と日本語で言うだけで、AI が統計表 ID を調べ、API 呼び出しを書き、CSV 整形までやってくれます。

Step 4: 都道府県別ランキングを自動生成する

CSV ができたら、次は順位付けです。これも自然言語で頼みます。

prefecture_income.csv を読み込んで、都道府県別の県民所得を
高い順に並べたランキング表を作って。1人当たり所得も列に追加して。

Claude Code は pandas で並び替え、計算列を追加、結果を Markdown 表形式で出力します。

import pandas as pd

df = pd.read_csv("prefecture_income.csv")
df_ranked = df.sort_values("value", ascending=False).reset_index(drop=True)
df_ranked["rank"] = df_ranked.index + 1
df_ranked["per_capita"] = df_ranked["value"] / df_ranked["population"]
print(df_ranked.to_markdown(index=False))

このランキング表をそのまま議会資料や記者発表資料に貼り付けられます。

Step 5: チャート出力(D3.js または matplotlib)

数値だけでは伝わらないので、グラフ化します。Claude Code に頼みます。

ランキング上位 10 県の県民所得を棒グラフにして、
PNG で出力して。フォントは日本語対応で。

裏では matplotlib(Python)か D3.js(JavaScript)でグラフが生成されます。stats47.jp では D3.js で SVG を生成して Web 表示していますが、自治体内部資料なら matplotlib で PNG を出すのが扱いやすいです。

import matplotlib.pyplot as plt
import japanize_matplotlib  # 日本語フォント対応

top10 = df_ranked.head(10)
plt.figure(figsize=(10, 6))
plt.barh(top10["prefecture"], top10["value"])
plt.xlabel("県民所得(百万円)")
plt.gca().invert_yaxis()
plt.tight_layout()
plt.savefig("ranking_top10.png", dpi=150)

japanize_matplotlib を入れておけば日本語の文字化けも回避できます。これも Claude Code に「日本語フォントで」と頼めば自動で追加してくれます。

Step 6: レポートを PDF/Word に変換する

ランキング表とグラフが揃ったら、最終アウトプットの資料化です。

ランキング表とグラフを使って、
「県民所得の全国比較レポート」というタイトルで Word ファイルを作って。

Claude Code は python-docx ライブラリで Word ファイルを生成します。PDF が必要なら pandoc 経由で Markdown → PDF にも変換できます。

from docx import Document
from docx.shared import Inches

doc = Document()
doc.add_heading("県民所得の全国比較レポート", level=1)
doc.add_paragraph("最新年度の都道府県別県民所得ランキングを以下に示します。")

# 表の挿入
table = doc.add_table(rows=1, cols=3)
table.style = "Light Grid Accent 1"
hdr = table.rows[0].cells
hdr[0].text = "順位"
hdr[1].text = "都道府県"
hdr[2].text = "県民所得(百万円)"

for _, row in df_ranked.head(10).iterrows():
    cells = table.add_row().cells
    cells[0].text = str(row["rank"])
    cells[1].text = row["prefecture"]
    cells[2].text = f"{row['value']:,.0f}"

# グラフの挿入
doc.add_picture("ranking_top10.png", width=Inches(6))
doc.save("report.docx")

これで議会答弁用の資料下書きが完成します。あとは担当者が文章を整え、必要な解釈を追記するだけです。「機械的な 90%」を AI が、「判断の 10%」を人間が担う という分業が自然にできます。

Step 7: 定期実行スクリプト化する

最後の仕上げは「人間がボタンを押さなくても動く」状態にすることです。

毎月 1 日の朝 7 時に自動実行したいなら、Mac の場合は launchd、Windows ならタスクスケジューラ、Linux なら cron に登録します。

# crontab -e で以下を追加(毎月 1 日 7:00 に実行)
0 7 1 * * cd /path/to/project && python generate_report.py

これで翌月以降、出勤するとデスクに最新の県民所得レポートが届いている状態になります。属人化も解消できます。担当者が異動・退職しても、スクリプトと SKILL.md(手順書)が残っていれば後任者がそのまま運用を引き継げます。

実例|県民所得ランキング自動生成のフルコード

7 ステップを実際に動かすと、コードはこのくらいで完結します。

# generate_income_ranking.py
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
from docx import Document
from docx.shared import Inches

APP_ID = os.environ["ESTAT_APP_ID"]
STATS_DATA_ID = "0003445758"

# Step 1-3: データ取得
url = "https://api.e-stat.go.jp/rest/3.0/app/json/getStatsData"
params = {"appId": APP_ID, "statsDataId": STATS_DATA_ID, "lvArea": "2"}
data = requests.get(url, params=params).json()
values = data["GET_STATS_DATA"]["STATISTICAL_DATA"]["DATA_INF"]["VALUE"]
df = pd.DataFrame(values)

# Step 4: ランキング化
df_ranked = df.sort_values("$", ascending=False).reset_index(drop=True)
df_ranked["rank"] = df_ranked.index + 1

# Step 5: グラフ化
top10 = df_ranked.head(10)
plt.figure(figsize=(10, 6))
plt.barh(top10["@area"], top10["$"].astype(float))
plt.xlabel("県民所得(百万円)")
plt.gca().invert_yaxis()
plt.tight_layout()
plt.savefig("ranking_top10.png", dpi=150)

# Step 6: Word 出力
doc = Document()
doc.add_heading("県民所得の全国比較レポート", level=1)
doc.add_picture("ranking_top10.png", width=Inches(6))
doc.save("report.docx")

50 行程度のコードですが、これを 1 から書こうとすると、e-Stat API のレスポンス構造を調べるだけで半日かかります。Claude Code に「県民所得を取って Word レポートにして」と頼めば、このコードが自動で生成されます。

データの読み方|県民所得の注意点 県民所得は「県内総生産」とは異なる指標で、企業所得・財産所得・雇用者報酬を合算したものを県内人口で割った値です。県内総生産(GDP)よりも住民の所得実感に近い指標ですが、本社所在地の影響で東京都が高く出やすい性質があります。議会資料で引用する際は、「1 人当たり県民所得は本社集中の影響を受ける」と注釈を入れるのが誠実です。

コスト感|月額いくらで運用できるか

Claude Code の料金体系は 2 通りあります。

プラン月額使用量目安
Claude Pro$20(約 3,000 円)個人で月数十回の利用
Claude API 従量課金約 $3〜15 / 100 万トークン大量の自動化を組む場合

公務員の月次レポート作成程度であれば、Claude Pro 1 契約(月 3,000 円)で十分 カバーできます。Excel マクロのスペシャリストを 1 人雇うコストと比較すれば、極めて安価です。

ただし、機密データを扱う場合は AWS Bedrock 経由で Claude を呼び出す構成にして、データが Anthropic 社のサーバーを経由しないようにする選択肢もあります。詳細は後述の Tips を参照してください。

公務員向け Tips|機密データ・ローカル実行・Bedrock 経由

Tip 1: 機密データは Claude Code に渡さない

人事情報・税情報・生活保護受給者リストなど、外部に出してはいけないデータは Claude Code(クラウド版)に投入してはいけません。

ガイドラインとして、「e-Stat のような公開データはクラウド OK、庁内 DB の個別データは閉域網 OK」 という線引きを部署内で明文化するのが第一歩です。

Tip 2: ローカル LLM で完全閉域運用

機密データを扱う場合は、OllamaLM Studio で Llama 3 などのオープンソース LLM をローカル PC 上で動かす選択肢があります。精度は Claude より落ちますが、データが PC の外に出ない安心感はあります。

# Ollama で Llama 3 を起動(macOS / Linux / Windows 対応)
ollama run llama3

Claude Code は Anthropic API 専用ですが、同様の CLI として AiderContinue.dev はローカル LLM にも対応しています。

Tip 3: AWS Bedrock 経由で Claude を呼び出す

「クラウド LLM を使いたいが、Anthropic のサーバーを経由したくない」場合、AWS Bedrock 経由で Claude を呼び出すと データは AWS 内に留まり、Anthropic 社には送信されません。多くの自治体・公共機関が AWS と契約済みのため、追加の調達手続きも最小化できます。

import boto3
client = boto3.client("bedrock-runtime", region_name="ap-northeast-1")
response = client.invoke_model(
    modelId="anthropic.claude-3-5-sonnet-20241022-v2:0",
    body=json.dumps({"messages": [{"role": "user", "content": "..."}]})
)

実装はやや複雑になりますが、調達ガバナンス的にはこちらが本命だと思います。

Tip 4: スキル(SKILL.md)化で属人化を防ぐ

Claude Code には「スキル」という再利用可能な手順書の仕組みがあります。SKILL.md という Markdown ファイルに「何をどの順番で実行するか」を書いておくと、毎回同じ作業を 1 コマンドで呼び出せます。

---
name: fetch-prefecture-income
description: 県民所得の最新データを取得してランキングレポートを生成
---

## 入力
- 出力年度(デフォルト: 最新)

## 手順
1. e-Stat API から県民所得データ取得
2. 都道府県別ランキング作成
3. 上位 10 県の棒グラフを PNG 出力
4. Word レポート生成
5. 指定フォルダに保存

これを .claude/skills/ 配下に置けば、Claude Code に「fetch-prefecture-income を実行して」と頼むだけで、毎回同じ品質の資料が出力されます。業務マニュアルの「文書化」と「実行可能化」が同時に解決 されるのが、SKILL.md の最大の価値です。

異動・退職時の引き継ぎも、SKILL.md を渡すだけで完結します。

まとめ|「半日仕事」を「15 分」に変える発想

自治体の統計業務は、定型化されているのに自動化されていない 領域の宝庫です。e-Stat、議会資料、決算カード、補助金交付要綱の参考データ——どれも毎月・毎年ほぼ同じ手順で作っているはず。

Claude Code を導入する真の価値は「コードを書く時間の短縮」ではなく、「業務を分解し、機械化できる部分を AI に任せる」発想の獲得 にあります。データを取る・整形する・グラフにする・資料化する、それぞれの工程を独立した部品として捉え直せれば、Claude Code はそれを高速に実行してくれます。

stats47.jp では、今回紹介した 7 ステップを発展させ、331 ランキング・124 本のブログ記事を 1 人で運用 しています。同じ仕組みは中規模自治体(職員数千人規模)の月次業務にもそのまま転用できる規模感です。

まずは「県民所得ランキング 1 本」を 15 分で作るところから始めてみてください。手応えを掴んだら、議会答弁・記者発表・庁内ダッシュボードへと展開していけます。

関連ランキング・記事