Claude Code × Medical Application

【Claude Code】社内の BI ダッシュボードを AI ダッシュボードに Part1:データ整備 — 年度・施設・地域の不一致をそろえる

1. はじめに — 最初につまずくのはデータ

Part0 では、社内の BI ダッシュボードを「話しかけると動く AI ダッシュボード」に変えてみた全体像を紹介しました。Part1 からは、作り方を1つずつ見ていきます。

社内の BI を作り直すとき、最初につまずくのは画面でも AI でもなく、データです。

  • 年度が変わると、施設や商品の番号が振り直される
  • 同じ施設なのに、システムごとに名前の書き方が違う
  • 営業のエリアや担当地域の区切りが、途中で変わる
  • 権限や件数の少なさで、見せない値がある

題材にした厚生労働省の DPC 公開データにも、この4つがそろっていました。データの中身は参照ページ「DPC公開データとは」にまとめたので、ここではどうそろえたかと、それを Claude Code にどう任せたかに絞ります。

  • 3年度令和4〜6年度をつなぐ。病院の番号は毎年振り直される
  • 6,448病院3年度に一度でも参加した病院。名前で地図の位置を付ける
  • 330圏二次医療圏。全国の対応表は古い版しかない
  • 2.6%手術別の表で数字が見えるセルの割合。残りは非公表

この回の構成です。

  1. はじめに(この章)
  2. 任せる前に書いたもの — CLAUDE.md
  3. 1つの段階の回し方 — 「1から進めて」とレビュー
  4. 年度をそろえる
  5. 施設をそろえる — 名寄せは「そこそこ」で止める
  6. 地域をそろえる
  7. 見せない値を持つ
  8. 画面に渡す形にする
  9. 今回のハーネス/まとめ

2. 任せる前に書いたもの — CLAUDE.md

Claude Code は、リポジトリの CLAUDE.md を毎回読んでから作業します。ここに書いたことが、Claude Code にとっての「この仕事の前提」になります。今回の CLAUDE.md は約170行で、次の順に並べました。

CLAUDE.md の構成。狙い・決まっていること・データの決まりごと・やってはいけないこと・動かし方・次にやること
上から、迷ったら戻る場所(狙い)→ 決まったこと → データの決まり → 禁止事項 → 動かし方 → 次にやること

書くときに気をつけたのは3つです。

  • 狙いを一番上に書く。 「記事のメッセージは BI の代わりになること」「見せたいのは作る過程」。細かい判断で迷ったとき、Claude Code はここに戻って選びます
  • やってはいけないことを、理由と一緒に書く。 「非公表の値を0や推定値で埋めない」「照合専用のファイルを公開物に出さない」。理由があると、書いていない似た場面でも同じ判断になります
  • 次にやることに番号を振る。 済んだものには取り消し線と、どこで照合したかを書き足します。これで、次の指示は番号を言うだけで済みます

CLAUDE.md は最初から完成していたわけではありません。作業で分かったこと、レビューで指摘されたこと、人が決めたことを、段階が終わるたびに書き戻して育てました(3章)。

3. 1つの段階の回し方 — 「1から進めて」とレビュー

3-1. 段階ごとに1周する

データの整備は、最初の調査と地図の位置付けまでを claude.ai の会話で進め、手術別の表の取り込みからは VS Code の Claude Code に移しました。任せる単位は「段階」です。1つの段階は、次の1周で終わります。

段階ごとに任せる1周。CLAUDE.md → 1から進めて → 調べて作る → 照合を通す → 別のセッションがレビュー → 人が決める → 書き戻してコミット
人がやるのは、最初の一言と、レビューを受けての判断だけ

全体の流れは sh pipeline/run.sh の1本にまとめ、取得から照合までが通しで走ります。照合が1つでも外れたら、そこで止まります。

取得 → 施設マスタ → 件数 → 二次医療圏 → アプリ用データ → 照合の6段階
段階が増えるたびに、run.sh に1行ずつ足していった

3-2. 「1から進めて」で起きたこと

