Developers Summit2015にて「法律をコードで書き換えて複雑度を検証してみる」という面白い試みが報告されたようです。

コードを書く経営者ドワンゴ川上会長「プログラミングこそが基礎教養」 | Biz/Zine

記事によれば、循環的複雑度を用いて商法と著作権法の複雑性を検証してみると著作権法の特定の条文の複雑度は103となり、「メンテナンス不可能」域に達しているとのこと。

ソフトウェアと同じような形で、法律に対して循環的複雑度を計算できるかどうかを検討させたんですね。テーマにしたのは著作権法と商法の特定の条文。法律を手続き型言語とみなして構造化し、それをJavaScriptのような形式に直し、それを書き出して計算しました。...

これ〔注:著作権法47条の10のこと〕、構造化するとわかるんですけど、実はこの中にコピペされている部分がある。(会場笑) JavaScriptの形式に直してコンパイルしたら、複雑度の合計が103になりました。通常70以上はメンテ不可能という先ほどの循環的複雑度からいえば、この法律は、いかなる変更をしてもバグを生むということが判明したわけです。

循環的複雑度というのはプログラムの複雑性に関する指標ですが、これはバグ混入との相関関係があるとされます。つまり、循環的複雑度が高い場合には、そのプログラムにはバグが混入している可能性が高いということです。循環的複雑度というのは(大雑把に言えば)プログラムの経路の数から算出される数値で、経路が多ければ多いほど検証しなければならないケース数が多くなります。そこで漏れが生じる可能性が高まることがバグ混入率へとつながっているわけです。

さて、上に紹介しましたとおり、川上会長の報告によれば、著作権法のとある条文(47条の10)の循環的複雑度は103と算出されたそうです。

(複製権の制限により作成された複製物の譲渡)
第四十七条の十  第三十一条第一項(第一号に係る部分に限る。以下この条において同じ。)若しくは第三項後段、第三十二条、第三十三条第一項(同条第四項において準用する場合を含む。)、第三十三条の二第一項若しくは第四項、第三十四条第一項、第三十五条第一項、第三十六条第一項、第三十七条、第三十七条の二(第二号を除く。以下この条において同じ。)、第三十九条第一項、第四十条第一項若しくは第二項、第四十一条から第四十二条の二まで、第四十二条の三第二項又は第四十六条から第四十七条の二までの規定により複製することができる著作物は、これらの規定の適用を受けて作成された複製物(第三十一条第一項若しくは第三項後段、第三十五条第一項、第三十六条第一項又は第四十二条の規定に係る場合にあつては、映画の著作物の複製物(映画の著作物において複製されている著作物にあつては、当該映画の著作物の複製物を含む。以下この条において同じ。)を除く。)の譲渡により公衆に提供することができる。ただし、第三十一条第一項若しくは第三項後段、第三十三条の二第一項若しくは第四項、第三十五条第一項、第三十七条第三項、第三十七条の二、第四十一条から第四十二条の二まで、第四十二条の三第二項又は第四十七条の二の規定の適用を受けて作成された著作物の複製物(第三十一条第一項若しくは第三項後段、第三十五条第一項又は第四十二条の規定に係る場合にあつては、映画の著作物の複製物を除く。)を、第三十一条第一項若しくは第三項後段、第三十三条の二第一項若しくは第四項、第三十五条第一項、第三十七条第三項、第三十七条の二、第四十一条から第四十二条の二まで、第四十二条の三第二項又は第四十七条の二に定める目的以外の目的のために公衆に譲渡する場合は、この限りでない。

循環的複雑度についての研究によれば複雑度が74以上の場合にはバグ混入率が98%になるとのことであり、当該条文にはバグが含まれている/今後同条文が改正された場合にバグが混入する確率が極めて高いということになります。
もちろん、プログラムにおける複雑度とバグ混入率の相関関係がそのまま法制執務に適用できるとは思えないことから、手放しで飛びつくのは流石にどうなのでしょうとは思います。というのも、法制執務の際の運用の仕方がプログラム作成の場合と同様かどうか定かではなく、また同様だったとしても人の育成に関してかけている時間や労力が異なるという点があるからです。法制局の業務は職人芸的に受け継がれているとの指摘もあり、それらの過程で複雑度にも関わらず間違いのない法律を作成できる能力が獲得される可能性もありえないではないでしょう。

