ソースコードを読むとき検索する術を身に着けておくことが重要です。
関数を呼び出す箇所がわかったとしても、その関数の中身を読もうと思うならコーディングされている位置を探しだす必要がありますし、特定の変数を追跡するときも'探す'という行為が繰り返されます。ときにはコードリーディングの対象となるソフトウェアそのものを見つけなければなりません。そのような場合、様々なソフトウェアを知っているという経験も必要になってきます。
本書はコード リーディングにつきまとう検索行為を助けてくれるツールを紹介します。
slocate はあらかじめ作成されたシステム上のファイル一覧データベースから、指定した文字を含むファイルやディレクトリを検索して表示してくれます。
筆者はあるとき AWK スクリプトについて知りたくて、.awk 拡張子をもつファイルを探すために slocate を使いました。システムに存在するであろうファイルの検索には slocate が高速で使い勝手もシンプルで良いです。
grep を使えば正規表現を用いて、ファイル内からパターンにマッチする行を探すことができます。
あるディレクトリ以下のファイルを手当たり次第調べたいときに $ grep -r foobar * とすることがよくあります。
find は指定ディレクトリから条件にマッチするファイルやディレクトリを検索できます。slocate と似ていますがデータベースがいらないので目的のファイルをいつでも探しだすことが可能です。ただし処理速度は遅いです。
find には強力なオプションがいくつもあるのですがコードリーディングに用いるなら「ファイル名にXXXを含むファイルを探したい」というときに便利です。
筆者はソートアルゴリズムの実装が glibc にあると予想して find . -name "*sort*" で検索してみたところ見事にクイックソート(qsort.c)を発見した経験があります。
diff は2つのファイルの違いを探すためのツールです。ソースコードを読むだけの場面ではあまり用いないツールですが、コードを変更した時にオリジナルのコードとの差分を確認するのに非常に強力な助けとなります。
vim は定番のテキストエディタ vi のクローンです。vi よりも機能豊富で Emacs と共に Unix 系 OS には欠かせないツールです。
テキストエディタそのものがコードリーディングに欠かせないのはもっともなことですが、ひとつのエディタを究めることが重要です。ここでは(筆者自身が vim を使うこともあって) vim だけ紹介しますが、ひとつのテキストエディタを使いこなせるようにがんばりましょう。
世界的に有名な検索エンジン Google。説明するまでもなくインターネットで何かを探すときには定番のサービスです。
以外と知らないのが検索コマンドと呼ばれる検索結果を絞りこむためのクエリで、例えば filetype コマンドはファイルの種類を指定した検索が可能になります。
検索コマンドは使い込む程にその良さがわかるのですが、使いこなすのも一苦労かと思いますので「Google Hacks 第3版 ―プロが使うテクニック & ツール 100選」を読んでみると良いでしょう。
Koders はソースコードを検索対象とする検索エンジンです。詳しくは(オープン)ソースコードの高速検索をご覧ください。
Krugle もソースコードを対象とする検索エンジンです。コードの検索に加え、関連ドキュメントやプロジェクトの検索も行えます。さらにユーザー アカウントを取得すれば検索結果に注釈を残すこともできます。
複雑なソースコードを読むときに記憶の断片を残しておくのに紙とペンは欠かせない。筆者はマインドマップでメモします。
技術書を読めるだけ読んで知識をため込んでおくと、その記憶は後々重宝します。
どうしてもわからないときは人の助けが一番ありがたいです。