Trawling

일본 법령 개정 이력을 Git 커밋으로 추적하는 houritsu

Zenn 이용자 kohei가 소개한 houritsu는 e-Gov 법령 데이터를 법령별 Markdown 파일로 만들고, 개정법의 시행에 따른 변경을 Git 커밋으로 기록합니다. `git log`와 diff로 법령의 개정 이력을 살펴볼 수 있지만, 수록 범위는 e-Gov가 제공하는 개정 데이터에 한정되며 정본은 관보입니다.

본문

법령 개정은 기존 법률에 직접 수정 내용을 써 넣기보다 별도의 개정법에 ‘제3조 중 A를 B로 바꾼다’처럼 변경 지시를 적는 방식으로 이뤄집니다. 지시문만으로는 개정 뒤 법령의 문구가 어떻게 달라졌는지 따라가기 어렵습니다. Zenn 계정 kohei는 2026년 11월 1일 공개한 글에서 일본 법령의 변경을 Git 이력으로 보여주는 프로젝트 houritsu를 소개했습니다.

houritsu는 e-Gov 법령 검색에 실린 법령 데이터를 법령별 Markdown 파일로 만들고, 개정에 따른 변경을 Git 커밋으로 기록합니다. Rust로 만든 변환 도구 houritsu-builder가 e-Gov 법령 API v2에서 자료를 가져오며, 매일 e-Gov의 차이를 받아 이력을 갱신합니다. 각 법령은 파일 하나에 담고, 파일 앞부분의 YAML 메타데이터에 법령명과 법령 번호 등을 기록합니다. 파일 이름에는 e-Gov의 법령 ID를 사용해 법령명이 바뀌어도 같은 파일에서 이력을 이어갑니다.

커밋 하나는 법령 파일 하나의 변경이 아니라, 개정법과 시행일에 따른 법령 변경을 묶습니다. 한 개정법이 여러 법령을 바꾸면 해당 파일들을 같은 커밋에 담습니다. 커밋 날짜는 시행일을 기준으로 하며, 메시지에는 개정법의 이름과 공포일·시행일, 변경된 법령을 적습니다. 국회에 제출된 법안 정보가 연결되는 경우에는 중의원 의안 페이지 링크도 붙입니다. 이 구성으로 어떤 개정법이 언제 시행돼 어느 법령을 바꿨는지 한 이력에서 살펴볼 수 있습니다.

이미 시행된 개정은 main 브랜치에 들어가고, 공포됐지만 아직 시행되지 않은 개정은 upcoming 브랜치에서 관리합니다. 이용자는 GitHub 화면에서 이력을 살펴보거나 저장소를 복제해 Git 명령어를 쓸 수 있습니다. 특정 법령 파일에 git log를 실행하면 그 파일을 바꾼 개정법의 목록이 나오고, 커밋의 diff는 개정 전후의 문구를 보여줍니다. git log -L을 이용하면 특정 조문의 변천만 추적할 수 있습니다.

kohei는 개인정보보호법을 사례로 들었습니다. 2026년 10월 1일 시행된 일본학술회의법 관련 커밋에서는 개인정보보호법 별표에 일본학술회의 관련 행이 추가된 것을 확인할 수 있습니다. 2026년 7월 17일 시행된 개정의 diff에는 같은 법의 재검토 규정에서 ‘시행 후 3년마다’라는 표현이 ‘시행 후 3년을 목표로’로 바뀐 내용이 나타납니다. 개인정보보호법 자체를 개정하는 법률뿐 아니라 다른 법률의 시행에 따라 바뀐 내용도 같은 파일의 로그에 기록됩니다.

이 이력은 e-Gov가 제공하는 개정 데이터에 기반하며, 수록 범위는 대체로 2015년 무렵부터입니다. 법률이 처음 만들어진 시점까지 모든 기록이 거슬러 올라가지는 않습니다. 데이터가 시작되기 전부터 존재한 문구는 가장 오래된 수록 시점의 커밋에 함께 들어갈 수 있어, git blame의 날짜는 해당 문구가 처음 성립한 날이 아니라 이력에서 확인 가능한 시점을 나타낼 수 있습니다.

Git은 1970년 이전 날짜를 커밋 날짜로 기록하지 못합니다. houritsu는 그보다 앞서 시행된 개정의 커밋 날짜를 1970년 1월 2일로 두고, 실제 시행일은 메타데이터에 남깁니다. 따라서 오래된 개정은 커밋 날짜만으로 실제 시행 순서를 읽을 수 없습니다.

houritsu-builder는 e-Gov 데이터를 Markdown으로 바꾸면서 조문 문자는 그대로 두고, Markdown용 제목 표시나 이스케이프, 그림 링크 등을 더합니다. 공식 법령 원문은 관보입니다. 저장소는 가공한 데이터에 CC BY 4.0, 변환 도구인 houritsu-builder에 MIT 라이선스를 적용합니다. README는 v1.0 전에는 이력을 다시 만들고 강제 푸시할 수 있다고 안내하므로, 현재 커밋 ID가 이후에도 유지된다고 볼 수는 없습니다.

자료: 窓の杜, Zenn, GitHub / 정리·해설: Trawling

참고 자료

오류 제보