法律をコードで書き換えて複雑度を検証
川上氏はこの後、コードについて語り、以前のデブサミでのドワンゴの吉村総一郎氏の発表を紹介した。 この発表はニコニコ動画をScalaで全面的に書き換えることについてのもの。当初、ニコニコ動画は膨大な「コードの技術的負債」を背負っていた。「潜在的不具合数が4500ヶ所、循環的複雑度が600超」という状態だった。この循環的複雑度というのは、ソースコードの複雑性を示す測定法で、高ければ高いほど作り直したときのバグの発生率も高まる。通常、70以上もあればメンテナンス不可能。ニコ生の複雑度は600以上もあったので、全面的に書き直した。この発表はネットでも話題になり、川上氏も面白いと感じた。そこで吉村氏にこの方法を応用したレポートを作らせた。このレポートが「法律の循環的複雑度」だという。
ソフトウェアと同じような形で、法律に対して循環的複雑度を計算できるかどうかを検討させたんですね。テーマにしたのは著作権法と商法の特定の条文。法律を手続き型言語とみなして構造化し、それをJavaScriptのような形式に直し、それを書き出して計算しました。これが商法16条の原文です。
(読み上げ) すごい読みにくいですね。そしてこれが、JavaScriptに直したもの。意外にプログラム言語としてきれいに収まっていますね。
この法律はプログラムとすると、けっこうメンテしやすいものに属するということがわかりました。(会場笑) 次に著作権法の47条の10の原文がこれです。
見た瞬間に読む気をなくしますね。これは人間ではなく機械に読ませないと解釈できない。これを構造化するとこういう風になります。
これ、構造化するとわかるんですけど、実はこの中にコピペされている部分がある。(会場笑) JavaScriptの形式に直してコンパイルしたら、複雑度の合計が103になりました。通常70以上はメンテ不可能という先ほどの循環的複雑度からいえば、この法律は、いかなる変更をしてもバグを生むということが判明したわけです。
この研究はもっと追求しようと思いましたが、ドワンゴの業務には一切関係ないんでやめました(笑)。僕がCTOとしてやった唯一の仕事が、これだったんです(笑)。