お使いのブラウザは最新版ではありません。最新のブラウザでご覧ください。

CNET Japan ブログ

ソースコード検索エンジンがもたらす価値とは

2004/11/17 09:29
  • このエントリーをはてなブックマークに追加

プロフィール

umeda

シリコンバレーで経営コンサルティングを行なう傍ら、ベンチャーキャピタリストとしても活躍する梅田望夫さんが、IT業界の先を読むのに役立つ英文コンテンツを毎日紹介していきます。これを読めば、英語と業界動向を読む力が同時に身に付くはず(このブログの更新は2004年12月30日で終了しました)。
ブログ管理

最近のエントリー

[ゲスト] 高林 哲 Satoru Takabayashi
11月15日(月)〜11月18日(木)までの間、梅田望夫さんの代わりに高林哲さんがゲストブロガーとして登板します。

高林さんのプロフィール:産業技術総合研究所研究員。2004年 IPA未踏ソフトウェア創造事業開発者。1997年に全文検索システムNamazuを開発。以来、多数のフリーソフトウェアを開発している。趣味はバッドノウハウ

 ・高林哲のWebサイト
 ・いやなブログ

昨日はソースコード検索エンジンがなぜ必要かという背景と、現在私が開発に取り組んでいるgonzuiというプロジェクトの概要を紹介した。今日は、ソースコード検索エンジンがもたらす価値と、ソースコード検索エンジンが通常の検索エンジンと異なる点について述べ、このテーマをまとめたい。

ソースコード検索エンジンがもたらす価値

昨日の記事では、「プログラムを書いていると、他の人が書いたソースコードを参考にしたいときがよくある」ゆえにソースコード検索エンジンが必要であると述べた。この説明は、プログラマには通じやすいが、他の人にはなかなか伝わりにくい。理屈抜きで豪快に言ってしまえば、 Googleがウェブの利用者にもたらしたのと同様の価値をオープンソースの開発者にもたらすのがソースコード検索エンジンである。

と、はたしてそこまで言い切ってしまっていいものか疑問が残るが、ともあれ、ここではソースコード検索エンジンがもたらす価値について考えてみたい。

私のプロジェクトのゴールは、世界中のオープンソースのソフトウェアのソースコードを検索可能にし、求めているソースコードをすばやく見つけ出せるようにすることである。この目標が達成されると、他人のソースコードを参考にしながらプログラミングするのが容易になり、生産性の向上がもたらされる。それと同時に、他人のソースコードからノウハウを学ぶ機会が増える点も重要である。

ビル・ゲイツも

「You've got to be willing to read other people's code, then
write your own, then have other people review your code.」

と言っているように、他人のコードを読むことはプログラミングに上達する秘訣である。しかしながら、これを実践している人はあまり多くない。私も大切だ大切だと思っているほどには実践していない。実践が難しい大きな理由のひとつは、参考にしたいソースコードを探すのが非常に大変ということである。ソースコード検索エンジンはこの問題を解決する。

インターネット上には莫大な量のオープンソースのソースコードが公開されている。これらをノウハウの宝庫として活用できれば、オープンソース開発の生産性を大幅に向上できる。また、コードを読むことによる学習効果によって、オープンソース開発者全体の技術レベルの底上げにもつながると考えている。

ここまでの説明ではオープンソースに焦点を当ててきたが、gonzuiをローカルに設置すれば、企業や大学内などのクローズドなソースコードを対象とした検索エンジンとして使うこともできる。gonzuiは、スタンドアロンのソフトウェアとして低い導入コストで設置できることをひとつの設計目標としている。Unixベースのサーバがあれば簡単に動かせる。将来的にはWindowsへの移植も予定している。

gonzuiはこれまで私が開発してきたソフトウェアと同様に、オープンソースのソフトウェアとして公開する予定である。

ソースコード検索エンジンと通常の検索エンジンの違い

さて、ここからちょっとテクニカルな内容に移り、ソースコード検索エンジンが通常の検索エンジンとどのように異なるかについて述べたい。

ソースコードとは、 ソフトウェアの原形のようなもので、C言語やJavaといったプログラミング言語によって記述される。たとえば、 hello, worldと表示するC言語のプログラムは次のようになる。

/*
* hello, world と表示するプログラム
*/
#include
int
main ()
{
printf("hello, world\n");
}

上の例を見るとわかるように、ソースコードは通常の文書とはずいぶん異なる見た目を持っている。具体的には次のような特徴がある。

  • 記号が多い。一見して気が付くのは、 / * # < > ( ) { } " \ ; などの記号が多用されていることである。
  • 文法が特殊。日本語や英語などの自然言語と異なり、プログラ ミング言語では上記のような記号を多用した文法が用いられる。

このように、ソースコードは特殊な文法によって記述されているため、ソースコード内の構成要素を明確な種類に分けることができる。上の例では /* 〜 */ の部分はコメント、 int main () { 〜 } の部分は関数定義、printf(〜) の部分は関数呼び出し、 "hello, world\n" の部分は文字列と分類できる。

このようなソースコードの特徴を解析して検索に役立てるところがソースコード検索エンジンのミソだ。たとえば、printfという関数の定義を知りたいときに、 printfの関数呼び出しばかり見つかっても嬉しくないが、関数定義と関数呼び出しを区別できれば、こうした問題は解消できる。

ソースコード検索エンジンが通常の文書を対象とした検索エンジンと異なる点は、主にこの辺りの特徴をどう扱うかにある。検索結果のランキングも文書の重要度ではなく、コードの重要度に基づいて行う必要がある。gonzuiでは、オープンソースのソフトウェアのプロジェクト間の関連性を元にランキングを行う方法を検討している。他にも、検索結果の表示方法など、ソースコードの特徴を念頭に検討しなければならない点は多い。

昨日から2日間に渡って、現在私が取り組んでいるソースコード検索エンジンのプロジェクトについて紹介した。ゲストブログ最終日である明日はソースコード検索エンジンから離れて、もっと気楽な話題を取り上げたい。

※このエントリは CNET Japan ブロガーにより投稿されたものです。朝日インタラクティブ および CNET Japan 編集部の見解・意向を示すものではありません。
運営事務局に問題を報告

最新ブログエントリー