令和6年度の手術別の表(疾患別手術別集計)を取り込んだときの指示は、「1から進めて」の一言でした。「次にやること」の1番が、この取り込みだったからです。Claude Code が自分で調べて決めたことを、作業ログから抜き出します。

  • 厚労省のページの見出しから表を探し、MDC17(精神)だけファイルがないことに気づいた。出典の一覧に注記した
  • 17ファイルの形がそろっていることを一括で確かめた。件数と在院日数は必ず一緒に「-」になり、見えている件数はすべて10以上
  • 「97(輸血以外の再掲)」が97の内数だと集計条件の資料で確かめ、別の分岐として足さないことにした
  • 手術の分岐(01、02…)には名前がないので、DPC電子点数表から付けた。点数表は改定後に何度も更新されているので、調査期間の終わり(2025年5月)の版を選んだ。1,359分岐すべてに名前が付いた
  • 手元に Excel を読む部品(openpyxl)がなかったので、作業用の環境(.venv)を作り、run.sh がそれを使うようにした

どれも、人が指示していないことです。「何をするか」は CLAUDE.md の番号が決め、「どう調べるか」は Claude Code に任せました。

3-3. 人が決めたこと、Claude Code が見つけたこと

任せきりにしたわけではありません。区切りごとに、人が決めたことがあります。

人が決めたこと Claude Code が見つけたこと
3年度(令和4〜6年度)を対象にする 病院の番号が毎年振り直されている
名寄せは「そこそこ」で止める 名前の類似度で取り違えが28件出た
推移は MDC 単位、疾患 × 手術は最新年度だけ 手術別の表に載るのは手術の分岐がある疾患だけ(MDC08 は23%)
秋田の組み替えは、県の資料の図から読んだ形でよいか 二次医療圏の名前が変わったのは秋田だけ

右の列は事実の発見、左の列はどこまでやるかの判断です。発見は AI が速く、判断は目的を知っている人が持つ。この分け方が、段階ごとの1周の中に入っています。

3-4. 別のセッションにレビューさせる

段階が終わるたびに、作業をした Claude Code とは別のセッションの Claude にレビューさせました。作った本人は、自分の前提を疑いにくいからです。

手術別の表の取り込みのあとのレビューでは、次の3つの指摘がありました。

  • 「行がない=非公表」が成り立つのは、その年度にその施設があるときだけ。参加前・閉院後は「データなし」と分ける
  • 手術名の点数表の版を、画面の注記に書く
  • 第8次医療計画で医療圏を見直した県がある。DPC の表の医療圏名と一致する版を使い、照合で確かめる

指摘はすぐにコードを直すのではなく、まず CLAUDE.md の「データの決まりごと」に書き戻してからコミットしました。次の段階の Claude Code も、同じ前提で動くようにするためです。

3-5. 作業ログを残させる

CLAUDE.md とは別に、notes/build-log.md という作業ログを Claude Code に書かせました。書く項目は4つだけです。

  • 頼んだこと
  • 任せた単位
  • 人が止めた・直した場面
  • 判断の理由

最初は記事の材料のつもりでしたが、実際には前の段階の判断を Claude Code 自身が読み返すための記録として効きました。「なぜ市町村の代表点にしたのか」「なぜ97再掲を足さないのか」が残っているので、あとから見直すときに同じ議論をやり直さずに済みます。

4. 年度をそろえる

4-1. 番号は毎年振り直される

3年度の推移を出すには、同じ病院を年度をまたいでつなぐ必要があります。施設の一覧を年度で比べると、病院の番号(告示番号)が毎年振り直されていました。令和4年度と令和6年度に両方ある番号のうち、98%は別の病院を指していました。

告示番号は毎年振り直される。番号どうしでつなぐと別の病院になり、通番をたどると正しくつながる
札幌市の例。番号どうしでつなぐと別の病院になる(コーラル)。通番をたどると正しくつながる(青緑)

名前でつなぐ方法も試しましたが、病院の名称変更(東京医科歯科大学病院 → 東京科学大学病院 など)が毎年100件前後あり、別の病院になってしまいます。表の注記を読むと、「通番=前年度の告示番号」という列がありました。これをたどると、98%以上がつながります。

社内のデータでいえば、顧客コードの振り直しや、基幹システムの入れ替えで番号が変わる場面にあたります。名前ではなく、新旧の対応表を探すのが先です。

4-2. 合併は2組を足す

合併した病院も2組見つかりました。同じ年度に、合併前と合併後の数か月分が別々に載っています。足し合わせ、片方が非公表なら「〇件以上」として扱います。画面では数字の右肩に小さな「+」を付ける形にしました(Part2 で紹介します)。

