車輪の再発明をすることで僕たちは理解を深めることができる

NichinanIMGL9633 TP V

僕が属しているIT業界では、しばしば「車輪の再発明」という慣用句が用いられる。

OSS(オープンソースソフトウェア)などで既に先人が実装済みのものを、自分の手でゼロから再構築した場合に用いられる慣用句だ。

Wikipediaには以下のように書かれている。

新たな付加価値が何もないものを作成するのにコストをかけることから、皮肉的なニュアンスで用いられる。再発明を行ってしまう理由としては、「既存のものの存在を知らない」「既存のものの意味を誤解している」といったことが挙げられる。主にIT業界、とくにSEやプログラマの間で良く用いられる。

これらの業界では、ライブラリや先行事例があるにもかかわらず、様々な理由でそれを利用せず、コードやプログラミング技法を再び一から作ってしまうことが多い。これは現代のコンピュータおよびネットシステム等の開発においては、ライセンス形態が多様で、似たようなものがあっても実際の開発現場ではそれが事実上利用できないことがあるほか、機能的には似ていても設計思想の違いからシステムの発注者がその仕様を好まないため新規開発せざるを得なくなる場合もある。ただ、本当にその設計思想が必要なものかは議論すべき問題であり、特に広く普及している標準部品を無視して開発された独自アーキテクチャはしばしばシステムの利用者を困惑させる。

Wikipediaより引用

まぁ簡単に言えば、既にあるものを使わずに「同じ機能」のものをもう一度作りなおす、いわば「無駄」の代名詞のようなものだ。

ただこれには一点、有意義な点があって、それは「再発明することで深い理解を得られる」ということにある。

Wikipediaには、以下のようにも書かれている。

なお、教育の現場では、ある技術の意味を理解させるために、意図的に「車輪の再発明」を行わせる場合がある。またプログラマもしばしばその技術を深く理解して自身の技術を向上させるために敢えて「車輪の再発明」をすることもある。その場合、一時的には標準的なシステムと異なる路線になっても、最終的には標準的な路線に回帰していくこともある。

Wikipediaより引用

例えば、あるソフトを開発しようとした時、既存のOSSを使えば実装できることはわかっていても、あえてゼロから自分の手で組み上げて、スキルの向上を図る場合などだ。

ソフトウェアの話だと、非エンジニアの方にはわかりづらいので、これをホンモノの車輪として考えてみよう。

車輪の再発明をすることの重要性

車輪、ここでは(タイヤのついた)ホイールを考えてみる。

全体の構造を見てみれば、まずホイールにタイヤがついている。ホイールの材質は何を使えばいいか、どういう部品が合わさってホイールが作られているか、どうすれば強度を保てるか、アルミにするか鉄にするか、タイヤのグリップはどう保証するか、、、などなど、タイヤを作る上では検討事項がものすごく大量にある。

もちろん完成品のタイヤを車に付ければ使えるわけだけど、車の機能を把握した上で組み上げるには、それ相応の知識があったほうがいい。

これが車輪の再発明だ。

知っているのと知らないのとでは、大きく差が出るだろう。

もっと身近な料理で考えてみても、レシピ通り作れば出来るけど、なんでそう作ればいいのかわかっていないと、応用が効かない。

車輪を再発明するってことは、そういう「真理を理解する」ところにある。

そして、逆に言えば、車輪の再発明をすることでしか理解に繋がらないから、僕たちはずっと車輪の再発明をしながら、自分自身の技術力を磨いていく。

再発明した車輪は使わない方がいい

ただし、車輪の再発明は上記で説明したとおり有用だけれども、それを実際の現場で使うことは辞めたほうがいい。

独自進化をすればするほど、メンテンナス性が下がるからだ。

再発明はあくまで自分のため。

既存のOSSでカバーしきれない点は、そこだけ独自で書くかもしくはOSSに機能追加をしていくべきだ。