2014年6月24日
車輪の再発明
本記事は、原著者の許諾のもとに翻訳・掲載しております。
3日間にわたり、第3回 Citizen Cyberscience Summit に参加してきました。これまでで最大規模となった今回は参加人数だけでなく、大勢の人たちが生み出した新規プロジェクトの数にも満足できるイベントでした。
いくつか講演やワークショップをのぞけば今のトレンドが分かります。 様々なグループが「車輪の再発明」をしていました。 そこで議論になるのは、やはりその 良し悪し でしょう。
話を進める前に白状しておくと、私も個人的にシチズンサイエンスを活かした”もう1つの”フレームワークを開発しています。つまり、それなりに車輪の再発明に貢献しているわけです。
私にとって車輪の再発明は珍しいことではありません。Red Hat 5.2以来のGNU/Linuxユーザですし、オープンソースコミュニティでは同じ議論を何度も見てきました。「次のウィンドウマネージャ?今年こそGNU/Linuxでしょう」といった具合に。
実際にのぞいてみたいなら、オープンソースプロジェクト名をGoogleで検索し、メールのリストを探してみてください。きっと激論が交わされているはずです(最近はSystemDとUpstartをめぐって、 こちら や こちら のような視点から議論になっています)。
私はこうした議論には慣れているものの、今回のサミットに参加するまで車輪の再発明の是非など深く考えたことはなく、会場でもこんな会話をしていました。「誰もが車輪の再発明を非難しているけど、自分たちは独自の車輪を作り、 “これこそが車輪だ” と世界に訴えているのだ」と。
しかも 誰もが、車輪の再発明を悪いことのように捉えています。本当にそうでしょうか。 じっくり考えたことはありますか?
車輪の再発明 は似たようなことを繰り返す作業なので、 エネルギーとリソースの無駄遣い だ、との主張はよく聞きます。いっそのこと分散している労力を1箇所に集中させ、より完成度の高いソリューションを目指すべきだというのが、反対派の主張です。
皆さんはどう思いますか? 時間とエネルギーとリソースの無駄遣いでしょうか? まあ、確かに無駄遣いでしょう。でもそれが車輪の再発明をやめる理由になるとは思えません。
実はここ3日間ずっと考えていて気づきました。この問題を論じるのは、 進化論 を語るのと同じことのように思えるのです(ダーウィンに感謝!)。
そう、読み間違いではありません。あの進化論です。
適当にトピックを選んでみましょうか。あくまで適当ですからね。「シチズンサイエンス」はどうでしょう。ここに隠れている問題は、「シチズンサイエンスを活かしたフレームワークの開発」です。
シチズンサイエンスを活用して最高のフレームワークを開発するのは大変でしょう。ソリューションを見つけ出すのは複雑ですごく難しいはず。
例えば完璧なフレームワークが存在するとします。でもどこに存在するのか、どんな様子なのかも分からないので、探そうにも探索空間はとんでもない大きさに感じられます。ソリューションを見つけるなんてほぼ不可能にも思えますが、なかには自分たちで独自のソリューションを構築しようとする人たちも現れるでしょう。
最初のグループが新たに構築したもの、つまり最初のバージョンは最高の出来にはなりません。多くの機能が欠けていて不具合も多く、コミュニティ(ゼロ世代)はとても小さい。そして彼らがソリューションを開発している間に、そうとは知らない別のグループが類似のものを開発し始めます。両方が同じゴールを目指していれば似たようなソリューションが完成するでしょう。そうなれば同じ 構成要素 を持ち、車輪の再発明と同じことになります。
でも実際には同じ構成要素を持っていても、2つのプロジェクトがまったく同一というわけではありません。 それぞれプロジェクトの進め方や採用されている技術、周辺のコミュニティなどには独自の特徴があります。
要するに2つの個体(もしくは2つの解の候補)がシチズンサイエンスの分野で 生き残り を懸けているのです。どちらが最適な解か知るために、両者を比較できる適応度関数というものがあります。つまり 「持続可能性」 のことです。この時点で 進化的アルゴリズム の話だとお気づきかもしれませんね。純粋な進化的アルゴリズムでは次世代により良い解を残すため、解の候補は一緒に育てられ、新たな子孫が作られていきます(交叉と突然変異の操作)。
これをソフトウエアの観点から見ると、状況はもう少し複雑です。でも一方のフレームワークに欠けている機能を実装すれば、進化的アルゴリズムの再現は可能でしょう。その機能は優秀なソリューションだと証明済みだからです(交叉操作)。その一方で競合相手との差別化を図るために、新たな機能も開発されます(突然変異操作)。両方のアプローチが100パーセント同じというわけではありませんが、類似点はあるでしょう。ユニークな存在であるために新たな機能を加えつつ、競争で勝ち残るためにすべてのプロジェクトは似たようなソリューションを実装するのです。
つまりこうした観点から、あらゆるフレームワークのすべての機能は、 「フレームワークの形質もしくは遺伝的特徴」 だと言えます。進化論について、こう学びましたよね。 「遺伝的変異がなければ、個体群は環境変数の変化に応じて進化できず、その結果、絶滅の危機が高まるだろう」
さらに、最近では 遺伝的多様性の損失が種の多様性を脅かす という研究も発表されています。リチャード・ランカウ博士はこう言っています。「種間の多様性を維持するには種内の多様性が必要であり、また種内の多様性を維持するには種間の多様性が必要である。もし一方が生態系から取り除かれたらサイクルは崩れ、コミュニティは単一種で占められてしまう」
この方程式に、「 遺伝的多様性は、種が生き残るうえで重要な役割を果たす (参照: リチャード・フランクマン博士の論文 )」と加えれば、 似たようなフレームワークを持ち、問題解決を図るのは決して悪いことではない、むしろプラスではないかと思えるのです。
これは あくまで個人的な考えですが 、要するに車輪の再発明は、フレームワークに必要な遺伝的多様性(様々な機能)を守るひとつの手段とも言えます。だったらその種は生き残れますよね。皆さんはどう思いますか?
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa