突然ですが皆さんは、「車輪の再発明」という言葉をご存知でしょうか。
この言葉は、ソフトウェア業界において聞くことがある言葉です。
一言で言うと、
「昔、誰かが既に発明しているものを、もう一度発明し直す」
という意味です。
そしてそこには、「無駄な努力」というニュアンスが含まれています。
なぜこの言葉が、ソフトウェア業界において使われるようになったのでしょうか?
今日はその背景を、詳しく見ていきましょう。
「車輪の再発明」が使われるようになった背景

この「車輪の再発明」という言葉が使われるようになった背景には、プログラミング業界の流れが関係しています。
たとえば、以下のようなものです。
(後ほど詳しく説明するので、今はよく意味が分からなくても大丈夫です。)
- 「オブジェクト指向」に代表されるような「プログラムの部品が、互いの機能を呼び出すことで、全体としての機能を実現する」ようなソフトウェア設計が主流になってきた。
- 「オープンソース」という考え方に代表されるように、ソフトウェアを「シェアする」という風潮が育ってきた。
- 近年の「Web技術」の発展により、ネットワーク経由で他人のソフトウェアを呼び出すことができるようになっている。
一つずつ、詳細を見ていきましょう。
オブジェクト指向

「オブジェクト指向」とは、プログラムの一つの「考え方」だと思ってください。
今はもう「プログラム」というと、ほとんどのプログラムがこの「オブジェクト指向」を採用していると言って良いでしょう。
この「オブジェクト指向」という考え方は、詳しく説明し始めると、とても深い分野なので、詳細な説明は今後の記事にゆだねるとしましょう。
ここではとても簡略化して言うと、オブジェクト指向とは、
「プログラムを、いくつかの独立した部品に分ける」
ことを推奨している考え方です。
たとえば、電卓のプログラムであれば、「キーボードの入力を受け付けるプログラム」「計算をするプログラム」「結果を出力するプログラム」という具合に機能を分割して、プログラムの設計を行います。
それぞれを独立した「部品」とみなして、プログラム全体を設計していくのですね。
なぜ分割するのかと言えば、一つの大きな理由は、プログラムの部品を「再利用」できるようにするためです。
たとえば、最新型の電卓を作るとき、「キーボードの入力を受け付ける」という部分は、旧来の電卓と変わらないのであれば、昔作った「キーボードの入力を受け付けるプログラム」を、新しい電卓にもそのまま使ってしまえばいいのですね。
そして、残りの部分のみを、新たに作り直せば良いのです。
このように、「プログラムを、独立した部品に分ける」ことを推奨しているのが「オブジェクト指向」の大きな特徴です。
勘の良い方はもうお気づきかもしれませんが、この「オブジェクト指向」に基づいて作成されたプログラムは、他人が作成した「プログラムの部品」を、そのまま使いまわすことも容易です。
「僕も電卓のプログラムを作りたいんだけど、キーボードの入力を受け付ける部分が難しくて、僕には作れないんだ… 君が前に作っていた部品を、くれないかい?」
なんていう風に、「ある特定の部品だけ、他人が作ったプログラムを使って、それ以外の部分は自分で作る」なんてことができるようになったのです。
こういった流れがプログラムの設計の主流になってきたことが、「車輪の再発明」といいう言葉が用いられるようになった一つの要因です。
ここで言う、「車」は、プログラム全体。
電卓で言うなら、電卓のソフトそのものです。
そして、「車輪」とは車を作るための一つの部品。
電卓で言うなら、「画面に表示するプログラム」とか「計算をする部分」とかですね。
基本的に、私たちが作ろうとするプログラムは、ほとんどの場合、以前に誰かが似たようなものを作っています。
そこにオリジナリティを加えて、独創的なソフトウェアを作ろうとするのですが、もう既に誰かが作っている部分は、それをそのまま使わせてもらった方が効率が良いのは明らかですね。
借りて使えば一瞬で済むものを、一生懸命、自力で作って、
「やったー!すごいものを発明したぞ!」
と言っている人を見たときに、
「それは車輪を再発明するのと同じだよ」
と、誰かが最初に言い出したのでしょうね。
「車輪」というのは既に、大昔に発明されているものですから。
今回はあまり詳しく説明しませんでしたが、この「オブジェクト指向」という考え方は、プログラムをよく「物」にたとえます。
たとえば飛行機を操る「シューティングゲーム」のプログラムであれば、「飛行機」「ミサイル」「雲」「敵」…そういった、それぞれの「物」になぞらえて、プログラムの部品を作成します。
「飛行機プログラム」、「敵プログラム」…
ですから「車輪の再発明」という言葉も、プログラム全体を「車」にたとえて、プログラムの部品を「車輪」とか言っているあたり、とてもオブジェクト指向の影響を受けているような気がしますね。
オブジェクト指向については、以下の記事でもう少し詳細に説明をしているので、興味がある方はこちらもご参照ください。
オープンソース

