契約書チェックとデバッグの相似性を元ITエンジニア弁護士が解説
いわゆる「会社の顧問弁護士」の業務の中心は、会社が日々クライアントや業務提携先などと締結する契約書のチェックや修正です。そしてこうしたチェックや修正は、どうしても、「法律と、その業務分野の双方に詳しい人間」でないと、十分に行うことができません。何故なのか、という点を解説します。
ただ、以下の解説は、エンジニアや、プログラミングの経験がある方でないと理解し難いものだと思われます。モノリス法律事務所は、元ITエンジニアで企業経営経験のある弁護士が代表を務める法律事務所です。あくまで、「元ITエンジニア・企業経営者が代表を務める法律事務所として、エンジニアやプログラミングの経験がある経営者を対象に、契約書チェック・修正について解説する記事」という位置付けです。
そして、この位置付けの上で、という話になるのですが、契約書のチェックや修正は、いわゆる「デバッグ」に近い作業です。
- そもそも「バグ」とは何か
- 「デバッグ」とはどのような作業なのか
- 契約書はどのようにアルゴリズムを規定するものか
- 契約書の修正とはどのような作業なのか
という順で、従ってエンジニアの方にとっては「当然」な話から始まるのですが、以下、解説します。
この記事の目次
「バグ」と「デバッグ」とは何なのか
バグとは「PCの故障」ではない
「バグ」と言うと、PCで作業をしていたらマシンから煙が出て画面がおかしな表示になって……といったイメージを持つ方もいるかもしれません。ただ、PCは、基本的には、「言われた通り」の動作しかしません。これは、バグが発生する場合も同様です。つまり「バグ」とは、
- PCは言われたとおりの動作をしているにもかかわらず
- 使う側にとってその動作が「想定外の挙動」である
という現象です。
「想定外の挙動」は何故発生するのか
例えば、マリオ型のアクションゲームにおける「壁抜け」のバグについて考えてみましょう。
マリオのジャンプは、2次関数です。加速度、速度、座標。ただ、いわゆる2次関数であれば、例えば「X=1.76582の場合のYは?」というように、Xを無限に細かく区切ることができますが、テレビゲームの場合、時間を無限に細かく区切ることはできません。画面は毎秒(例えば)30回しか切り替わらないからです。したがって、いわば、マリオは毎秒30回「ワープ」をしていることになります。
この上で、例えば、「マリオがジャンプしたら上空に壁があったので跳ね返る」という場合とは、どういう場合かというと
- 前の瞬間はマリオは空中にいたのに
- 次の瞬間に、マリオの座標が壁の中になる
という場合です。
こうした場合、「マリオはジャンプ中に上空の壁にぶつかった」と判断できる。したがって、自然言語的に言うと
もしマリオの座標が壁の中であれば、跳ね返り処理を行う(※1)
というプログラムを書けば、「マリオがジャンプしたら上空に壁があったので跳ね返る」という処理を実現することができる。
※1は、上記のように書く限り、正しそうに見えます。そして実際、「一定の条件であれば」この処理は正しいです。
しかし、よくよく考えてみると、下記のような場合もあり得る(※2)。
この場合、「マリオの座標が壁の中」という瞬間は存在せず、したがって跳ね返り処理が行われることはなく、マリオは壁をすり抜けてしまうことになります。
これが、「バグ」の例です。こうした理由で「壁抜けバグ」が発生したとしても、別にPCが故障している訳ではない。PCは言われたとおりの挙動を行っているのみで、その挙動を「想定外である」「バグである」と評価するのは人間です。そしてその「バグ」は、アルゴリズムが適当でないから、発生している。
「想定外動作が発生するか」を検討するということ
ただ、実際にゲームを遊ぶ過程で上記の「壁抜け」が発生するか否かは、上記のように抽象的に考えるだけでは不明です。「壁抜け」が発生し得るか否かは、
- マリオのジャンプ力(初速)はどのくらいなのか、ジャンプ力アップのようなアイテムはあるのか
- 壁は最も薄い場合どのくらいの厚みなのか
という条件次第だからです。これらの条件的に、※2のような場合があり得るか次第、ということです。※2があり得ないのであれば、※1のプログラムは別に問題がない、ということになる。
「デバッグ」とはどのような作業なのか
したがって、「デバッグ」、つまり、バグを見つけ出し、それを修正する、という作業を行うためには、
- プログラムがどのようなアルゴリズムなのか読解する(上記※1は自然言語ですが、実際にはプログラムは独自言語で書かれているため、読解自体が難しい)
- そのプログラムがどのような条件の下で動作するものなのかを検討する(ジャンプ力や壁の厚さについて調べる)
- その際に想定外の挙動が発生しないか検討する
というプロセスが必要となる訳です。
契約書のチェックとはどのような作業なのか
契約書のチェックも、この作業と似ています。そもそも契約書とは、その当事者、甲乙について、将来生じえる事象を想定し、その際に甲乙にどのような権利や義務が発生するのか、その結果、双方がどう行動することになるのか、といった点を規律するためのものであり、その意味で「現実世界を規律するプログラム」と言えるものだからです。例えば、
●●という事態が発生した場合、甲は乙に対して金100万円を賠償する。
といった規律を行う契約書は、将来発生する事象に関して、条件と効果を定義している訳です。
そして、その「現実世界を規律するプログラム」について問題がないか検証し、問題がある場合には修正する、という作業は、どうしても「デバッグ」に近いものとなる訳です。
契約書にはアルゴリズムの全貌は記載されていない
ただ、「契約」というものには、法律を専門にしていない方には理解し難い、しかし極めて重要な、一つのポイントがあります。契約書は、その当事者間を規律するアルゴリズムの「一部」だけを規定するものである、というポイントです。言い換えれば、契約書を読むだけでは、自分と相手がどのようなアルゴリズムの下に規律されるのか、その全貌を知ることができないのです。
例えば店で中古CDを購入する場合、店と客は「売買契約書」のようなものを締結する訳ではありませんが、しかし購入したCDの盤面に、プレイヤーで再生不能な傷があったら、店に文句を言いたくなりますし、店はそれに応じてくれるはずだ、と期待するでしょう。これは「サービス業なのだから」というレベルの話ではなく、理論的には、
- 契約書が無くとも、売買契約は締結されている
- 民法は、中古CDなど(「特定物」と呼ばれます)の売買契約について、売主には瑕疵担保責任が生じる旨を規定している
- したがって、民法の定めるアルゴリズムが店・客の間で走っており、店は瑕疵担保責任を負う
という理屈です。そして「契約書」とは、民法などの法律が定義するアルゴリズムを上書きするものです。例えば、仮に店と客の間で「当店はCDの一切の欠陥について事後的なクレームを受け付けない」という契約書等が交わされている場合は、
- 売買契約が締結されている
- 民法は、当該契約について、売主には瑕疵担保責任が生じる旨を規定している
- しかし、契約書の定めによって、2の原則が上書きされており、店に瑕疵担保責任は発生しない
となります。
契約書は民法などの原則を「上書き」するもの
これは、システム開発など、企業間で締結される契約の場合も同様です。例えば甲乙間で請負型のシステム開発の契約書が締結されている場合、
- 当該契約書を交わすことによって明確に、請負契約が締結されている
- 請負契約の場合、民法の定めによって受託側に瑕疵担保責任は生じる
- 仮に契約書に瑕疵担保責任の定めがあるのであれば、その定めが2の民法原則を上書きする。例えば、民法原則より長い期間の瑕疵担保責任条項を設けておけば、その期間の定めが有効となる
という構造になります。つまり、例えば、契約書に特段、瑕疵担保責任に関する定めがなくても、瑕疵担保責任は発生する、ということです。
これは、請負やシステム開発などに限定された話では無く、株式の譲渡、デットでの資金調達(金銭消費貸借)、雇用、株式発行など、企業が行うあらゆる契約に関する一般論です。
したがって、契約書を読むだけでは、相手と自社の関係を規律する「アルゴリズム」の全貌を掴むことはできません。その全貌を掴むためには、「民法などの法律が定めるデフォルトのアルゴリズム」を理解していないといけないのです。契約書は、あくまでその「デフォルトのアルゴリズム」を上書きするものに過ぎないからです。
将来発生し得る事象を想定できなければ「デバッグ」はできない
また、アルゴリズムを理解するだけでは、「そのアルゴリズムで想定外動作は発生しないのか」という点を検証することはできません。ゲームの「バグ」の場合と同様で、アルゴリズムは、あくまで抽象的なものであり、将来どのような事象が発生するのかを想定しなければ、「そうした事象が発生した場合に想定外の挙動とならないか」を検証することができないからです。
これは、特に、新しいアプリやサービス等のプロダクト、新しいビジネススキーム、といった場合に重大な問題となる事柄です。そうしたプロダクトやスキームで事業を展開した場合に、将来、どのようなことがあり得るのか。これは、当該分野に関する知識などがないと、なかなか想定しがたいものだからです。また、特に企業間の契約の場合、相手方企業も自社も、一定の経済的合理性の下で行動するわけですから、将来の事象、それをもたらす相手方の行動の予測のためには、企業経営に関するゲーム理論的な発想も必要となります。
「想定外」かどうかは経営判断にも基づく
さらに、ある事象を「バグ」と判断するのがPCではなく人間であるのと同様に、契約書のもたらすある帰結が「想定外」であるかどうかを判断するのも、純粋な法律マターの問題ではなく、経営判断的な問題です。
例えば、「民法原則のとおり」のアルゴリズムが、ある企業のある事業においては受け入れ不能である、というケースは、現実的にあり得ます。ここまでの例と話が変わりますが、例えば、民法は、準委任契約について、「受託者による再委託は契約違反となる」というデフォルトのアルゴリズムを規定しています。しかし例えば、「ある会社にとって、ある事業は、当然に下請先企業を使うことが想定されているものである」というケースはあります。そうしたケースにおいて、再委託が不可能な契約、つまり
- 再委託の可否について何も明記していない(この場合、上記の通り、民法原則が適用される)
- 再委託が不可能である旨が明記されている
という契約を受け入れることは、たとえそれが「民法原則のとおり」であるとしても、できないはずです。
また、経営には常に、「一定の事由が発生したら責任を取らされる」というリスクはあります。自社にとって「リスク」がおよそ存在しない契約、というものは、基本的には存在しません。そのリスクを受け入れるかどうかは、最終的には経営判断です。経営判断を行うのは経営者であって、顧問弁護士などのコンサル的な立場の者ではありませんが、コンサルは、経営者が経営判断を行うために必要十分な情報を提示すべきであり、
- いちいち指摘する必要のないリスク
- 受け入れることが当該企業としての重大な意思決定となる、場合によってはミーティング等が必要なリスク
といったものを、濃淡を付けて指摘しなければならなりません。この「濃淡」の設定のためには、他の分野に関するコンサルの場合と同様、契約書チェックを行う弁護士にもまた、「経営」の感覚が一定程度必要となる訳です。
まとめ
このように、契約書チェックや修正とは、大きく、下記のような作業であると言えます。
- 契約書によって、民法等の原則がどのように上書きされ、結果としてどのようなアルゴリズムとなっているかを理解する
- そのアルゴリズムの下で、将来どのような事象が発生し得るかを検討する
- その際に想定外の挙動が発生しないかと検討する
そして上記はそれぞれ
- 法律を理解している者でないと困難な作業
- その契約が規律する、例えばアプリやウェブサービスといった事業の内容、ビジネススキーム等を理解している者でないと困難な作業
- 当該企業や事業の内容、経営感覚を一定程度理解している者でないと困難な作業
となる訳です。
契約書のチェックや修正は、こうした理由で、非常に「専門的」なのです。
当事務所による契約書作成・レビュー等のご案内
モノリス法律事務所では、IT・インターネット・ビジネスに強みを持つ法律事務所として、様々な契約書の作成・レビューといった業務を、顧問先企業様やクライアント企業様に対して提供しております。
気になる方は、ぜひ下記にて詳細をご覧ください。
カテゴリー: IT・ベンチャーの企業法務