ソースコードのコピー&ペーストは避けるべきだとよく言われる。これは同じコードがソースコードの複数の場所に混在すると、その処理を変更しようとした場合にソースコード全体をチェックしなければならず保守性が下がるからといった理由がある。処理はルーチンとしてまとめ、その処理が必要になった場合にはそのルーチンを呼ぶコードを書くというのが定石だ。
しかしWebとスクリプティングが発展した現在では、この定石はネットワークを挟んでのコピー&ペーストにはそのままでは適用できない。多くのコードはすでにWebのブログやスニペットサイトに掲載されており、自分で開発するよりもコピー&ペーストした方が効率がいい。しかしここには問題もあり、利点と欠点を把握した上で活用していくのが効率のいい姿ということになる。
こうしたWebとスクリプト時代におけるコピー&ペーストについてJeff Atwood氏がCoding HorrorにおいてA Modest Proposal for the Copy and Paste School of Code Reuseというおもしろい記事をまとめている。氏は冒頭でコピー&ペーストに対する自身の考えは「コピー&ペーストが悪いコードを生成するのではなく、悪いプログラマが悪いコードを作成する」と述べたあとで、いくつかの言葉を引き合いに出しながら説明をおこなっている。途中、'Reuse' Is Not Usableを引き合いに出してWebにおけるコピー&ペーストの優れた点と問題点を次のように紹介している。
優れた点
- ブログやフォーラム、Webに掲載されたコードは検索しやすい
- 使う前にコードのチェックを行うようになる
- ブログのコメントでコードのちょっとした改善が可能になる
- ページランキングがすなわち高い品質のコードを見つけやすくしてくれる
- 簡単で読みやすいコードほどコピーされてペーストされる
- プログラマは十分な品質だと判断したコードしか公開していない
問題点
- 作者がコードを改善してもその利益をそのままでは得られない
- コードを改善してもそのままでは作者にフィードバックさせる方法がない
- そのソースコードが本来なにをするものなのか理解されないままコピーされている
- ページランクはコードのクオリティについて保証してくれないし使用目的によって異なる
- コードはデモコードであることも多くエラーハンドリングやセキュリティ対策などが実施されていないものもある
Jeff Atwood氏は同ブログにおいて「小さいコードには小さいソリューションが必要だ」と延べ、スニペットの前に「// codesnippet:1c125546-b87c-49ff-8130-a24a3deda659」といったGUIDを掲載してはどうかといったアイディアを紹介している。この方法であれば簡単に検索してオリジナルにもたどり着きやすくなるというわけだ。なおGUIDを生成する方法としてCreate a GUIDも引き合いに出されている。