とはいえ、これは国家による立法(しかも閣法の場合)に限られるでしょう。地方自治体の法制執務においては「例えば、昨年まで土木課に配属して外回りをしていた職員が今年はいきなり法務を扱う部署に移動させられて、条例作成に携わることもある」(角田篤泰「ソフトウェア工学との類似性に着目した立法支援方法(一)」名古屋大學法政論集235号47頁)わけです。
また、そもそも工学じたいがそのような個人の能力頼みの「工芸」的なものではなく一定の品質を保証してものを作り出す仕組みに関心を持っていると考えるならば、運用者の能力頼みでやっていくという回答じたい、本記事の問題提起とはそもそもズレているのではないかとも思えます。「工芸」的なものとしてではなく、工学の視点から見たらあまりうまくないんじゃねぇの?という問題提起として受け止める分には、まあそこそこ有用な指摘なんじゃないでしょうか。もちろん、その指摘が、そうだとしても(法学は工学とは異なる、あるいはソフトウェア工学とは異なる、という理由で)問題にならないという可能性は十分にあると思いますが。

以上の話は吉良先生に振っていただいたので現時点での思うところを述べたものです。


この記事を読む上で大事なのは、循環的複雑度によって検証できる「読みやすさ」というのがいわゆる「読者」(=法律家/市民)に向けられたものではないという点かなと思います。プログラマにとってプログラムはお客様に見せるものではなく、開発メンバーに見せるものでしょう。(GitHubなんかだと広くプログラマに公開していますが)その視点における読者というのをパラレルに持ってくると、法制執務を共にこなしているメンバーということになろうかと思います。(ここで言う「共に」というのは同時的にという意味ではないので、これは既にやめた人の書いたプログラム(法律)について修正する任を負う現職の人などを含みます。)

また、穂積陳重『法典論』の冒頭には次のような文があります。

法律に実質及び形体の二元素あり、一国の法律は果して国利を興し民福を進むべき条規を具うるや否やの問題は、これ法律の実質問題なり、一国の法令は、果して簡明正確なる法文を成し、人民をして容易く権利義務の在る所を知らしむるにた足るの問題は、是れ法律の形体問題なり、法律の実質は善良なるも、若しその形体にして完美ならざれば、疑義百出、争訟止まず、酷吏は常に法を曲げ、奸民はしばしば法網を免るるの弊を生ぜん、...ある人、実質美にして形体具わらざる法律を例えて、多病の才子となし、形体完備して実質善良ならざる法律を例えて、妖姿の毒婦となし、実質形体二つながら備わらざる法律を、不具の痴漢に比したり、蓋し実質は法律の精神なり、形体は法律の体躯なり、故に一国の法律をして金科玉条たらしめんとせば、実質形体共に備わらん事を立法者に求めざるべからざるなり。

――穂積陳重『法典論』

ここで指摘される通り、法律は市民にとって「権利義務の在るところを知」るための道具でもあるわけですから、市民にとってわかりやすい(可読性がある)という点も、ないがしろにすべきではないでしょう。(ちょうどこれを書いている時に手元にないためページ数の指摘ができませんが、林修三『法令作成の常識』にも同旨の記述がありました)

最終的には法律家が訴訟において用いることが多いのだから、法律家が読んで混乱が生じないように書くことが大事、との吉良先生の指摘はまったくその通りだとは思います。ただ、法律を「読む」人というのはさまざまに考えられるわけで、誰にとっての読みやすさをどの程度重視する必要があるのか、という問いに回答することなしにこの問題を議論するのは難しいでしょう。(こちらは以前、じぶんが同様の内容の研究をとある先生に提案した際に指摘された点でもあります)

参考