なぜコピペはダメなのか?

コードレビューをしているとコピペしたと思わしきコードが持ち込まれることがあります。その度に指摘をするわけですが、よく指摘する内容をまとめてみました。

 

1).  記述内容を理解していない

Google検索の結果をそのまま貼りました」「以前のコードがそうなってたので真似しました」

特に後者はよくある回答ですね。既存コードだろうとWebにあるコードだろうとOSSの何かであろうと参考にするのは悪いことではありません。

しかしそれはあくまで参考です。自分たちが満たすべき要件と100%一致するとは限りません。

もちろん、記述内容をすべて理解し、その上で自分たちが書くべきだと思ったコードとたまたま一致する分には問題はありませんが、真似しただけだから分かりません、という回答だと大問題。

自分の記述範囲は真似てようがなんだろうが内容を理解してることが大事。

 

2). 重複したロジックが生まれる

俗にいうクローンコード。

同じロジックを自分のモジュールでも使いたいからと既存コードをコピペしたりして発生する。

これの問題は保守コストの増大。作った瞬間は問題ないのだけど、いざ、そのロジックを直す必要があるときに2倍の作業が必要になる。

しかも、例えばvalidate関数の内容をコピって別な場所に移植、とか変なことしてると、通常使ってるvalidate関数しか直さないとかあるだろうからバグを生む可能性が非常に高いです。

対処方法としてはちゃんと共通の関数やクラスに切り出すこと。どうしても保守性を下げてでも、ハードコピーをする必要があるならば、コード管理してるか責任持ってる人に相談しましょう。

 

3). 命名規則がおかしい

これは2つのパターンがあって、スタンダードな命名規則(Javaのコーディング規約とか)に対しておかしい場合と、そのシステム内で統一が取れてない場合。

単純に変だよね、直そうですむ場合は良いのだけど、結構やっかいなケースも多い。

たとえば、明らかに標準と違う名前だけど、このシステム内あるいはこのクラス内ではこうなってる、ってケース。

べき論としてはおかしいところ全部直せ、なんだけどコスト的にペイしないことも多いのが現実。

こういった場合、周りと合わせてどこかで一気に直すか、発生ベースでちょこちょこ直すかはコード管理の方針によるので、管理してるか責任持ってる人に相談しましょう。

 

まとめ

基本的には1は論外。新人ならきちんと叱って、それなりの経験者ならマイナス評価ってレベルですね。
2, 3は容易に実施できないケースもあるので最後は要相談なんだけど、深く考えてないケースが結構多いが問題ですね。
いずれにしても、コピペコードがダメと言われるのは考えてないからです。考えた結果コピペしたのと同じ結果になるけど、打つのが面倒だからコピーアンドペーストで貼り付けたってのは問題にはならないので、よく考えて使いましょうー

 

それではHappy Hacking!