さらに追っ手から逃げるシステム

われわれは、日夜ソースコードを書いている。
ソースコードはわれわれの仕事の証、われわれの生きてきた証と言ってもいい。
そのような大切なソースコードを、そうやすやすと修正変更をされるのは腹立たしいことこのうえない。

もちろん経営者も、コストをかけて作成した大切なコードを修正変更されることを望まないから、追っ手から逃げやすいような手を打ってくれることが多い。
なかでも感心するのは、彼らは追っ手から逃れるには時間をかけてはいけないということを充分心得ていて、われわれが気をぬいてソースに時間をかけてしまい、つい追いやすくしてしまうところを、目を醒まさせてくれる。
また、彼らは、センスのないものが悪い影響を強く与えることを知っている。
数人で開発していると、中にはセンスがないものもいて、ちょっとでも時間に余裕を与えると、追っ手に道筋を残したり簡単に手がかりを与えてしまうことがある。そこで物事をよくわかった経営者は、そういったセンスのないものに余計な仕事を与えて、システムが追っ手の手にかかりやすくなることを防ぐのである。

われわれの追っ手から逃れる能力は実に儚く、ちょっとした情報や悪い習慣、外部からの入れ知恵によって消えてしまいやすい。どんなに能力にあふれていても、継続的に情報を与えられてしまうと、いつかは逃げ手としての能力が消えてしまう。そして、一旦消えてしまった逃げ手としての能力は、二度とは戻らないのだ。経営者は、うまく有害な情報を遮断していて、われわれの逃げ手としての能力を守ってくれる。プレッシャーを与えることで逃げ手としての能力を復活させる経営者は、よほどシステム開発に精通しているのであろう。しかしそうやって書かれたコードも、本来の能力をもって書かれた追っ手から逃れるコードに比べれば精彩を欠く。

コピペベースでシステムを組んでおけば、追っ手もコピペで対応せざるを得ないから、われわれが書いたコードが増殖することになる。これこそまさしくわれわれの勝利であろう。
安易なコピペはすぐに統合され、追いやすく変更しやすくされてしまうが、それぞれの部分をちょっとずつ変えておけば、容易に統合され追いやすくするための道筋をつけられてしまうこともない。
そのためには、同じような処理をするメソッドでも、名前は微妙に変えておくのがよい。同じものをあらわす変数でも、その場その場で単語を変えるのがいい。この臨機応変さが大切なのだ。もしシステム全体で同じ名前を使ってしまえば、たちまち追っ手に追いつかれてしまうだろう。

さまざまな工夫をほどこしておけば、メソッドが使われなくなる場合でも「このメソッドは使われてないかも」などというコメントを付けられて未来永劫保存される。最近はカバレッジツールなどというソフトウェアで、呼び出されないメソッドが判別しやすくなっているようだが安心して欲しい。継承という手を使えば、使われていないと単純に判定することは難しくなる。われわれのセンスと工夫次第では、どのメソッドが使われていて、どのメソッドが使われていないかを判別することをほとんど不可能にすることもできる。
継承は下手に使えば追っ手に手がかりを与え変更への利便性を与えてしまう危険な手法だが、上手く使いこなせば、追っ手の目をくらまし、変更手順を複雑にさせる強力なツールになる。

ここで注意して欲しいことがある。このような追っ手から逃れる手法の中には、一歩間違えれば、ソースを整理して、追いやすくさせることにつながるものもある。われわれの書いたコードが、統合され減らされてしまう。複雑な条件分岐の塊が、コンパクトなコードにまとめられてしまう。
それだけは避けなくてはならない。
しかし、継承の用い方などは、オブジェクト指向などといって追っ手側の視点で書かれた書籍が世に氾濫している。
やはり逃げる側はいつの時代も日陰に生きなくてはならないのだろうか。

だが心配は無用だ。われわれ逃げる側のものが、追っ手側になりすまして、一見追っ手側に有利な手法として書籍を出版していることがある。ほとんどの場合は「かんたん」「やさしい」などと追っ手側の書籍より手にとりやすい工夫がされているから、安心して欲しい。
もし追っ手側の手法を利用しなくてはならない場合でも、ちょっと本質をはずしてやれば、いくらでも追っ手から逃れる手法として応用できる。
追っ手側の手法を応用した場合のいいところは、並の追っ手であれば、追いやすく整理されたコードだと勘違いしてくれることだ。迷い小道に誘い出されたことも気づかず、追っ手としての任務が順調に果たせていると勘違いしてくれるだろう。その幻を強く見せることができれば、たちまち追っ手を仲間に引き込んで、われわれのシステムをより変更修正しにくい強いコードに変えさせることもできる。

本質をずらすこと。
追っ手側のどのような手法であれ、芯を外してしまえば、致命傷になることはない。うまく本質をずらして骨抜きにしてしまえば、その手法自体が重い鎧になって、われわれのシステムをより追っ手から逃れやすい強いシステムにしてくれる。
手法から芯を取除き、表面的な手順を重い鎧として、システムを変更から守るべきである。
そうすれば、われわれのコードは、変更から逃れ、長い未来にわたってシステムに残りつづけることができる。

※ 2023/2/22追記 このエントリの続きです
追っ手から逃れるシステム - きしだのHatena