RHELを題材にソースが見える環境を作る

2009年3月5日(木)
大和 正武

普段から備えておき、コード読解力を鍛える

 sources環境の導入によって、何が変わったでしょうか。

 あたり前のことですが、問い合わせを受けてから回答するまでの時間が短縮しました。ソースコードの復元までにかかっていた時間が0になったというのは、短縮された時間の一部にすぎません。それよりも問い合わせの内容からわいた好奇心を維持して高い集中力でソースコード読解に取り組めるようになったことが時間の短縮に大きく貢献しています。図3は環境導入後の問い合わせを受けたときのやる気の変化です。最初に紹介した図1と比べれば変化は一目瞭然(りょうぜん)ですね。

 さらに、ソースコードを読む習慣が身につきました。この仕事を始めるまで、ソフトウエアを改良する上で必要なとき以外にソースコードを読むことはほとんどありませんでした。sources環境があれば、回答を作成する上での疑問点について、ストレスなく納得するまで調べることができます。トラブルの原因にいきなり行きつくことがなくとも、読解の過程でさまざまな知見が得られます。ついつい回答の作成上は必要のないところまで踏み込んで調べるようになってしまいました。

sources環境のディレクトリ構造の注意点

 さて、手元にソースコードを置いておくメリットを感じていただけたでしょうか?業務で参照するソースコードをファイルシステム上に展開するときは、何よりもディレクトリ構造にこだわってください。sources環境は3回作り直しました。以下にディレクトリ構造を設計する上で考慮すべき点を挙げます。

 1つ目は、ディレクトリが直感的かどうかです。大量にあるソースコードがそれぞれどのディレクトリにあるか、利用者が直感的にわかるように配置してください。すべてのソースコードを配置してしまう前に、ほかの人に感想を聞くことをお勧めします。

 2つ目は、利便性を犠牲にしていないか、ということです。あまりディレクトリ階層を深くしすぎると、ソースコードを指定するためのファイルパスが長くなり入力するのが面倒です。

 3つ目は、拡張性はあるか、ということです。ソフトウエアがバージョンアップする以上、配置すべきソースコードの数は増えます。将来、その数が増えてもディレクトリ構造の変更なしにそれらをうまく配置できるでしょうか?一度あるディレクトリ構造にユーザーが慣れてしまうと、その変更は嫌がられます。

 ソースコード読解の補助に使うファイル(読解補助ファイル)についても配置できるような構造にしておきましょう。読解補助ファイルの例にソースコード中のシンボルの定義場所を検索するために作るインデックスファイルがあります。ソースコード復元時に一緒にインデックスファイルを作っておけば、sources環境では、pluginsというディレクトリをパッケージごとに用意しています。現状ではそこにetagsコマンドの出力するTAGSファイルを置いています。

 4つ目が1つのディレクトリが大きくなりすぎていないか、ということです。1つのディレクトリに多数のファイルを配置すると、そのディレクトリに対する(lsコマンドの実行など)ファイル一覧の取得に時間がかかるようになります。

 拡張性を確保しようとするとディレクトリ階層が深くなり、利便性が犠牲になります。ディレクトリ階層が浅いとファイルパスは短くなりますが、拡張性が落ち、ディレクトリにたくさんのファイルを配置することになります。ただし利用者がファイルパス補完機能のあるシェルやエディターを使っていると仮定できるなら、拡張性を優先できます。sources環境はそれを仮定しています。

 sources環境と同じディレクトリ構造でFedora 10 Everythingのソースコードを展開してWebサイト(http://srpmix.org/)に置いてみました。Webブラウザを使ってsources環境の雰囲気を体験できます。例えば、以下のようなものがあります。

・bashの内蔵コマンドcdとpwdの定義
http://srpmix.org/sources/b/bash/3.2-29.fc10/pre-build/bash-3.2/builtins/cd.def
・linuxカーネルのスケジューラ
http://srpmix.org/sources/k/kernel/2.6.27.5-117.fc10/pre-build/kernel-2.6.27/linux-2.6.27.x86_64/kernel/sched.c
・mod_rewriteのコード
http://srpmix.org/sources/h/httpd/2.2.10-2/pre-build/httpd-2.2.10/modules/mappers/mod_rewrite.c
・rubyの文字列オブジェクトの定義
http://srpmix.org/sources/r/ruby/1.8.6.287-2.fc10/pre-build/ruby-1.8.6.287/ruby-1.8.6-p287/string.c

 あのオープンソースソフトウエアの不思議な動きの秘密は全部srpmix.orgにあります。みなさんも、コード探検を楽しんでください。

レッドハット株式会社
レッドハット株式会社 グローバルサービス本部 プラットフォームソリューショングループ GPSコンサルタント。博士(工学)。(無料ではなく自由の意味での)フリーソフトウエア、データとしてソースコードを活用する技術、ヒューマン/コンピューターインタラクション、Lisp/Scheme/S式に関心を持つ。http://www.jp.redhat.com/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています