『車輪の再発明』がダメな理由

『車輪の再発明』という言葉をご存知でしょうか。例えば馬車を作りたい場合、車輪というベーシックなパーツから設計をし直さなくても、すでにある車輪を使えば効率よく馬車を作ることができます。

転じて、ソフトウェア開発やウェブ開発においては、「すでにあるプログラムパーツ(ライブラリーやフレームワーク)を使わずに、全部を手作りするのは効率が良くない」ことを指します。

ではこの車輪の再発明は、本当にダメなのでしょうか? 筆者は「再発明すべき時」もあると考えています。紹介しましょう。

初心者ほど陥りやすい、車輪の再発明

この言葉、わざわざこんなことわざっぽい言葉にしなくても、「すでにあるものを再度作るのは非効率なのは当たり前」と思うかもしれません。

しかし、筆者も含めてプログラム開発を学習し始めた方で、特に少し知識がついてきた方ほど、これに陥る危険性が高いのです。

例えば、フレームワークを用いる場合、意外と効率が悪く感じます。せっかくプログラミング言語を学んで、自由に開発できるようになったのに、フレームワークを導入するならそのルールを改めて習得しなければなりません。さらに、そのルールに従って開発しなければならないので、ちょっとしたことが非常に面倒に感じることもあります。

そこで、「自分でこれと同じようなフレームワークを作ったらいいじゃないか」と考えたり、「自分ならもっと効率の良いしくみを作れそう」などと、開発を始めてしまうのです。あわよくば、オープンソースで公開して、注目されるかもしれないなんていう夢を描くこともあります。

開発しつづけ、普及させるのは非常に大変

しかし、フレームワークのような基礎部分の開発というのは、最初こそ楽しいですが、開発は非常に地味な作業で、地道な開発作業です。これをやり遂げるのは、相当な開発能力と精神力がなければ続けられません。

大抵は、途中で飽きる、中途半端な作りのまま公開される、バグだらけといった具合で、とても使い物にはなりません。そのまま、捨てられるのであればまだ傷口は浅いですが、厄介なのはそれを、実際の業務に導入してしまった場合です。

独自フレームワーク(オレオレフレームワーク)の保守コスト

業務で使われるプログラムは、一度導入されてしまうと、1から作り直すというのは難しくなり、場合によっては10年以上にわたって、同じシステムが使われ続ける場合もあります。

当然、そのシステムを保守するのは最初に開発した開発者だけではなく、引き継ぎを続けて多くの開発者が関わることになります。しかし、ここで独自のフレームが導入されていると、どんなに技術力の高い技術者であっても、新たにそのフレームワークを習得しなければなりません。

さらに、オープンソースのように多くの開発者が関わっていないため、バグも潰れていませんし、セキュリティホールのリスクもあるのかないのかすらわかりません。最初の開発者が「既存フレームワークを習得するのが面倒だ」と思ってしまったがために、将来にわたって負の遺産となってしまうのです。

と言うことで、業務でプログラミング開発を行う場合は車輪の再発明は、百害あって一利なしといえます。

[adsense]

練習に、車輪の再発明をあえてするという発想

ただし、車輪の再発明が常にダメかと言えばそんなことはなく、あえてしてみるという時もあります。その一つが、言語を学習中の時。言語を学習中、あまり便利なフレームワークを使ってしまうと、逆にその言語の機能がよく分からなくなるときがあります。

例えば、Ruby on Railsや PHPの Laravelなどには、面倒な作業を一発で行ってくれるコマンドがあったりします。また、「ルーティング」を行うだけで基本的な機能をすべて実現してくれるような機能もあります。

これらは、やってみると楽ですし楽しいのですが、少しでもそれを応用しようとするととたんに手を出せなくなってしまいます。そんな時は、あえてそのような便利機能を使わずに自分で作ってみると、内部の作りがよく理解できたり、応用が利く場合もあります。

これまでになかった機能の実現に

もう1つ、車輪の再発明が有効なシーンは「これまでなかった機能を実装する場合」です。当たり前ですが、便利なライブラリーやフレームワークは、先人が「面倒だ」と感じたからこそ、誰かがその車輪を作ってくれたのです。

しかし、まったく新しいことをやろうとしている場合、まだ世の中に車輪が発明されていないケースもあります。そんな時に、似たようなもので代用しようとしたり、無理矢理使おうとすると、いまいち使い勝手が良くない場合もあるでしょう。

そんな時は、車輪の再発明・・ではなく、新規発明をするべきです。それこそ、オープンソースで公開すれば、有名開発者の仲間入りになるかも知れません。

こんな機能が欲しいなと思ったとき、まずはすでに存在していないかを検索してみて、もしまだこの世に存在しない機能だったりした場合は、是非チャレンジしてみましょう。