e-Gov法令APIとClaude Codeで条文を辿る — 建築基準法から施行令・規則まで
建築基準法20条を例に、法の条文が政令・省令へ渡る場所をe-Gov法令APIの本文から逆引きし、条番号つきの根拠表にする手順です。取りこぼす参照の型も載せています。
建築基準法の条文を根拠付きで確認したいときは、Claude Codeに条文を思い出させず、e-Gov法令APIで取得した本文だけを材料にさせます。法の条文は「政令で定める」「国土交通省令で定める」と書いて細目を施行令や施行規則へ渡すので、法だけ読んでも根拠は閉じません。
この記事は、法20条(構造耐力)を例に、法の条文からどの施行令・規則の条に渡っているかをAPIの本文から逆引きし、条番号つきの根拠表にするまでを扱います。APIの基本はe-Gov法令APIでClaudeに条文を正確に引用させる手順にあるので、ここでは建築基準法の三層構造に絞ります。
法20条は「政令で定める」で施行令へ渡る
法20条1項は、建築物の区分を4つの号に分け、号ごとに基準を定めます。第1号は高さ60メートル超の建築物です。この号の本文に「安全上必要な構造方法に関して政令で定める技術的基準」とあり、細目は施行令に任されています。
取得した本文の一部を、そのまま示します。
一 高さが六十メートルを超える建築物 当該建築物の安全上必要な構造方法に関して政令で定める技術的基準に適合するものであること。(法20条1項1号)
読み手が知りたいのは「政令で定める」の先、つまり施行令のどの条かです。施行令側を見ると、36条は「法20条1項1号の政令で定める技術的基準」と書き出し、81条は「法20条1項1号の政令で定める基準は、次のとおりとする」と書き出しています。36条の2は第2号の「政令で定める建築物」を受けます。法の側から施行令の側へ向かう矢印は、法の文中にあるのではなく、施行令の側の「法20条1項…」という書き出しにあります。
参照の矢印は施行令側に書かれている
建築基準法(法)
要件と枠組みを定める。法20条1項は、細目を「政令で定める」と書くだけで施行令の条番号は書かない。
施行令(令)
「法20条1項1号の」と書き出し、法のどこを受けるかを自分で名乗る。
施行規則(規則)
申請書の様式や添付図書など手続きの細目。ここでも「法第…」と、受ける条を名乗る。
したがって根拠を辿る向きは、法から令へ進むのではなく、令と規則の全条文から「法20条1項」を名乗る条を拾う逆引きになります。
三つの法令IDを先に固定する
逆引きの前に、3つの法令を取り違えないようIDを確定します。法令一覧取得APIにlaw_titleを渡して引きました。
| 法令 | 法令ID | 取得した履歴ID |
|---|---|---|
| 建築基準法 | 法令ID325AC0000000201 | 取得した履歴ID325AC0000000201_20260527_508AC0000000023 |
| 施行令 | 法令ID325CO0000000338 | 取得した履歴ID325CO0000000338_20251201_507CO0000000377 |
| 施行規則 | 法令ID325M50004000040 | 取得した履歴ID325M50004000040_20260401_508M60000800022 |
履歴IDは、改正のたびに変わります。表の値は取得した日のもので、読者が実行すると別の履歴IDが返ることがあります。根拠表に履歴IDを必ず書かせるのはこのためです。
curl -s --get "https://laws.e-gov.go.jp/api/2/laws" \
--data-urlencode "law_title=建築基準法施行令" \
--data-urlencode "limit=10" \
| jq -r '.laws[] | [.law_info.law_id,
.revision_info.law_title,
.revision_info.current_revision_status] | @tsv'「施行令」で引くと1件だけが返ります。「建築基準法」で引くと5件が返るので、法令名の部分一致だけで最初の1件を採用すると別の法令を掴むおそれがあります。IDを決めたら、CLAUDE.mdに3つのIDを書いて固定します。
施行令を全条走査して「法20条1項」を名乗る条を拾う
キーワード検索API(/keyword)でも「法20条1項」を引けます。ただし返るのは文の断片と位置の種別(mainprovisionなど)で、条番号は含まれません。施行令だけに絞って検索するとtotal_countは22でしたが、これは文単位の件数です。条番号の根拠表には使えないので、法令本文を取得して条ごとに走査します。
本文取得APIは、json_format=lightで施行令の全文を返します。取得したサイズは約1.3MBでした。次のスクリプトは、本則の全条を走査し、検索したい文字列を含む条の番号・見出し・前後の文を出力します。
# backrefs.py — 使い方: python3 -I backrefs.py <法令ID> <正規表現>
import json, re, sys, urllib.parse, urllib.request
BASE = "https://laws.e-gov.go.jp/api/2/law_data/"
def flat(n):
if isinstance(n, str):
return n
if isinstance(n, list):
return "".join(flat(c) for c in n)
if isinstance(n, dict):
return "".join(flat(v) for v in n.values())
return ""
def articles(n, out):
if isinstance(n, list):
for c in n:
articles(c, out)
elif isinstance(n, dict):
if "ArticleTitle" in n:
out.append(n)
for v in n.values():
articles(v, out)
return out
law_id, pattern = sys.argv[1], re.compile(sys.argv[2])
url = BASE + law_id + "?" + urllib.parse.urlencode(
{"json_format": "light"})
with urllib.request.urlopen(url, timeout=60) as r:
data = json.load(r)
print("# " + data["revision_info"]["law_revision_id"])
body = data["law_full_text"]["Law"]["LawBody"]["MainProvision"]
for a in articles(body, []):
text = flat(a)
m = pattern.search(text)
if m:
s = text[max(0, m.start() - 15): m.end() + 25]
print(flat(a["ArticleTitle"]),
flat(a.get("ArticleCaption", "")), "|", s)実行は、施行令のIDと「法第二十条の次に第一項が続く」正規表現を渡すだけです。
python3 -I backrefs.py 325CO0000000338 \
'法第二十条(の[一二三四五六七八九十]+)?第一項'施行令では15の条が該当しました。出力の条番号と見出しを抜粋します。
| 施行令の条 | 見出し |
|---|---|
| 第八条の四 | 見出し受検資格 |
| 第九条の二 / 第九条の三 | 見出し特定増改築の構造計算基準など |
| 第三十六条 | 見出し構造方法に関する技術的基準 |
| 第三十六条の二 | 見出し地階を除く階数が四以上である鉄骨造の建築物等に準ずる建築物 |
| 第八十一条 | 見出し(取得データでは見出しが空) |
| 第百二十九条の二の三 | 見出し(同上) |
| 第百三十七条の二 / 第百三十七条の十四 | 見出し構造耐力関係 / 独立部分 |
| 第百三十九条から第百四十四条 | 見出し煙突、鉄筋コンクリート造の柱等、広告塔、擁壁、乗用エレベーター等、遊戯施設 |
この15条を「どれも法20条1項の細目」と読むのは早計です。第8条の4は、審査業務の範囲を述べる文の括弧内で法20条1項に触れているだけで、基準を定める条ではありません。第139条から第144条は、法20条を「読み替えて準用する」条です。逆引きは候補を出す道具で、条ごとの役割はClaude Codeに本文を読ませて仕分けさせます。
仕分けの結果は、たとえば次の形になります(施行令の本文から読み取れる範囲です)。
- 第36条・第36条の2・第81条・第129条の2の3: 「法20条1項…の政令で定める」で始まり、基準や対象建築物を直接定める条
- 第139条から第144条: 「読み替えて準用する法20条1項の政令で定める技術的基準」と書き、工作物や昇降機に法20条を準用する条
- 第8条の4: 審査業務の範囲を述べる文の括弧内で触れるだけの条
この仕分けを根拠表の最後の列に書かせると、読み手は「基準の本体」と「準用」と「ただ触れているだけ」を条ごとに見分けられます。
規則にも同じスクリプトを向ける
施行規則に同じスクリプトを向けるには、IDだけを差し替えます。
python3 -I backrefs.py 325M50004000040 '法第二十条'規則では、第1条の3(確認申請書の様式)、第2条、第3条の7、第3条の9、第3条の11、第8条の2、第11条の2の3(手数料の額)が該当しました。令は構造の基準そのものを受けます。規則側は、申請書や適合判定通知書の様式の定めに法20条1項2号イ・3号イのプログラムが出てくる、という手続きの側面から法20条に触れています。添付図書の側から規則を読む手順は、建築確認申請の添付図書を施行規則でClaudeに点検させる手順が扱っています。
逆引きが外す参照、余計に拾う参照
文字列の逆引きには、見落としと拾いすぎがあります。出力の読み方を押さえておきます。
落とし穴
「法第二十条」を法のIDに向けると、他法の第20条を拾う
法の本文に「第二十条」で検索すると、法20条自身のほか、第2条・第5条の6・第6条などで建築士法の第二十条の二への参照を拾います。法令名の付かない「第二十条」は、その法の中の条を指すとは限りません。
「法第」を付けるだけでは足りません。建築士法の第二十条の二への参照(「建築士」に続けて「法第二十条の二」と書かれます)にも「法第二十条」の文字列が含まれるため、正規表現「法第二十条」はこれも拾います。先頭の字が「士」でないことを条件にする否定後読み、たとえば (?<!士)法第二十条 を使うと、建築士法の参照を外せます。施行令・施行規則の実行例も「法第二十条」で始まる正規表現なので、他の法律名が前に付いた参照が混ざっていないか、出力の条文を目で見て確かめてください。
落とし穴
36条の3以降の条は逆引きに出ない
施行令36条は第1項で「この条から第三十六条の三まで、…」のように、条の範囲で技術的基準を示します。36条の2は逆引きに出ましたが、36条の3は法20条1項への言及を含まないため出ません。36条から枝を伸ばした先の条は、36条の本文を読ませ、そこに書かれた条の範囲を別途取得させる二段目の取得が要ります。
落とし穴
本則しか走査しない
スクリプトは本則(MainProvision)だけを見ます。附則に書かれた経過措置や、別表は対象外です。経過措置が必要な事案では、SupplProvisionも走査する形に広げるか、改正の経緯を追う別の手順が要ります。施行日や改正前後の本文は、e-Gov法令APIとClaude Codeで法改正の施行日と条文差分を毎週追うの手順で取ります。
条の番号は、取得でも罠になります。枝番の条はArticle_36_2のようにアンダースコアでつなぎます。存在しない条番号(例:Article_999)をelmに渡すとHTTP 400で、コード400021、メッセージは「要素(elm)に合致する要素が法令本文に存在しません。」と返りました。Claudeが条番号を間違えると失敗が表に出るので、黙って別の条を引くことはありません。
条文取得に基づいて根拠表を作らせる
逆引きの出力を材料に、Claude Codeには条文の取得と根拠表の整形を任せます。CLAUDE.mdには次のように書きます。
## 建築基準法の根拠確認ルール
- 条文は記憶から書かない。必ず scripts/ 配下のスクリプトでe-Gov法令APIから取得する
- 法令IDは固定: 法=325AC0000000201 / 令=325CO0000000338 / 規則=325M50004000040
- 法の条を調べるときは、令と規則に対して backrefs.py で逆引きし、候補の条を全て取得する
- 根拠表の列は「法令名・条項・履歴ID・引用(原文のまま)・法の何条を受けているか」
- 逆引きに出ない参照(条の範囲指定、準用)があり得ることを明記し、見落としの可能性を表の末尾に書く
- 取得に失敗した条は、推測で埋めず「未取得」と書く依頼文は、調べたい条と、結論を書かせない旨を一緒に伝えます。
法20条1項の細目を令と規則で洗い出してください。
backrefs.py の出力から候補を拾い、各条の本文を取得して、
「基準を定める条」「準用する条」「手続きだけ触れる条」に仕分けてください。
結論や適合判断は書かず、根拠表だけを返してください。スクリプトを許可リストに入れる書き方は、権限の設定と同じで、Bash(python3 -I backrefs.py *)のようにスクリプト単位で許可します。URLがスクリプトの中に閉じるので、許可ルールは「このスクリプトを呼んでよい」の一点になります。
返ってきた表は、引用部分を原文と照合してから使います。法令の引用は一字違いでも別の条文になるため、照合の手順は先に挙げた取得手順の記事にある方法がそのまま使えます。
根拠表は適合判断の代わりにならない
根拠表が示すのは、法のこの条がどの施行令・規則の条に関係するか、という文面上の対応です。実際の建築計画が適合するかは、告示や通達、運用の実務を含めて、建築士や確認検査機関が判断します。AIの下調べは根拠探しを速くするものとして使い、記名や責任の所在は変わりません。この点は、建築士がClaudeでAIレビューしても記名の責任は消えない理由で整理されています。
まとめ
建築基準法の根拠を辿る作業は、法から令へ進むのではなく、令と規則の本文から「法20条1項」を名乗る条を拾う逆引きです。API取得した本文を条ごとに走査すれば、条番号と履歴IDの付いた根拠表になります。逆引きは条の範囲指定や準用を取りこぼすので、出力は候補として読み、仕分けはClaude Codeに本文を読ませて行います。