はじめに

ソースコードを読むとき検索する術を身に着けておくことが重要です。

関数を呼び出す箇所がわかったとしても、その関数の中身を読もうと思うならコーディングされている位置を探しだす必要がありますし、特定の変数を追跡するときも 探すという行為が繰り返されます

ときにはコードリーディングの対象となるソフトウェアそのものを見つけなければなりません。 そのような場合、 様々なソフトウェアを知っている という経験も必要になってきます。

この文書ではコード リーディングにつきまとう検索行為を助けてくれるツールを紹介します。


Unix 系 OS で使えるツール

slocate

slocate はあらかじめ作成されたシステム上のファイル一覧データベースから、指定した文字を含むファイルやディレクトリを検索して表示してくれます。

筆者はあるとき AWK スクリプトについて知りたくて、.awk 拡張子をもつファイルを探すために slocate を使いました。 システムに存在するであろうファイルの検索には slocate が高速で使い勝手もシンプルで良いです。

grep

grep を使えば正規表現を用いて、ファイル内からパターンにマッチする行を探すことができます。

あるディレクトリ以下のファイルを手当たり次第調べたいときに $ grep -r foobar * とすることがよくあります。

find

find は指定ディレクトリから条件にマッチするファイルやディレクトリを検索できます。 slocate と似ていますがデータベースがいらないので目的のファイルをいつでも探しだすことが可能です。ただし処理速度は遅いです。

find には強力なオプションがいくつもあるのですがコードリーディングに用いるなら「ファイル名にXXXを含むファイルを探したい」というときに便利です。

筆者はソートアルゴリズムの実装が glibc にあると予想して find . -name "*sort*" で検索してみたところ見事にクイックソート(qsort.c)を発見した経験があります。

diff

diff は2つのファイルの違いを探すためのツールです。 ソースコードを読むだけの場面ではあまり用いないツールですが、コードを変更した時にオリジナルのコードとの差分を確認するのに非常に強力な助けとなります。

vim

vim は定番のテキストエディタ vi のクローンです。 vi よりも機能豊富で Emacs と共に Unix 系 OS には欠かせないツールです。

テキストエディタそのものがコードリーディングに欠かせないのはもっともなことですが、ひとつのエディタを究めることが重要です。 ここでは筆者自身が vim を使うこともあって vim だけ紹介しますが、ひとつのテキストエディタを使いこなせるようにがんばりましょう。

インターネット サービス

Google

世界的に有名な検索エンジン Google 。 説明するまでもなくインターネットで何かを探すときには定番のサービスです。

以外と知らないのが 検索コマンド と呼ばれる検索結果を絞りこむためのクエリで、 例えば filetype コマンドはファイルの種類を指定した検索が可能になります。

検索コマンドは使い込む程にその良さがわかるのですが、使いこなすのも一苦労かと思いますので「 Google Hacks 第3版 ―プロが使うテクニック & ツール 100選 」を読んでみると良いでしょう。

Koders

Koders はソースコードを検索対象とする検索エンジンです。 詳しくは (オープン)ソースコードの高速検索 をご覧ください。

Krugel

Krugle もソースコードを対象とする検索エンジンです。 コードの検索に加え、関連ドキュメントやプロジェクトの検索も行えます。

万能ツール

紙とペン

複雑なソースコードを読むときに記憶の断片を残しておくのに紙とペンは欠かせない。 筆者は マインドマップ でメモします。

書籍

技術書を読めるだけ読んで知識をため込んでおくと、その記憶は後々重宝します。

どうしてもわからないときは人の助けが一番ありがたいです。


最終更新日: 2015年05月16日(土)


Back to top