「他人が書いたプログラムを使う」と言っても、なんだか「本当に大丈夫?」という気がしてしまいませんか?
「え? 著作権とか大丈夫なの?」
という具合です。
もちろん、許可されていないプログラムを勝手に使ってはダメです。
しかし近年、エンジニアたちの間で支持を集めている「オープンソース」という考え方は、「自分が書いたプログラムを、無償で他人に使わせてあげること」を推奨しています。
「近年」と言っても、「オープンソース」という言葉が使われるようになったのは1998年頃ですから、そこまで近年ではないですね。
それ以前は、「フリーソフトウェア」という言葉が使われていました。
「オープンソース」は自由にプログラムを再利用することを認める考え方で、プログラム作成者が完全に著作権を放棄するものではありません。
そのため、プログラム内に著作権表示をしたりする必要はあるものの、きちんとルールを守れば、誰かが作ったプログラムを、自分のプログラムの「部品」として使うことができます。
厳密に「オープンソース」という言葉が当てはまらない場合もあるにしても、そういったオープンな「風潮」があるのは事実です。
Githubなんていう、世界中の人達とプログラムを見せ合いながら、協力してプログラムを作成していくようなサービスも、支持を集めていますね。
日本はそこまでではありませんが、「Githubやってないとか、プログラマーとしてどうなの?」というような空気が、特に海外では強いように感じております。
「車輪」をもう一度発明しないためには、その「車輪」を誰かからもらう必要があります。
「せっかく車輪を作ったんだったら、みんなで共有しようぜ!」という流れがプログラマー達の中にあることが、「車輪の再発明」という言葉が使われている一因になっているのかもしれませんね。
ネットワーク経由で、他人のソフトウェアを呼び出す

別にネットワーク経由で呼び出さなくても、ちゃんとダウンロードすれば、他人のソフトウェアを使わせてもらうことはできるのですが、近年の「Web」の普及によって、いちいちダウンロードをしなくても他人のソフトウェアを使えるようになったことも、プログラムの再利用をしやすくしている一つの要因です。
ネットワーク経由でソフトウェアを使うって、どういうこと?
これは、プログラミングをやっていないと、少しイメージをしづらいかもしれないのですが、たとえば、「JavaScript」と呼ばれるプログラムがあります。
JavaScriptに関しては以前「【初心者向け】JavaScriptって何?」という記事を書いているので、JavaScriptがどういうプログラムかを知りたい方は、そちらをご参照ください。
このJavaScriptというプログラム、実は、世界中のいろんな人が、既にプログラムの部品を作ってくれています。
ですから、僕たちは、「その人たちが書いたプログラムの部品を、コピーするだけ!」と、思うかもしれません。
しかし実は、コピーする必要すらないのです。
JavaScriptの、すごく便利な機能をいっぱい集めた「部品集」の一つに、「jQuery」と呼ばれるものがあります。
「jQuery」とは、JavaScriptのプログラムを書く上で、よく使う機能を、「部品」としてたくさん用意してくれています。
いわば、「車輪」がいっぱい詰まった、便利な工具箱です。
その「車輪」を使わせてもらうには、プログラムの中に以下の1行を追加するだけです。
この記述の中に、
「http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js」
という文字列が入っていますね。
これは、jQueryのプログラムが置いてある「URL」です。
「URL」とは、Web上での「住所」のことですね。
つまり、
「ここの住所に置いてある、プログラムを使う」
という、指定ができるのです。
わざわざ、誰かが書いたプログラムをすべてコピーしてこなくても、上記の1行を追加するだけで、他人のコンピューターから、プログラムの部品を読み込んで使わせてもらうことができるのです。
その他にもJavaScriptには、高度な「3Dグラフィクス」を私たちにも利用しやすくした「Three.js」と呼ばれる部品など、様々な便利な「部品」が用意されており、私たちはその「URL」をプログラム内で指定するだけで、その素晴らしいプログラムの部品たちを、使うことができるのです。
まとめ

如何だったでしょうか。
「車輪の再発明」という言葉の意味と、その背景、理解していただけたでしょうか。
「誰かがすでに発明したものを、もう一度発明し直すなんて、時間の無駄だ!」というニュアンスが込められたこの言葉…
その背景には、近年のソフトウェア開発における「オープン」な思想が反映されているんですね。
もしあなたがソフトウェア開発を行う機会があれば、ぜひとも、世界中のスーパープログラマー達が作った、スーパーな部品を使いこなしながら、効率よく素晴らしいソフトウェアを作成したいものですね。
本記事が、皆様の学習の助けになれば幸いです。
最後まで読んで下さり、ありがとうございました。
コメント