「車輪の再発明」とは何か?

車輪の再発明という言葉を聞いたことがありますか?慣用句としてプログラミングの世界では耳にすることがあります。Perlでは避けるべきこととしてこの言葉を上げることがあります。

ウィキペディアには次のように書かれています。

車輪の再発明(しゃりんのさいはつめい、reinventing the wheel)とは、「広く受け入れられ確立されている技術や解決法を(知らずに、または意図的に無視して)再び一から作ること」を指すための慣用句。

車輪の再発明 – wikipedia https://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E

プログラミングの世界でこの言葉を耳にすることがありますが、このウィキペディアにもそのことに触れています。またウェブ上でも様々な意見があり、その中で「車輪の再発明は無駄とは言えない」等の趣旨が書かれていることを目にします。

車輪の再発明という言葉の意味が正しく理解されていないように感じた為、ここで少しまとめておきます。

発明とは?

車輪の再発明という言葉の内、再発明という言葉を誤解しているような人が見受けられる為、goo辞書で発明の意味を確認してみます。次のように書かれています。

はつ‐めい【発明】 の解説
[名](スル)
今までなかったものを新たに考え出すこと。特に、新しい器具・機械・装置、また技術・方法などを考案すること。「必要は発明の母」「蒸気機関を発明する」

goo辞書 https://dictionary.goo.ne.jp/word/%e7%99%ba%e6%98%8e/

発明とはアイデア自身を表します。しかし、形を伴わないと他の人から見えない為、試作機等の形あるモノにし、そのモノをもって発明と呼ぶこともあります。つまり、発明とは次のようになります。

  1. ある課題を解決するためのアイデアを考案する
  2. このアイデアを形にする

上記1が本質的な発明の意味になります。

車輪の再発明とは?

プログラミングの世界における発明とは次のようになります。

  1. 課題解決のためのアイデアを考える
  2. アイデアを実現するコードをプログラミングする

これを繰り返すことが再発明となり、車輪の再発明が無駄なことを意味します。しかし、上記2を繰り返すことを再発明とし「車輪の再発明は無駄なことではない」と主張する人を見かけます。次のような事が書かれていることが多いです。

  • 実際にあるプログラムのコードを一から書き直すことにより処理速度が上がった
  • 既存のコードを研究することによりより効率の良いコードを作った
  • コードの勉強のためコードを一から書いた

これらは再発明ではなく、再構築や効率化、研究等というように目的が異なっており、アイデア自体は使い回しになっていたりします。

そもそも車輪の再発明は良くないと言われるのは次の点からです。

  • 発明にかかるコストは高く、再発明は無駄である
  • 多くの人の目に触れたコードの方がバグが少なくなる

この為、課題を解決するための必要十分なプログラムがあるならそれを利用するほうがいいでしょう。そのため、先人が開発したライブラリを集中して管理するシステムも有り、PerlならCPAN(https://www.cpan.org/)、RならCRAN(https://cran.r-project.org/)、PythonならPyPI(https://pypi.org/)などを調べることで先人の知恵を得ることが出来ます。

検索のシステムも強力になった現在、ちょっとしたことを調べるのが便利になりました。作りたいものがあるのなら少し調べてから開発するようにしたほうがいいでしょう。