見出し画像

コードをコピーすることは必ずしも悪ではない

English version.

最近は他の人のコード使うのが本当に簡単になったな、と思います。以前であれば、インターネットで検索したとしても、どこぞの掲示板に書いてあるコードだったり、どこぞにホスティングされているファイルをダウンロードしてくるようなものが多く、自分でなんとかして組み込まないといけませんでした。もちろん、バージョン管理もできなければ、先方で更新された場合に簡単に追えるようなものでもありませんでした。
それに比べ、最近のプログラミング言語にはだいたいパッケージマネージャが付いており、他の人のコードを取り込むのがとても簡単です。バージョンを固定するのも指定1つですし、更新も容易です。

leftPadの例

ただ個人的にこの容易さはリスクがつきものだと思っています。特に今から述べるようなリスクを考えたときに、果たして何でもかんでも他の人のコードを使うべきなのか、という疑問が湧いてきます。
例えば、以下のライブラリです。

名前から分かるように、このライブラリは leftPad という関数を提供しています。この関数は与えられた文字列を指定された文字で指定された回数先頭に付けてくれます(デフォルトでは空白)。説明を聞いて気付かれるかもしれませんが、対して複雑なものではありません。自分で書くこともできるでしょうし、なんならAIに書かせることもできます

実はこのライブラリを巡って、JavaScriptのエコシステム界隈で大きな論争になったことがあります。簡単に紹介すると、このライブラリの作者は他にもいくつかライブラリを公開していました。そのうちの1つがある企業の商標と衝突しているとして、その企業が名前を譲ってくれないと訴えると脅してきたのです。何回かやり取りをしていく中で疲れてしまった作者は、自分のライブラリを全て削除してしまいました。その中には leftPad も含まれていたのですが、このライブラリは他のライブラリやフレームワークでも多く使われており、それらもすべて壊れてしまったのです。
詳しく知りたい方は以下の記事を読んでみてください。

課題はどこか?

この問題は正直誰でも簡単にかけるようなコードを安易にライブラリとして取り込んでしまったことにあると思っています。leftPad を自分たちで実装していれば、当然このような問題は起きていません。ライセンスの問題は一回さておき、自分たちで内容をコピーしたり、参考にしたりすることもできたと思います。
無論、人によっては「DRYでない」とか「自分たちで書くとミスをする可能性がある」と主張する方もいると思いますが、自分はその判断は 場合による と思います。leftPad のようにシンプルなものであれば、コピーしたり自分で実装したりすることのコストはそれほど大きいとは思いませんし、変更が入る可能性も低いためメンテナンスコストも低いと思います。それに対してライブラリとして取り込んだ場合に付いてくる「消滅リスク」を考えると、コピーしたり自分で実装したりすることのメリットの方が大きいと思います。

バランスを考える

もちろん、ライブラリを使うべきではない、とか、自分で書くべき、ということを言っているわけではありません。ただ、バランスを考えるべきだと思っています。leftPad のようなシンプルなものの場合は⬇️のような点を考えて、コピーしても良いのでは思います。

  • 自分で書けるほどシンプルなものか?

  • 将来変更する可能性はあるか?

  • テストしやすいか?

次に npm add や pip install を実行するときは、本当に必要なものか、自分で書けないか、ということを是非一度考えてみてください。

いいなと思ったら応援しよう!