法律の改正はプログラミング言語のような難解な条文なのでプログラミング言語で書いてみた

法律の条文のミスが度々起こっており，2021年の4月には

> ミスを防ぐ抜本的な対策として改正法案では「プログラミング言語のような」難解な条文をやめ
>（[東京新聞 相次ぐ法案ミス問題、再発防止に「作成文書の絞り込みを」　元厚労官僚が指摘](https://www.tokyo-np.co.jp/article/95642)）

という記事が出ていた。

法律の改正は，法律を改正する法律を制定することによって行われる。その法律は，全部改正を除いては，次のように書かれる。

> ○○法の一部を次のように改正する。
> 第○条の「○○○」を「×××」に改める

これをプログラミング言語でなるべく忠実に再現したい。

今回は，2018年7月に改正された「公職選挙法」を取り上げる。この改正には条文に間違いがあったのだが，そのまま放置され，2021年の5月になって改正された。

先述の通り，法律の改正は「改正後の法律案」なるものを作るのではなく，変えたい部分だけを羅列する方式なので，最初に制定された法律から順を追っていかないと最新の法律の条文は分からない。そこでまず，昭和26年に制定された最初の「公職選挙法」を定義する。

```プロデル
昭和二十五年法律第百号とは
	第一条を持つ。
	第二条を持つ。
	第三条を持つ。
	第四条第一項を持つ。
	第四条第二項を持つ。
	第四条第三項を持つ。
	第四条第四項を持つ。
	（略）
	はじめの手順
		第一条は，「この法律は、日本国憲法 の精神に則り、衆議院議員、参議院議員、地方公共団体の議会の議員及び長並びに教育委員会の委員を公選する選挙制度を確立し、その選挙が選挙人の自由に表明せる意思によつ て公明且つ適正に行われることを確保し、もつて民主政治の健全な発達を期することを目的とする。」
		第二条は，「この法律は、衆議院議 員、参議院議員、地方公共団体の議会の議員及び長並びに教育委員会の委員（地方公共団体の議会において選挙する委員を除く。以下同じ。）の選挙について、適用する。」
		第三条は，「この法律において［「］公職［」］とは、衆議院議員、参議院議員、地方公共団体の議会の議員及び長並びに教育委員会の委員の職をいう。」
		第四条第一項は，「衆議院議員の定数は、四 百六十六人とする。」
		第四条第二項は，「参議院議員の定数は二百五十 人とし、そのうち、百人を全国選出議員、百五十人を地方選出議員とする。」
		第四条第三項は，「地方公共団体の議会の議員の 定数は、地方自治法（昭和二十二年法律第六十七号）の定めるところによる。」
		第四条第四項は，「教育委員会の委員の定数は、 教育委員会法（昭和二十三年法律第百七十号）の定めるところによる。」
		（略）
	終わり
終わり
```

同じ法律名が山ほど出てくる（例：「公職選挙法の一部を改正する法律」は何十個もある）ので，昭和二十五年法律第百号といった表記にした。また，法律の条文には枝番号というのがあり，プロデルでは「の」の扱いに困るので，以下のようにした。

```プロデル
枝番号とは
	一を持つ。
	二を持つ。
	（略）
終わり
```

こうすることで，

```プロデル
第百四十一条は，枝番号を作ったもの。
第百四十一条の三は，「何人も、第百四十一条の規定により選挙運動のために使用される自動車の上においては、選挙運動をすることができない。ただし、停止した自動車の上において選挙運動のための演説をすること及び第百四十条の二第一項ただし書の規定により自動車の上において選挙運動のための連呼行為をすることは、この限りでない。」
```
といった表記が可能になる。

続いて，公職選挙法の最初の改正である昭和二十六年法律第二号を定義するが，この時に先の公職選挙法を継承することで，改正する部分だけを記述することができる。

```プロデル
昭和二十六年法律第二号とは
昭和二十五年法律第百号を継承する。
	はじめの手順
		第三十三条第四項は，「地方公共団体の議会の議員の任期満了に因る一般選挙の期日の告示がなされた後その任期の満了すべき日前に当該地方公共団体の議会の議員がすべてなくなつたとき、又は地方公共団体の長の任期満了に因る選挙の期日の告示がなされた後その任期の満了すべき日前に当該地方公共団体の長が欠け、若しくは退職を申し出たときは、更にこれらの事由に因る選挙の告示は、行わない。但し、任期満了に困る選挙の期日前に当該地方公共団体の議会が解散されたとき、又は長が解職され、若しくは不信任の議決に困りその職を失つたときは、任期満了に因る選挙の告示は、その効力を失う。」
		（略）
	終わり
終わり
```

この調子で順番に改正していき，問題となった平成三十年法律第七十五号がやってきた。

[この法律](https://www.shugiin.go.jp/internet/itdb_housei.nsf/html/housei/19620180725075.htm)はこんな風になっている。

> 第百四十二条の四第一項第三号中「参議院名簿登載者」の下に「（第八十六条の三第一項後段の規定により優先的に当選人となるべき候補者としてその氏名及び当選人となるべき順位が参議院名簿に記載されている者を除く。）」を加え、同条第六項を同条第七項とし、同条第五項を同条第六項とし、同条第四項を同条第五項とし、同条第三項の次に次の一項を加える。
> 
> ４　参議院（比例代表選出）議員の選挙において、公職の候補者たる参議院名簿登載者（第八十六条の三第一項後段の規定により優先的に当選人となるべき候補者としてその氏名及び当選人となるべき順位が参議院名簿に記載されている者に限る。）が、電子メールを利用する方法により選挙運動のために行う文書図画の頒布は、第一項の規定により当該参議院名簿登載者に係る参議院名簿届出政党等が行う文書図画の頒布とみなす。この場合における第二項の規定の適用については、同項中「送信をする者（その送信をしようとする者」とあるのは、「送信をする参議院名簿登載者（その送信をしようとする参議院名簿登載者」とする。

まず，「参議院名簿登載者」の下に文言を追加する改正がある。法律は縦書きなので「下」となっているが，横書きでは右に見ていけば良い。これはreplaceを使えば良い。

```プロデル
第百四十二条の四第一項第三号は，第百四十二条の四第一項第三号から「参議院名簿登載者」を
「参議院名簿登載者（第八十六条の三第一項後段の規定により優先的に当選人となるべき候補者
としてその氏名及び当選人となるべき順位が参議院名簿に記載されている者を除く。）」へ置き
換えたもの。
```

次に，各項をずらしていく。

```プロデル
第百四十二条の四第七項は，第百四十二条の四第六項
第百四十二条の四第六項は，第百四十二条の四第五項
第百四十二条の四第五項は，第百四十二条の四第四項
```

最後に，第四項を追加する。

```プロデル
第百四十二条の四第四項は，「参議院（比例代表選出）議員の選挙において、公職の候補者たる参議院名簿登載者（第八十六条の三第一項後段の規定により優先的に当選人となるべき候補者としてその氏名及び当選人となるべき順位が参議院名簿に記載されている者に限る。）が、電子メールを利用する方法により選挙運動のために行う文書図画の頒布は、第一項の規定により当該参議院名簿登載者に係る参議院名簿届出政党等が行う文書図画の頒布とみなす。この場合における第二項の規定の適用については、同項中［「］送信をする者（その送信をしようとする者［」］とあるのは、［「］送信をする参議院名簿登載者（その送信をしようとする参議院名簿登載者［」］とする。」
```

この結果，第142条の4第6項が第7項に繰り下がったのだが，第244条第1項2の2の「第百四十二条の四第六項の規定に違反して同項に規定する事項を表示しなかつた者」をそのままにしてしまったため，選挙運動用のメールに選挙運動用であると書かなかった場合に罰則がなくなってしまっていたのである。

書いたプログラムを実行してみると

```プロデル
現行法令は，平成三十年法律第七十五号を作ったもの。
```

エラーは起きなかった。ここでエラーが出るようにできれば，同じ難解さでもプログラミング言語の方が便利と言えるのだけれど。。。（それは上手く設計すれば良いのでは・・・）