もしギリシャのシシュフォス王が2016年に生きるオープンソースの開発者だとしたら、彼は現状に懐かしさのようなものを感じるかもしれない。

シシュフォス王が神から課せられた有名な罰として、巨大な岩球を丘の頂上まで押し上げて転がり落ちることを永遠に繰り返すというものがある。誰もほとんど気づかないうちに、世界中の開発コミュニティはここ数年で自分たちをシシュフォス王と同じような状況に追い込んでしまっている。1つ異なる点があるとすれば、今回の場合の<岩球>は大きくなり続けているという点だろう。

米国議会図書館は約2400万冊の蔵書を誇る、数千年にわたる人智の世界最大級の集積所である。

GitHubは2009年に設立され、いまでは無数のコードを抱えるライブラリやレポジトリが3500万以上ある。これは指数関数的増加をたどっており、14ヵ月程度で規模が倍になっているという。オープンソースコードが今日のプログラミング技術において最先端のものであることは疑いようが無く、人類がこれまでに作りあげたなかで、もっともパワフルで先進的な叡智の1つだ。新たなフレームワークは業界のベンチマークであり、オープンソース開発者たちはロックスターのようとでも言えよう。

では、これらオープンソースコードのうち、90-98%は12ヵ月もたてば見向きもされなくなるというのはどういうことだろうか?

 

緻密化するコード

まず、私が見たなかでも衝撃的だったことを取り上げてみよう。それは、はじめてコードが書かれた日から1年後、そのレポジトリの90%は誰にも見向きされることなければ、ふたたび使われることもないという事実だ。

活気がなくなり時代遅れとなったそれらは、やがて時間とともに忘れられていく。Stack Overflowが2015年におこなったアンケートでは、一般的な開発者たちは仕事以外にも週7時間を個人的な開発に費やすという。また、GitHubによると、1200万のユーザがオープンソースプロジェクトに携わっているという。そのなかで数百万近くの優秀な人々の時間は浪費され、人間性もどこかに追いやられるのだ。

どこがおかしいのだろうか? それは、誰もこの現状に疑いを持っていないことにある。

なぜ過去に書かれたオープンソースコードの大多数は忘れ去られてしまうのか? なぜオープンソースコードのどこかに目的を満たすコードはあるはずなのに、毎日毎日同じようなコードが新しいふりをして何度も書かれ続けるのか?

こうなる原因は主に、人々はレポジトリのことを<レポジトリそのまま>としか見ていないからであると考える。誰でもAngularJS、JQuery、Reactのことは知っているが、オープンソースパッケージを10個以上分かっている人は少ない。これがおかしいのだ。なぜなら、人々はパッケージについてすべてを知っているわけでも使うわけでもない。また、その中のコードを一部抜き出して有効的に活用することもない。

2015年に書かれたパッケージはまるごと有用ではないかも知れないが、その中の一部に必要とする機能は含まれているかもしれないのに、だ。パッケージ全体が役立つとは限らず、ときにはその中に含まれる一部のコードがまさに求めるものであるかもしれない。

たとえば、配列の中身をシャッフル、あるいはランダムな文字列を生成するJavaScriptの関数を探していたとする。これらの小さなコードはオープンソースのそこら中にごまんと散らばっているが、誰もそれが存在することを認識していない。認識していたとしてもそれを探す方法を知らない。

つまり、数えきれないほどの貴重な知恵が、見つけられないというだけのことで捨て去られ、忘れられていっているのだ。これはまともなことではなく、何のためにもならない。

 

コードを整理し、アクセスしやすくする

では、どうすればいいのだろう? 答えは簡単だがおこなうのは簡単なことではない。以下3つのことを守る必要がある。

  1. すべてのソースを機能毎に関数やライブラリなどに整理する
  2. すべてのピースがそれぞれ何の機能を持っているのかを表すようなモデルを作る
  3. これらのコードを探し出す簡単かつシンプルな方法をつくる

これが、我々が『Cocycles』をつくった理由だ。Cocyclesは、上記3つをすべておこなうものだが、まだ開発中である。アルゴリズムにより膨大な量のオープンソースコードを解析し、それぞれの行や関数、その他の単位の機能を理解する。これによりユーザは簡単な英語を使ってコードを探すことができるようになる。

前述の例を挙げると、ユーザは単純に「shuffle array」とか「create random string」と入力すれば、さまざまなオープンソースコードの実装やドキュメント、使い方の例などが提示される。また、それを使うための依存モジュールやサブ関数なども一緒に提供されるようになる。

将来、おそらくは数年後には、人工知能がこれを使って自分でコードを探しだし、自身を成長・進化させるようになるかも知れない。いまのところは、Javascriptしかサポートしていないが、これは指数関数的膨張を続けるオープンソースコードの利用やシェアを可能にするためのオープンな技術である。

Pocket