e-Gov法令API v1からv2への移行ガイド:エンドポイント対応表と労基法での応答比較
e-Gov法令API v1(lawlists・lawdata・articles・updatelawlists)からv2への移行を、エンドポイント対応表とパラメータの読み替えで整理。労働基準法を両方で取得してXMLとJSONの差を比べ、v1提供終了の公式告知の有無も2026年9月14日に確認しました。
e-Gov法令API v1からv2へ移るときは、lawlists を laws、lawdata を law_data、articles を law_data の elm 指定へ置き換えるのが基本線です。 v1の updatelawlists(更新法令一覧)だけは、日付を1つ渡す同じ形のエンドポイントがv2にありません。応答はXMLからJSONが既定になり、成否の判定も Result/Code からHTTPステータスと code に変わります。
2026年9月14日時点で、v1の提供終了や非推奨化の公式告知は確認できませんでした。 2025年3月のv2リリースのお知らせにも「法令API Version1も当面の間ご利用可能です」とあります。移行を急ぐかどうかは、v1が止まるかではなく、時点指定・改正履歴・全文検索といったv1にない機能が要るかで決まります。
この記事では、v1とv2の両方で労働基準法(法令ID 322AC0000000049)を取得し、応答の違いを実測で並べます。v2の6本の全体像はエンドポイント逆引きリファレンスにまとめています。
- v1の4本は、v2の
lawsとlaw_dataでほぼ置き換えられます。 条・項の指定はelm=MainProvision-Article_32-Paragraph_2のような要素パスになります。 - 一覧の件数は揃いました。 v1の憲法・法律一覧(
lawlists/2)と、v2のlaw_type=Constitution,Act&repeal_status=Noneはどちらも2,104件でした。 - 応答の読み方が変わります。 v1は
DataRoot内のResult/Codeで成否を返し、v2はHTTPステータスとcodeで返します。日付も19470407形式から1947-04-07形式になります。 - v1の提供終了は告知されていません。 移行の判断材料は、asof・改正履歴・キーワード検索が必要かどうかです。
v1の提供終了は告知されているか
確認したのは、e-Gov法令検索のお知らせ一覧、法令API Version1の案内ページ、v1の概要ページ、v1仕様書1.4版、v2のOpenAPI定義の冒頭説明です。どこにもv1の提供終了日や非推奨化の記載はありませんでした。v2のOpenAPI定義も、v2をv1の改良版と位置づける説明にとどまります。
- 2017-06-26v1仕様書 1.0版仕様書の変更履歴に載っている最初の版
- 2024-07-29e-Gov法令検索リニューアルv1仕様書1.4版。リクエストURIのホスト名を elaws.e-gov.go.jp から laws.e-gov.go.jp に変更
- 2025-03v2リリースお知らせPDFの本文ではリリース日を3月14日、お知らせ一覧の掲載日は3月19日。v1も当面利用できると明記
- 2026-09-14本記事の確認日お知らせ一覧の掲載は上記リニューアルとv2リリースの2件のみ。v1の4本はいずれもHTTP 200で応答
e-Gov法令検索の利用規約は、サイトの全部または一部を休廃止するときは原則90日前までに公表または通知すると定めています。v1を使い続ける場合も、お知らせ一覧を定期的に確認しておけば、止まる前に気づける可能性が高いと考えられます。
エンドポイント対応表
v1は4本、v2は6本です。v1の articles はURLのパスに ; 区切りでパラメータを埋め込む形でしたが、v2はすべて通常のクエリ文字列です。
| v1 | v2 | 読み替えの要点 |
|---|---|---|
GET /api/1/lawlists/{法令種別} | GET /api/2/laws | 種別コード1〜4を law_type に。現行だけなら repeal_status=None |
GET /api/1/lawdata/{法令番号又は法令ID} | GET /api/2/law_data/{法令ID・法令番号・履歴ID} | パスを差し替えるだけで取れる。履歴IDと asof が増える |
GET /api/1/articles;lawId=…;article=…;paragraph=…;appdxTable=… | GET /api/2/law_data/{法令ID}?elm=… | 条・項・別表を要素パスで書く |
GET /api/1/updatelawlists/{yyyyMMdd} | 直接の後継なし | 法令ごとなら law_revisions の updated_from、まとめてなら一括ダウンロード |
| (なし) | law_revisions keyword law_file attachment | 改正履歴、本文の全文検索、ファイル取得、添付ファイル |
lawlists の種別コードは law_type に読み替えます。v1の一覧は「公布済み現行法令」(仕様書)なので、v2では repeal_status=None を足すと件数が近づきます。
| v1 法令種別 | v2 law_type | 件数の照合(2026-09-14) |
|---|---|---|
| 1 全法令 | 指定なし | v1 9,012件 / v2 repeal_status=None 9,011件(差1件の理由は未確認) |
| 2 憲法・法律 | Constitution,Act | どちらも2,104件 |
| 3 政令・勅令 | CabinetOrder,ImperialOrder | 未照合 |
| 4 府省令・規則 | MinisterialOrdinance,Rule | 未照合 |
v1の lawlists/1 は1回で全件が返り、2,794,325バイトありました。v2の laws は limit の既定値が100で、next_offset を追ってページングします。全法令を毎回集める用途なら、APIを繰り返し呼ぶより公式のXML一括ダウンロードが向いています。laws の絞り込みとページングの詳細はlawsで法令一覧を絞り込む記事に分けました。
パラメータの読み替え
条・項・別表は elm で書く
同じ労働基準法第32条第2項を、v1とv2で取得しました。
# v1curl -s "https://laws.e-gov.go.jp/api/1/articles;lawId=322AC0000000049;article=32;paragraph=2"
# v2curl -s "https://laws.e-gov.go.jp/api/2/law_data/322AC0000000049?elm=MainProvision-Article_32-Paragraph_2&json_format=light"どちらも「使用者は、一週間の各日については、労働者に、休憩時間を除き一日について八時間を超えて、労働させてはならない。」の1文が返りました。v1は687バイトのXML、v2は法令のメタ情報を含む1,335バイトのJSONです。
| 取りたいもの | v1 | v2 の elm | 確認 |
|---|---|---|---|
| 第32条 | article=32(article=第三十二条 も可) | MainProvision-Article_32 | 実行。3通りとも200 |
| 第32条第2項 | article=32;paragraph=2 | MainProvision-Article_32-Paragraph_2 | 実行。同じ文が返った |
| 第三十二条の二 | article=第三十二条の二 | MainProvision-Article_32_2 | 実行。条見出しはどちらも「第三十二条の二」 |
| 条のない法令の項 | paragraph=1(仕様書の設定パターン) | MainProvision-Paragraph_1(OpenAPIの例) | 未実行 |
| 別表 | appdxTable=別表名(前方一致) | AppdxTable[1](位置で指定) | 未実行 |
別表の指定は考え方が変わります。v1は別表名の前方一致で、候補が複数あると300 Multiple Choicesと候補リストが返る仕様でした。v2は AppdxTable[1] のように位置で指定し、角括弧は %5B1%5D にエンコードしないと400になります(逆引きリファレンスの実測)。
日付・法令番号・種別の書き方
- 日付:v1は
yyyyMMdd(一覧のPromulgationDateが19461103、updatelawlists/20260901)。v2はYYYY-MM-DD(promulgation_date、asof)です。 - 法令番号:v1は文字列だけでした。v2は
law_numに加えてlaw_num_era(Showaなど)、law_num_year、law_num_type、law_num_numに分けた値も返し、同じ名前で検索にも使えます。 - 法令種別:v1は一覧取得の数字コード1〜4だけでした。v2は
ActCabinetOrderなど7種類の英字を、law_typeにカンマ区切りで複数指定します。
労働基準法で応答を比べる
全文を両方で取得しました。
curl -s -o v1.xml "https://laws.e-gov.go.jp/api/1/lawdata/322AC0000000049"curl -s -o v2.json "https://laws.e-gov.go.jp/api/2/law_data/322AC0000000049"v1は DataRoot の下に処理結果の Result と本体の ApplData が並ぶXMLです(先頭を抜粋)。
<?xml version="1.0" encoding="UTF-8"?><DataRoot> <Result> <Code>0</Code> <Message/> </Result> <ApplData> <LawId>322AC0000000049</LawId> <LawNum/> <LawFullText> <Law Lang="ja" Era="Showa" Year="22" Num="049" PromulgateMonth="04" PromulgateDay="07" LawType="Act"> <LawNum>昭和二十二年法律第四十九号</LawNum> <LawBody> <LawTitle Kana="ろうどうきじゅんほう" Abbrev="労基法" AbbrevKana="ろ">労働基準法</LawTitle>v2のトップレベルは attached_files_info law_info revision_info law_full_text の4つでした。本文の law_full_text は、XMLの要素名を tag、属性を attr、子要素と文字列を children に入れた木構造です(抜粋して整形)。
law_info.law_id 322AC0000000049law_info.law_num 昭和二十二年法律第四十九号law_info.promulgation_date 1947-04-07revision_info.law_revision_id 322AC0000000049_20260717_508AC0000000060revision_info.law_title 労働基準法revision_info.abbrev 労基法
law_full_text:{"tag": "Law", "attr": {"Lang": "ja", "Era": "Showa", "Year": "22", "Num": "049", ...}, "children": [ {"tag": "LawNum", "attr": {}, "children": ["昭和二十二年法律第四十九号"]}, {"tag": "LawBody", "attr": {}, "children": [ {"tag": "LawTitle", "attr": {"Kana": "ろうどうきじゅんほう", "Abbrev": "労基法", "AbbrevKana": "ろ"}, "children": ["労働基準法"]}, ...要素名はv1のXMLと同じなので、v1で Article や Paragraph を名前でたどっていた処理は、tag で同じ木をたどる形に書き換えられます。json_format=light を付けると {"Article": {"ArticleTitle": …}} のような読みやすい形になります。ただしOpenAPI定義は、法令本文取得APIが返すJSON形式のデータを試行版で仕様変更がありうると注記しています。
v2でXMLのまま受け取る2つの方法
XMLのパーサーを残したい場合、v2には2つの道があります。
response_format=xml:ルート要素がlaw_data_responseになり、その下にlaw_inforevision_infolaw_full_textがXML要素で並びます。v1のDataRootやResult/Codeはありません。law_file/xml/{法令ID}:労働基準法で398,337バイト、Content-Typeはapplication/octet-streamでした。先頭は<?xml version="1.0" encoding="UTF-8" standalone="no"?>の直後にLaw要素が来るので、v1のLawFullTextの下のLawから読んでいた処理を流用しやすい形です。
外側の response_format と本文の law_full_text_format を食い違わせると本文がBase64になります。条件と見分け方はエラーコードと制限の記事にあります。
エラーと0件の返り方
存在しない法令ID(322AC9999999999)を両方に投げました。どちらもHTTP 404です。
<?xml version="1.0" encoding="UTF-8"?><DataRoot> <Result> <Code>1</Code> <Message>取得結果が0件でした。取得条件に誤りがないかご確認ください。</Message> </Result> <ApplData> <LawId>322AC9999999999</LawId> <LawNum/> <LawFullText/> </ApplData></DataRoot>{"code":"404004","message":"指定のパラメータで取得できる法令本文ファイルは存在しません。"}v1で Code だけを見て分岐していたコードは、v2ではHTTPステータスで分岐し、404のときに code を見て「0件」(404001)と「本文が無い」(404004)を分ける形に直します。
法令ID・法令番号の扱い
v1もv2も、本文取得のパスには法令IDと法令番号のどちらでも置けます。違いは応答側に出ます。
- v1は受け取った方しか返しません。 法令番号で
lawdataを呼ぶと応答のLawIdは空、法令IDで呼ぶとLawNumが空でした。応答から法令IDを読んでいた処理は、番号で呼んだときに壊れます。 - v2は
law_infoにまとめて返します。law_idlaw_numlaw_num_eralaw_num_yearlaw_num_typelaw_num_numpromulgation_dateが並びます。 - 法令名は
revision_infoに移りました。 改正で題名が変わることがあるためで、同じ法令IDでも版ごとにlaw_titleが変わります(asof指定の記事で改題前後を確認しています)。 - 版を固定するなら履歴ID。
322AC0000000049_20260717_508AC0000000060は「法令ID_施行日_改正法令ID」の形で、新規制定のままの版は末尾が000000000000000になります。
v1の仕様書には、法令番号が重複する法令は articles で法令番号を指定しても取得できず、法令IDで指定するよう書かれています。v2でも法令IDでの指定を基本にしておくのが安全です。
v1でできて、v2では書き方が変わる操作
- 一覧の一括取得:v1は1回で全件。v2は
limitとoffsetでページングします。 - 図の画像:v1は画像を
pictフォルダのZIPにしてBase64でImageDataに入れる仕様でした。v2はattachment/{履歴ID}で個別ファイルを取るか、law_dataにinclude_attached_file_content=trueを付けます。 - 更新法令一覧:v1の
updatelawlists/20260901は39件・38,161バイトのXMLで、法令ごとに改正法令名・施行日・LawUrlなどが返りました(先頭は道路交通法施行令、施行日20260901)。v2に同じ形はありません。法令ごとならlaw_revisionsのupdated_from/updated_to、まとめてならOpenAPI定義が案内する一括ダウンロードのfile_section=3&update_date=YYYYMMDD(取得範囲は過去3か月)が候補です。一括ダウンロードは本記事では試していません。 - MCPサーバー:
@codeagentjp/egov-law-mcp0.1.0は/api/1/系だけを呼んでいました(2026年7月27日時点、asof指定の記事)。通称で0件になる問題は通称と法令名のズレの記事で扱っています。
移行チェックリスト
- コード内の
/api/1/lawlists//api/1/lawdata//api/1/articles;/api/1/updatelawlists/を洗い出した - 旧ホスト
elaws.e-gov.go.jpを使っていないか確認した(v1仕様書1.4版でホスト名が変更されている) - 一覧取得を
laws?law_type=…&repeal_status=Noneに置き換え、next_offsetのキーが無くなるまでページングする -
articlesの条・項をelm=MainProvision-Article_N-Paragraph_Mに置き換え、枝番はArticle_N_Mにした - 日付の読み書きを
yyyyMMddからYYYY-MM-DDに直した - 成否判定を
Result/CodeからHTTPステータスとcode(404001 / 404004 / 400系)に直した - 応答の法令IDは
law_info.law_id、法令名はrevision_info.law_titleから読むようにした - 本文をJSONで受けるか、
response_format=xmlかlaw_file/xmlでXMLのまま受けるか決めた(JSONは試行版の注記あり) -
response_formatとlaw_full_text_formatを食い違わせていない(Base64になる) - 図は
attachmentに、更新法令一覧はlaw_revisionsか一括ダウンロードに置き換える方針を決めた - 取得結果に
law_revision_idを保存するようにした - 公開する成果物に出典を記載した(利用規約はコンテンツに公共データ利用規約 PDL1.0 を適用し、出典の記載と、編集・加工した場合はその旨の記載を求めている)
まとめ
- 2026年9月14日時点で、e-Gov法令API v1の提供終了・非推奨化の公式告知は確認できなかった。v2リリース時のお知らせはv1も当面利用可能としている
- v1の
lawlistsはlaws、lawdataはlaw_data、articlesはlaw_dataのelmに置き換える。updatelawlistsには直接の後継がない - 憲法・法律の一覧はv1とv2で2,104件が一致した。v2は
limit既定100のページング - 応答はXMLの
Result/Codeから、JSONとHTTPステータス・codeへ。日付形式と、法令名の位置(revision_info)も変わる - v2の本文JSONは試行版。XMLで受けたいなら
response_format=xmlかlaw_file/xml
パラメータを組み立てながらv2のURLを試すならe-Gov法令APIリクエストビルダー、Claude Codeから条文を引く運用全体はe-Gov法令API活用ガイドから辿れます。
この記事の情報・検証メモ
- egov
- japanese-law
- legal-tech
- mcp
- 公開日
- 情報確認
- 参考リンク
- 7件
- 更新性
- 定期更新
仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。
一次情報・参考リンク
- 法令API(Version 1)- 法令データ ドキュメンテーション(α版) https://laws.e-gov.go.jp/docs/law-data-basic/8529371-law-api-v1/
- e-Gov 法令API 仕様書(Version 1)1.4版(2024年7月29日) https://laws.e-gov.go.jp/file/houreiapi_shiyosyo.pdf
- 法令API Version1 | e-Gov 法令検索 https://laws.e-gov.go.jp/apitop/
- 法令API Version 2 OpenAPI定義(version 2.1.139) https://laws.e-gov.go.jp/api/2/swagger-ui/lawapi-v2.yaml
- お知らせ | e-Gov法令検索 https://laws.e-gov.go.jp/news/
- 法令API Version2 リリースのお知らせ(2025年3月 デジタル庁) https://laws.e-gov.go.jp/file/%E6%B3%95%E4%BB%A4API%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B32%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%AE%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B.pdf
- 利用規約 | e-Gov 法令検索 https://laws.e-gov.go.jp/terms/