このページは、オープンソースマガジン2006年4月号の連載「ハッカー養成塾!」に寄稿した記事の校正前の版です。
|
|
最近になってハッカーの人達と仲良くしてもらえるようになり、おこがましくも本誌に記事を載せてもらえるまでになってしまった。でも、僕自身はいわゆるハッカーの典型とはかけはなれた存在だ。数学が苦手で因数分解もできないし、学校で計算機科学の教育を受けたこともないし、PCの自作や収集にも全く興味がないし、ハッカー達のイベントで活躍することもない。そんな僕でも少しばかり注目してもらえるようになったのは、やはり自作のソフトウェアが多少なりともヒットしているからだろう。
オープンソース開発は実に素晴らしい。何の元手がなくても、PC1台さえあれば開発が始められる。年齢、性別、国籍、職業、経歴などに一切縛られることなく、腕だけで勝負できる。いや、腕に覚えがなくても、痒いところに手が届くアイデアが偶然思いつきさえすれば、ヒット作品を生み出すことができる。つまり、チャンスは誰にでもあるということだ。歴史に名を残す偉大なハッカーになるには才能と境遇と幸運が必要なんだろうけれど、彼らについて僕は知らないし、あまり興味もない。ただ、自分の役に立ったり友達を喜ばせたりするくらいのものなら、どうやら僕にも作れるらしいことはわかってきた。
月並だが、ハックを楽しめることこそがハッカーの素質だと思う。自分が手を入れたプログラムが動いた時には「おお!」という感動があるだろう。僕にもそれがあったので、趣味としてだけどプログラミングを続けてきている。ところで、自分にとって興味が持てるような題材を見つけることが、プログラミング上達の近道だと思う。単にプログラミング言語を覚えるだけでは退屈だし、目的もなく動くプログラムよりも何らかの課題を解決するプログラムの方が愛着が持てる。題材さえ見つかれば、あとは、その題材に適した言語を覚えて、必要なアルゴリズムを研究して、開発環境やライブラリに慣れていけば、楽しいプログラミングライフが送れるようになるだろう。
僕の題材は全文検索だった。Namazu(*)という全文検索システムを見ていて自分でも作ってみようと思ったのがきっかけだ。最初に作ったのは、Snatcherという全文検索システムだ。Snatcherの内部ではGDBM(*)というデータベースライブラリを使っていたのだが、その性能と品質に限界を感じたので、次にデータベースライブラリを自分で作ろうと思った。そして、苦心の末に出来上がったのがQDBM(*)だ。かのGNUの製品であるGDBMを置き換えるとは我ながら大胆な試みだったけれど、結果的にはよいものができた。自分も捨てたもんじゃないなと思い、この成功体験からさらにプログラミングにのめり込むようになった。
同時期に、QDBMの性能を最大限に活用すべく、全文検索システムEstraier(*)を作った。QDBMとEstraierはsourceforge(*)やfreshmeat(*)で海外にもアナウンスし、それなりの数のユーザを得ることができた。世界進出のためには、ソースコードのコメントを英語で書いたり、英語のマニュアルを揃えたり、各種のプラットフォームへの移植性を向上させたり、Autotools(*)を採用したりといった、オープンソースソフトウェアとしての標準的な体裁を整える必要があった。最初はそれらの勝手が全くわからなかったが、ユーザからのフィードバックを少しずつ反映させていくことで、何とかなっていった。
Estraierの開発が一段落した頃に、IPAの未踏ソフトウェア創造事業(*)というものを知った。ソフトウェア開発の企画書を送って採用されると、開発費の援助やPM(*)の指導が受けられるという制度だ。Estraierにもまだまだ改良の余地があったので、設計から一新してP2Pの分散機構を備えた全文検索システムを作ると豪語したところ、採択の通知が送られてきた。選ばれたからには期待に応えねばということで、会社を半年間休職して、全文検索システムHyper Estraier(*)を完成させた。これは我ながら満足できる出来栄えで、自分の代表作と言われても悪い気はしないというところまでは来ている。現在は、QDBMやHyper Estraierの改良を細々と続けつつ、新たな課題を探している。
全文検索はプログラミング修行の題材として絶好のものだと思う。データベース、ネットワーク、自然言語処理、ユーザインターフェイスなどの様々な分野の技術の総合だからだ。それらを網羅的に勉強してもいいし、興味あるものに注力しても楽しい。新しい製品を一からスクラッチしてもいいし、既存の製品のどこかの機能だけハックすることもできる。全文検索は普段から良く使う機能なので、自分で使いやすさを実感できるのもよいところだ。ひとつ機能を加えるたびににちょっと使いやすくなる。ひとつアルゴリズムを修正するたびにちょっと速くなる。時に大幅に進歩したり、時に挫折したりする。そういう積み重ねのうちに技術の幅が広がっていくのだ。
企業や研究室の一員としてひたむきに製品開発に携わる、名も無きハッカーも多いことだろう。著名なハッカーも脱帽するような技術を持つ人が各種の分野にごまんと潜んでいるはずだ。しかし、ハッカーにかかる連体修飾語は、何と言っても作品名やプロジェクト名だ。所属組織名ではなく開発者の個人名が前面に出て来ることがオープンソース開発の特徴のひとつだ。男や女が名を上げるのに絶好の舞台だと僕は思う。「QDBMとHyper EstraierのMikio Hirabayashi」が世間的にハッカーと認められるかどうかは怪しいところだが、そんな時は、「自分は趣味でやってるだけっスから」とか謙遜しておけばいいのだ。自分がプロジェクトの中心人物ではない場合は、「エバンジェリスト」とでも言っておけば格好がつくかもれしれない。
オープンソース開発を始めるのは簡単だ。面白い課題を見つけたら、その課題を解決するプログラムをせっせと作るだろう。あとはそのソースコードにREADMEをつけてパッケージを作って公開すれば、もう立派なオープンソース開発者だ(*)。オープンソースならではのマナーはそれだけで1冊の本が書けるくらいあるらしいが、そんなものは走りながら身につけていけばいい。僕もまだまだいろんな人にクレームをつけられる身だけれど、それでも喜んでくれる人の方が多い。オープンソース開発を続けていれば、他のハッカーと交流するなかで新しい技術を学んだり、インスピレーションを受けたり、モチベーションを高めたりもできる。自分の技術に目をつけてくれた人にヘッドハントされて、現職より待遇がよくやりがいのある職場に移れる可能性もある(*)。また、ユーザから様々なフィードバックを受け取って作品と自分のセンスを高めていけるし、ユーザから感謝されるとそれだけで嬉しいものだ。失うものは何もない。躊躇せず、まず走り出そう!
オープンソース開発を選択すると自分の技術をビジネスや金儲けに結びつけづらくなると危惧する人も多いらしい。しかしそれは、捕らぬ狸の皮算用というやつだ。単体の技術だけでビジネスが成立することはまずありえない。実際の製品や案件では、複数の要素技術を深い洞察を持って組み合わせることが必要になるが、その能力は属人的なものなのだ。例えば、Hyper Estraierはなかなか高性能な検索エンジンだが、それだけでは売りものにはならない。検索サイトを作るにしても、Webからデータを収集する機能やストレージの管理システムと組み合せる必要があるが、それらのインテグレーションには、検索エンジンを作る以上の苦労が必要だ。Hyper Estraierについては僕がそのノウハウを誰よりも持っていて、インテグレーションやカスタマイズやエンハンスを誰よりもうまくできるという優位性は、ソースを公開しても揺らがないのだ。ビジネスに必要な全ての要素を共有地に置く必要はないけれど、出せるものを出していくというのは合理的な戦略の一つだ。偉い人にはそれがわから(以下略。
自分に合った課題を見つけて、必要な技術を適宜勉強しつつ、楽しくプログラミングをしていこう。作ったプログラムは世に広く公開して、フィードバックを吸収しつつ、さらに精進を続けよう。そうすれば、いつの間にかハッカーと呼ばれるようになっているかもしれない。
次回の講師は、qwikWebの作者でメディア・アーティストとしても活躍されている江渡浩一郎さんにお願いしよう。