160513why open source is growing

写真拡大

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

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

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

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

ではこれらオープンソースコードのうち、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しかサポートしていないが、指数関数的膨張を続けるオープンソースコードの利用やシェアを可能にするためのオープンな技術だ。

(ReadWrite Japan編集部)

ReadWrite Japan編集部
[原文]