自分の記憶頼りにレビューしていないか?

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

メモツールの仕組み

 Emacsをお使いの方であれば、SourceForge(http://srpmix.svn.sourceforge.net/viewvc/srpmix/stitch/trunk/)からstitch.elを入手してすぐに試すことができます。ただし、筆者はGNU/Linux上でのみ開発、利用しているので、Windows上のEmacsで期待通り動作するかどうかわかりません。お使いのエディターがEmacsでなければ、ご自身で実装する必要があります。実装時に参考になるように簡単に動作の仕組みを説明します。

 stitch.elでは、ソースコードと独立したファイル(メモファイル)にメモを保管しています。ソースコードのファイル名とメモの挿入個所(行やキャラクターオフセット)をキーに、メモの内容を値に持つ組としてテキスト形式(S式)で記録しています。Emacsにはファイルを開いたときに、登録しておいた任意の関数を呼び出すfind-file-hookと呼ばれる機構があります。この機構を利用して、ソースコードを開いたときに、メモファイルからそのソースコードに対するメモをかき集め、1つ1つ挿入する、という関数を実行します。

 実際のメモの挿入にはEmacsのオーバーレイ機構を用います。オーバーレイ機構を用いるとエディター上の編集対象であるファイルを変更することなく、追加的なオブジェクト(テキストや画像)をファイル上の任意の個所に縫い合わせて表示できます。実装前にお使いのエディターに同等の機能があるか確認してください。同等の機能がなければ、stitch.el相当のメモツールの実装は困難です。

メモツールの応用

 最後にまだ実装を終えていないstitch.elの応用を紹介します。ソースコードを読んでいる自分について考えてみると、読むソースコードこそ違っても、毎度似たことを調べるために似た手順を実行していることに気付きます。そこで、その「似た手順」をプログラム化して、コンピューターに調べさせ、結果をメモとして読解者に報告させる、というソフトウエアを開発中です。

 例を1つ挙げます。エディターのウインドーにおさまらないような、長い関数を読んでいると関心のある変数のスコープを確認したくなることがよくあります。すなわち、その変数がローカル変数なのか、関数の仮引数なのか、同じファイルのトップレベルにある変数なのか、別のファイルで定義されたグローバル変数なのか、ということです。いつも関数の先頭へスクロール、タグジャンプ、grepによる検索などの決まった手順を組み合わせて確認していました。ところが、確認を終えたころにはどこを読んでいたのか思い出せなかったり、思い出せても、読解を再開するためにその場所にカーソルを戻すのが手間だと感じていました。

 そこで、すべての変数について、変数の出現個所すべてにスコープ情報をメモとして挿入するプログラムを開発することにしました。図3はその試作画面です。

 変数の後にメモが挿入されています。出現個所すべてに挿入してもソースコードが読み難くならないよう、スコープの種類を灰色の斜体1文字で表現しています。各文字の意味は、以下のようになります。

・_:ローカル変数
・$:関数の仮引数
・.:同じファイルのトップレベルにある変数
・@:別のファイルにあるグローバル変数

 図3は試作段階のためメモが挿入されていない変数や、間違ったスコープを記したメモもあります。完成すれば、スコープ確認のための手順を踏む必要はなくなり、目の前にあるコードに一層集中できるようになると期待しています。

 統合開発環境におけるメソッド名の候補表示機能など、コードを書くことに対するツールの支援というのは随分と発達、普及しています。対してコード読解に対する支援機能は遅れています。多くの可能性がまだ試されていません。メモをとってソースコードを読むことが習慣化したら、それを読み返して、メモの作成の一部を自動化できないか考えてみると面白いかもしれません。

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

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

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

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

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