4-3. 年度の期間がずれている

令和6年度だけ、集計の期間が 2024年6月〜2025年5月でした(令和4・5年度は4月〜翌3月)。診療報酬改定の施行が6月になったためで、2024年4〜5月の退院はどの年度にも入りません。データは変えず、推移の画面に注記を出すことにしました。注記の文は画面に直書きせず、データと一緒に持つ設定ファイル(meta.json)に置いています。

5. 施設をそろえる — 名寄せは「そこそこ」で止める

5-1. 市町村の単位で置く案は却下

厚生労働省の表には、病院の住所も座標もありません。最初は、市町村の代表点に病院を置く案を考えました。ところが検証すると、市町村に病院が1つだけのケースは約6,400のうち433しかなく、鹿児島市では67の病院が1点に重なります。地図として使えないので却下しました。

5-2. 同じ市町村の中で、強い決め手から順に

代わりに、医療情報ネット(ナビイ)のオープンデータにある病院の座標を、同じ市町村の中だけで名前で突き合わせました。名前が完全に一致するもの、法人名を外して一致するもの、と強い決め手から順に、1対1で確定していきます。

名寄せのルールごとの件数。病院の位置 90.4%、市町村の代表点 8.9%、位置なし 0.7%
強い決め手から順に1対1で確定。残りは市町村の代表点に置く

1回目は、名前の類似度のルールで取り違えが28件ありました。「北海道医療大学病院」が「北海道大学病院」に、「佐藤第二病院」が「佐藤第一病院」に結び付くような誤りです。1対1で確定する形に変え、「第一/第二」「東西南北」「記念」のような区別の語が食い違う組を外して、0件にしました。最後に60件を抜き取り、誤りがないことを確かめています。

5-3. なぜ「そこそこ」で止めたか

名前で決められない病院は、市町村の代表点に置いています(地図では白抜きの円)。ここで止めたのは、この連載で見せたいのが作り方で、施設マスタの完成ではないからです。止めた理由とルールごとの件数は、表にして残しました。

6. 地域をそろえる

地域を「二次医療圏」で比べるには、市町村と医療圏の対応表が要ります。ところが、国土数値情報の医療圏データ(A38)は2020年度版(第7次医療計画)が最新で、第8次の全国の対応表は見つかりませんでした。

二次医療圏の対応表。古い版(A38)に、秋田と浜松の2つの例外だけを足し、330圏で一致
先に DPC の表を3年度で比べ、変わったのが秋田だけだと確かめてから足した

ここで Claude Code は、対応表を探し続けるのではなく、先に DPC の医療圏別の表を3年度で比べました。医療圏の名前が変わったのは秋田県だけ(8圏 → 3圏)。「古い版に秋田の組み替えだけを足せば足りる」と判断し、全国330圏の名前が表記ゆれもなく双方向で一致することを確かめています。

もう1つの例外は浜松市でした。23の病院に医療圏が付かず、調べると2024年1月の区の再編(7区 → 3区)で、古い版にない新しい市町村コードでした。旧7区がすべて「西部」医療圏に入ることを確かめて引き継いでいます。

レビューでは、さらに「名前が同じでも境界が変わることがある」という指摘を受けました。医療圏ごとの件数の変化率が、全国から大きくずれた圏を出す確認を足しています。ここで見つかったことは Part2 で紹介します。

7. 見せない値を持つ

7-1. 非公表のセルは行を作らない

DPC 公開データでは、10症例未満または0件のセルは「-」で伏せられています。手術別の表では、約866万セルのうち数字が見えるのは約22.7万、2.6% だけでした。

非公表のセルは行を作らない。Excel のままでは「-」の海。見える値だけを行にし、「行がない=非公表」と決めた
ただし「行がない=非公表」は、その年度にその施設があるときだけ

Excel の形のまま持つと、ほとんどが「-」の巨大な表になります。そこで、見える値だけを行にし、非公表のセルは行を作らない持ち方にしました。「行がない=非公表(10症例未満または0件)」を README に明記し、3-4 のレビューの指摘どおり、その年度に施設がないときは「データなし」と分けています。

非公表は、0として足さず、推定値でも埋めません。これは CLAUDE.md の「やってはいけないこと」の先頭に書いた決まりです。社内のデータでも、権限で見せない値や欠けている値を0で埋めると、合計がもっともらしく間違います。

