メモツールの仕組み

メモツールの仕組み

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

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

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30