Claudeでビル管法の空気環境測定を基準値に当てる — 不適合と測定の抜けを洗う
ビル管法の空気環境測定記録(温度・相対湿度・CO2・CO・気流・浮遊粉じん・ホルムアルデヒド)のCSVを、施行令の基準値と施行規則の測定ルールに当てて、不適合と測定の抜けをClaudeに洗わせる手順です。
空気環境測定の記録を基準値に当てる作業は、Claudeに向いています。7項目の数値を、条文にある基準と一行ずつ比べるだけの作業だからです。ただし基準値と測定ルールは、記憶ではなく条文の数字をそのまま渡します。
基準値は、建築物における衛生的環境の確保に関する法律(通称ビル管法)の施行令第二条に書かれています。測り方と頻度は施行規則の第三条の二です。この記事では、2つの条文から点検の物差しを作り、測定記録のCSVを機械的に洗う手順を示します。末尾の検算スクリプトは、手元の架空データで実際に走らせた出力つきです。
条文が決めている数字
測定頻度
2か月以内ごとに1回
定期に測定する
測定位置
床上75〜150cm
各階の居室の中央部
記録の保存
5年間
測定結果を含む帳簿書類
基準値は施行令、測り方は施行規則にある
空気環境の基準値を探すと、施行規則を開いても数字が出てきません。基準値の表は施行令の第二条にあり、施行規則の第三条の二は「どう測るか」だけを定めています。点検表を作るときは、2つの条文を別々に写します。
施行令第二条の基準値
居室の空気は、次の表の基準に「おおむね」適合するように供給することが求められています。
| 項目 | 基準値 | 空気調和設備 | 機械換気設備 |
|---|---|---|---|
| 浮遊粉じんの量 | 基準値空気1立方メートルにつき0.15ミリグラム以下 | 空気調和設備定期測定 | 機械換気設備定期測定 |
| 一酸化炭素の含有率 | 基準値100万分の6以下 | 空気調和設備定期測定 | 機械換気設備定期測定 |
| 二酸化炭素の含有率 | 基準値100万分の1,000以下 | 空気調和設備定期測定 | 機械換気設備定期測定 |
| 温度 | 基準値18度以上28度以下 | 空気調和設備定期測定 | 機械換気設備定期測定の対象外 |
| 相対湿度 | 基準値40パーセント以上70パーセント以下 | 空気調和設備定期測定 | 機械換気設備定期測定の対象外 |
| 気流 | 基準値毎秒0.5メートル以下 | 空気調和設備定期測定 | 機械換気設備定期測定 |
| ホルムアルデヒドの量 | 基準値空気1立方メートルにつき0.1ミリグラム以下 | 空気調和設備建築等の後に1回 | 機械換気設備建築等の後に1回 |
右の2列は、施行規則第三条の二が「どの設備なら、どの項目を2か月以内ごとに測るか」を定めた部分です。空気調和設備(温度・湿度・流量を調節して空気を供給できる設備)なら表の1〜6番の項目を、機械換気設備(流量だけを調節する設備)なら浮遊粉じん・一酸化炭素・二酸化炭素・気流の4項目を測ります。
温度の欄には、もう1つ条件があります。居室の温度を外気より低くする場合は、その差を著しくしないこと、です。「著しい」の数値は、この条文にありません。点検表では、室温と外気温の差を並べて見せるところまでをClaudeに任せ、問題かどうかは人が読みます。
施行規則第三条の二の測り方
測定の方法は、4つに分かれています。
- 通常の使用時間中に、各階ごとに、居室の中央部の床上75センチメートル以上150センチメートル以下の位置で測る
- 浮遊粉じん・一酸化炭素・二酸化炭素は、基準値と比べる数値を「一日の使用時間中の平均値」にする
- 設備の種類に応じた項目を、2か月以内ごとに1回、定期に測る
- 建築・大規模の修繕・大規模の模様替を行ったら、その階層の居室のホルムアルデヒドを、使用開始の日以後に最初に来る測定期間(6月1日から9月30日まで)中に1回測る
測定器にも指定があります。一酸化炭素と二酸化炭素は検知管方式の検定器、温度は0.5度目盛の温度計、相対湿度は0.5度目盛の乾湿球湿度計、気流は0.2メートル毎秒以上の気流を測れる風速計です。
点検表の列を、条文の言葉に合わせる
Claudeに渡すCSVは、1行を「1回の測定」にします。列は条文の用語に合わせると、後で基準の表と突き合わせやすくなります。
date,floor,point,system,dust,co,co2,temp,rh,air,hcho
2026-04-20,2F,A,空調,0.05,2,820,23.5,45,0.2,
2026-04-20,2F,A,空調,0.07,3,900,24.0,46,0.2,
2026-06-22,2F,A,空調,0.04,2,1100,29.0,38,0.3,
2026-09-14,B1,A,機械換気,0.21,2,950,,,0.2,列の意味は次のとおりです。値はすべて架空の例です。
| 列 | 内容 | 単位 |
|---|---|---|
| date | 内容測定日 | 単位年-月-日 |
| floor | 内容階 | 単位B1、2Fなど |
| point | 内容測定点の名前 | 単位A、Bなど |
| system | 内容設備の種類 | 単位空調 または 機械換気 |
| dust | 内容浮遊粉じんの量 | 単位mg/㎥ |
| co | 内容一酸化炭素 | 単位ppm |
| co2 | 内容二酸化炭素 | 単位ppm |
| temp | 内容温度 | 単位℃ |
| rh | 内容相対湿度 | 単位% |
| air | 内容気流 | 単位m/s |
| hcho | 内容ホルムアルデヒド | 単位mg/㎥ |
測定していない項目は、0を入れずに空欄にします。0と空欄を区別しておけば、「測って0だった」と「測っていない」を取り違えません。機械換気の階で温度と湿度が空欄になるのは、定期測定の対象外だからです。
気流の列は数値だけにします。測定器は0.2メートル毎秒以上の気流を測れるものと定められているので、現場の帳票には「0.2未満」や「無風」と書かれがちです。その文字が列に入ると数値として読み込めません。文字は別の備考列に逃がし、気流の列は読み取れた数値だけにします。
測定点の数と位置は、この条文から決まりません。施行規則が書いているのは「各階ごと」「居室の中央部」「床上75〜150センチメートル」までです。点の数は施設の測定計画に合わせ、点検表には計画どおりの階の一覧だけを持ち込みます。
Claudeに頼む内容と、頼まない内容
頼むのは、条文の数字を使った機械的な照合です。基準値は記憶から答えさせず、こちらから貼る表だけを使わせます。
添付の air.csv は、特定建築物の空気環境測定の記録です(施設の実データ)。
次の基準だけを使って点検してください。基準を補ったり推測したりしないこと。
- 浮遊粉じん 0.15mg/㎥以下、CO 6ppm以下、CO2 1000ppm以下
- 温度 18〜28℃、相対湿度 40〜70%、気流 0.5m/s以下
- 浮遊粉じん・CO・CO2は、同じ日・階・測定点の平均値で比べる
- 空調は粉じん・CO・CO2・温度・湿度・気流を、機械換気は
粉じん・CO・CO2・気流を2か月以内ごとに測る
出力は、不適合、未記入、測定間隔の超過、記録のない階の4つの一覧にしてください。
合否の判断や原因の推測は書かないでください。この指示で、結果が「判定」ではなく「確認事項の一覧」になります。数値がどれだけ超えたかの原因、設備の不具合かどうか、是正の要否は、現場を見ている人が決めます。条文も、基準への適合を「おおむね」と書いているだけで、超過の許容幅までは書いていません。
数え上げはコードで走らせる
数千行のCSVを会話の中で目視させると、行の読み落としが出ます。Claudeにスクリプトを書かせて実行させる形にすると、数え上げが再現できます。APIのコード実行ツールは、Files APIでアップロードしたCSVやExcelをPythonで処理できます。実行環境はインターネットに接続できず、あらかじめ入っているライブラリだけが使えます。pandasは、そのライブラリに含まれています。
次のスクリプトは、上のプロンプトの内容を実装した例です。Claudeに書かせた場合も、この形になっているかを見比べてください。
import pandas as pd
LIMITS = { # 項目: (下限, 上限)
"dust": (None, 0.15), "co": (None, 6), "co2": (None, 1000),
"temp": (18, 28), "rh": (40, 70), "air": (None, 0.5),
"hcho": (None, 0.1),
}
REQUIRED = { # 設備ごとに定期測定する項目
"空調": ["dust", "co", "co2", "temp", "rh", "air"],
"機械換気": ["dust", "co", "co2", "air"],
}
DAILY_MEAN = ["dust", "co", "co2"] # 1日の平均値で比べる項目
COMPLETED = {"3F": "2026-04-15"} # 建築等の完了日(例)
FLOORS = ["B1", "2F", "3F", "4F"] # 測定計画にある階
TODAY = pd.Timestamp("2026-10-20")
df = pd.read_csv("air.csv", parse_dates=["date"])
key = ["date", "floor", "point"]
# 1. 基準値に当てる(粉じん・CO・CO2は日平均、他は個々の値)
mean = df.groupby(key, as_index=False)[DAILY_MEAN].mean()
for item, (lo, hi) in LIMITS.items():
src = mean if item in DAILY_MEAN else df
v = src[item].dropna()
low = (v < lo) if lo is not None else (v != v)
for _, r in src.loc[v[low | (v > hi)].index].iterrows():
print(f"不適合 {r.date:%Y-%m-%d} {r.floor} {r.point} "
f"{item}={r[item]}")
# 2. 記録が1行もない階
for f in FLOORS:
if f not in set(df.floor):
print(f"階の記録なし {f}")
# 3. 設備ごとの必須項目の空欄
for _, r in df.iterrows():
for item in REQUIRED[r.system]:
if pd.isna(r[item]):
print(f"未記入 {r.date:%Y-%m-%d} {r.floor} {r.point} {item}")
# 4. 階ごとの測定間隔(2か月以内ごと)
for floor, g in df.groupby("floor"):
dates = sorted(g["date"].unique()) + [TODAY]
for a, b in zip(dates, dates[1:]):
if b > pd.Timestamp(a) + pd.DateOffset(months=2):
print(f"間隔超過 {floor} {pd.Timestamp(a):%Y-%m-%d}"
f" -> {pd.Timestamp(b):%Y-%m-%d}")
# 5. 建築等のあと最初の6/1-9/30にホルムアルデヒドを測ったか
for floor, done in COMPLETED.items():
done = pd.Timestamp(done)
y = done.year if done <= pd.Timestamp(done.year, 9, 30) else done.year + 1
start = max(done, pd.Timestamp(y, 6, 1))
g = df[(df.floor == floor) & (df.date >= start)
& (df.date <= pd.Timestamp(y, 9, 30))]
if g["hcho"].dropna().empty:
print(f"HCHO未測定 {floor} {start:%Y-%m-%d}〜{y}-09-30")python check_air.py手元で、前節の4行に数行を足した架空のCSVに対して走らせた出力は次のとおりです(2F・3F・B1の3つの階を記録し、4Fは記録なし、3Fは4月に建築等が完了した想定)。
不適合 2026-09-14 B1 A dust=0.21
不適合 2026-06-22 2F A co2=1125.0
不適合 2026-06-22 2F A temp=29.0
不適合 2026-06-22 2F A temp=29.5
不適合 2026-06-22 2F A rh=38.0
不適合 2026-06-22 2F A rh=39.0
不適合 2026-06-22 3F A air=0.6
階の記録なし 4F
未記入 2026-09-14 2F A rh
間隔超過 2F 2026-04-20 -> 2026-06-22
間隔超過 2F 2026-06-22 -> 2026-09-14
間隔超過 3F 2026-04-20 -> 2026-06-22
間隔超過 3F 2026-06-22 -> 2026-10-20
HCHO未測定 3F 2026-06-01〜2026-09-302Fの二酸化炭素は、同じ日の2回の測定(1,100と1,150)を平均した1,125で比べています。2回とも超過ですが、1回だけ超過の日でも、平均が1,000以下なら不適合に数えません。
出力を読むときの落とし穴
落とし穴
日平均に直さず、1回の値で比べてしまう
浮遊粉じん・一酸化炭素・二酸化炭素は、比べる数値が「一日の使用時間中の平均値」です。朝の測定が高く昼が低い日に、1回の値だけを基準に当てると、不適合が増えすぎます。逆に、午後の1回だけを測っている日は、平均を取りようがありません。条文は平均を取る単位(測定点ごとか、階ごとか)まで書いていないので、上のスクリプトは「同じ日・階・測定点」で平均しています。施設の測定計画が別の単位なら、keyの列を差し替えます。
落とし穴
間隔超過の2か月を、30日や60日で数えてしまう
条文は「二月以内ごとに一回」です。日数の60日で数えると、31日の月が続く時期に誤判定が出ます。スクリプトは、前回の測定日に2か月を足した日と比べています。4月20日の次の測定は6月20日までに必要で、実際が6月22日なら超過です。
不適合の行が出たら、まず記録の側を疑います。単位の取り違え(ミリグラムとマイクログラム)、列のずれ、小数点の位置は、現場の帳票を表に写す段階で入りがちです。元の帳票と1行ずつ見比べて、写し間違いが無いと分かってから、設備や運用の原因に進みます。
温度と外気温の差は、並べて見るだけにする
冷房時に室温と外気温の差が大きいときは、先ほどの条件の出番です。外気温の列を足したCSVを渡し、「室温が外気より低い行について、差を一覧にする」とだけ頼みます。差が何度なら著しいかは条文にないので、並べた一覧を見て人が判断します。
測定の抜けは、帳簿の側から見る
不適合の行は、記録があるから見つかります。抜けは逆に、記録が無いから見つかりません。スクリプトの確認は、次の4種類です。
- 記録が1行も無い階: 測定計画の階の一覧と突き合わせる
- 設備ごとに必要な項目の空欄: 空調の階で湿度が空欄、など
- 2か月を超えた間隔: 階ごとに前回の測定日から数える。最後の測定から今日までも含める
- 建築等のあとのホルムアルデヒド: 完了日以後に来る最初の6月1日から9月30日の間に、測定値が1件あるか
ホルムアルデヒドは、日常の定期測定の対象ではありません。建築・大規模の修繕・大規模の模様替をした階だけ、使用開始の日以後に最初に来る6〜9月の期間に1回測ります。スクリプトは、完了日を使用開始日として扱っています。使用開始が完了日とずれる施設は、COMPLETEDの日付を使用開始日に差し替えてください。
初回の測定が始まる前の抜けは、スクリプトでは見えません。記録の最初の日付より前に、本来測るべき期間があったかどうかは、建物の使用開始日が分かる台帳から確かめます。
点検結果を、帳簿として残す
空気環境の調整の状況と、測定の結果を含めて記載した帳簿書類は、特定建築物の所有者などが備えておく書類です。この帳簿書類は、5年間保存しなければなりません。
Claudeの点検結果は、この帳簿書類そのものではありません。使い道は、次の月次の見直しです。スクリプトと出力を、測定CSVの隣に日付つきで置いておくと、「いつ、どの基準で洗ったか」を後から説明できます。
Claudeを使うときの注意が1つあります。基準値の表は、スクリプトの冒頭に書いた数字が唯一の根拠になります。条文が改正されたときに、スクリプトの数字を替え忘れると、古い基準で洗い続けます。基準値のブロックには、施行令第二条の条文番号を書き添えておくと、見直しのときに照合する先が分かります。
月次の点検で記録を洗う型は、他の業務にも広がります。Excelの一覧表から期限の抜けを数える流れは、介護の年間研修計画と法定研修の記録の点検と同じ形です。評価の間隔を数える点では、褥瘡マネジメント加算の評価記録の点検とも共通します。記録の信頼性そのものを問う場面では、製造記録のデータインテグリティの点検の観点が使えます。