7-2. 足してはいけない行を見分ける

手術別の表には「97(輸血以外の再掲)」という行があり、97(その他の手術)の内数です。足すと二重に数えます。Claude Code は、集計条件の資料でこれを確かめたうえで、照合でも裏付けました。施設 × MDC ごとに、手術別の見える件数の合計が、MDC別件数で取りうる上限を超えないかを調べ、違反は0件。この照合で「97再掲は手術あり側に入る」という読み方も確かめられています。

もう1つ、手術別の表に載るのは手術の分岐が定義された疾患だけです。皮膚(MDC08)は件数の23%しか載りません。この表を「MDCの内訳」として見せると誤解されるので、画面ではそう見せないと決めました(参照ページの図)。

8. 画面に渡す形にする

最後に、画面が読むデータの形を決めました。ブラウザでデータベースを動かす方式(DuckDB-Wasm)と、画面ごとに分けた JSON を比べ、JSON にしています。

DuckDB-Wasm 画面ごとの JSON
自由な集計 ブラウザで SQL が書ける できない(用意した画面だけ)
スマホの初回表示 本体だけで数MB、重い 必要なファイルだけ読む
今回の計算 — 施設数 × 18 MDC 程度の足し算で足りる

画面は決め打ちで、AI も SQL を書かずに条件を選ぶだけ(Part3)なので、自由な集計の力は要りません。アプリ用のデータは毎回まるごと作り直し、書いたファイルの一覧と実際のファイルが一致すること、作業用の _ 始まりのファイルが混じっていないことを、スクリプトの中で確かめています。

9. 今回のハーネス

道具 このリポジトリでの実体 役割
プロジェクト文書 CLAUDE.md(狙い・決まり・禁止事項・次にやること) 毎回の前提。指示は番号を言うだけ
作業ログ notes/build-log.md 判断の理由を残し、あとから読み返す
通しの手順 pipeline/run.sh 取得から照合まで1本。失敗したら止まる
レビュー 別のセッションの Claude 作った本人が疑いにくい前提を突く
人の判断 対象の範囲、名寄せの止めどころ、指摘を受けるか 目的を知っている人が持つ

10. まとめ

  • 社内の BI を作り直すとき、最初につまずくのはデータ。番号の振り直し、名前のゆれ、区切りの変更、見せない値の4つは、DPC 公開データにもそろっていた
  • CLAUDE.md に狙い・決まり・禁止事項・次にやることを書き、指示は「1から進めて」の一言にした。どう調べるかは Claude Code に任せた
  • 段階ごとに別のセッションがレビューし、指摘は CLAUDE.md に書き戻してからコミットした
  • 名寄せは「そこそこ」で止め、止めた理由と内訳を残した。非公表は0で埋めず、行を作らない持ち方にした

任せられる範囲は、前提を文書にした分だけ広がります。

次のステップ

Part2(近日公開)では、そろえたデータの数字の正しさをどう担保したかを扱います。照合のスクリプトに止める確認を足していったこと、テストも件数の照合も通っていたのに地図に描いたら305施設が海の上に出たこと、正しい数字でも誤解されない出し方を紹介します。

出典

  • 厚生労働省「令和6年度DPCの評価・検証等に係る調査「退院患者調査」の結果報告について」(令和8年3月30日公開、同年6月30日データ差替え)。https://www.mhlw.go.jp/stf/shingi2/newpage_00203.html
  • 厚生労働省「令和5年度DPC導入の影響評価に係る調査「退院患者調査」の結果報告について」。https://www.mhlw.go.jp/stf/shingi2/newpage_00137.html
  • 厚生労働省「令和4年度DPC導入の影響評価に係る調査「退院患者調査」の結果報告について」。https://www.mhlw.go.jp/stf/shingi2/newpage_39119.html
  • 厚生労働省「診断群分類(DPC)電子点数表」令和6年度診療報酬改定(令和7年5月20日更新)。https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000198757_00008.html
  • 厚生労働省「医療情報ネットのオープンデータ」(2026年6月1日時点)。https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/iryou/newpage_43373.html
  • 国土交通省「国土数値情報(医療圏データ)」2020年度版(CC BY 4.0)。秋田県は第8次医療計画の3圏に組み替えて使用
  • 本記事の図表は上記をもとに株式会社HerzLebenが加工して作成したもので、国が作成したものではありません