Emacs29.3読書メモ 25.大きなプログラムの保守

Emacs Emacs
Emacs

目に着いたところを摘んでみた。ちょっと大きめなプロジェクトの保守について。開発中でも通用すると思うので。

以下について含まれる。

  • VCS(Version Control System)に対する統一されたインターフェースのサポート
  • プロジェクトを扱うためのコマンド
  • 変更経過ChangeLogに特化したモード
  • シンボル定義(“識別子(identifiers)”)を表示するXref
  • Emacs自身のIDEであるEDE
  • バグリファレンスのハイライト、issue tracker(問題追跡システム)内で参照されるバグレポートのvisit
  • Lispの場合にはERT(Emacs Lisp Regression Testing)ライブラリーも参照のこと:SLIMとどう違うのかな?

25.1 バージョンコントロール

これを避けてはなりゆかないとまで思える。僕的にはGitを愛用している。実際のところ、GitHub環境で開発が公開されているので、自分だけ他のを使う意味はない。閉じた環境では自由だが。

EmacsのバージョンコントロールのためのインターフェースはVCと呼ばれる。サポートされているのは、Bazaar、CVS、Git、Mercurial、Mnotone、RCS、SRC、SCCS/CSSC、Subversion。Gitがあれば良いのだが、GNUのディストリビューションにはない。CVS、RCS、Bazaarだけだ。探そう。
見つけた。MagitをMELPA経由でインストールできる。詳しくは別資料で調べよう。
VCの対応はMagitの仕様に任せる。

25.2 プロジェクトで作業する

プロジェクトの表現は通常ディレクトリ構造であり、複数のプログラムやファイルはその階層構造の中に置かれています。この階層のトップレベルのディレクトリをプロジェクトルート(project root)と呼ばれます。

与えられたディレクトリがプロジェクトのルートであるかどうかはプロジェクトバックエンド(project back-end)として知られる、プロジェクト固有のインフラストラクチャーによって判断されます。EmacsがサポートするバックエンドはVCSレポジトリとEDEの2つです。
一応Gitもサポートしてくれているのでしょうが、どうなるのかな。
Magitとの絡みが気になる。

ファイルがプロジェクトに属しているかどうかもプロジェクトバックエンドによって判断される。例えばignordファイルはプロジェクトの一部とは見做さない。この挙動はproject-vc-include-untrackeedで制御できます。

25.2.1 ファイルを操作するプロジェクトコマンド

コマンド一覧だけ。カレントプロジェクト内で。意図するところは分かるね。

コマンド説明
C-x p f属するファイルをvisitする
(project-find-file)
C-x p g全てのファイルにregexpでマッチさせる
(project-find-regexp)
M-x
project-search
全てのファイルに対して対話的にregexpでマッチさせる
C-x p r全てのファイルに対してregexp対話月置換を行う
(project-query-replace-regexp)
C-x p dルートディレクトリにDiredを行う
(project-dired)
C-x p vルートディレクトリでvc-dirを行う
(project-vc-dir)
C-x p sルートディレクトリで下位シェルを開始
(project-shell)
C-x p eルートディレクトリでEshellを開始
(project-eshell)
C-x p cルートディレクトリでコンパイルを実行
(project-compile)
C-x p !ルートディレクトリでシェルコマンドを実行
(project-shell-command)
C-x p &ルートディレクトリでシェルコマンドを非同期実行
(project-async-shell-command)
ファイルを操作するプロジェクトコマンド

25.2.2 バッファを操作するプロジェクトコマンド

カレントプロジェクトを参照しているバッファ単位で操作する。

コマンド説明
C-x p b属する他のバッファに切り替える
(project-switch-to-buffer)
C-x p C-b属するバッファーをリスト
(project-list-buffer)
C-x p k属する生きたバッファをkillする
(project-kill-buffers)
バッファを操作するプロジェクトコマンド

25.2.3 プロジェクトの切り替え

コマンド説明
C-x p pプロジェクトを切り替える
(project-switch-project)
プロジェクトの切り替え

カレントプロジェクトが認識されていない際にプロジェクトコマンドが入力されると、Emacsはプロジェクトディレクトリーの入力を求めます。

何らかのプロジェクト内にいる際に別のプロジェクトを操作したいときには、このコマンドを使います。新しいプロジェクト内で使用できるコマンドのリストが表示される。

25.2.4 プロジェクトリストファイルの管理

コマンド説明
M-x
project-forget-project
project-list-fileから既知のプロジェクトを削除
プロジェクトリストファイルの管理

25.3 変更ログ

Magitとの兼ね合いがあると思う。まだ深く行かない。

25.4 識別のリファレンスを探す

識別子(identifier)とは下記のもの。Lispだけ意識したいが一応全部列挙する。

  • 関数(function)
  • サブルーチン(subroutine)
  • メソッド(method)
  • クラス(class)
  • データ型(data type)
  • マクロ(macro)

このチャプターでは、プログラムのソース、同様に他の種類のテキストの中の、任意の種類のサブユニットの名前を正確に参照するために、“識別子 (identifiers)” という用語を使用します。

識別子をハンドリングするために、Emacsは’xref’と呼ばれる統一されたインタフェースを提供している。xrefはプロジェクトのバックエンドによってメジャーモード固有の条件を取得する。

25.4.1 識別子を探す

grepもできるようなので、あまり気にしない。

25.4.1.1 識別子の照合

xrefの一番重要な働きは識別子の定義を探すことです。

コマンド説明
M-.識別子の最初の定義を探す
(xref-find-definition)
C-M-.
pattern RET
patternにマッチする名前の識別子を探す
(xref-find-other-windows)
C-x 4 . RET最初の定義を他のwindowに表示する
(xref-find-definition-other-window)
C-x 5 . RET最初の定義を他のframeに表示する
(xref-find-definition-other-frame)
M-x
xref-find-definition-at-mouse
マウスでクリックした識別子の最初の定義を探す
M-,履歴を戻る
(xref-go-back)
C-M-,履歴を進む
(xref-go-forwaed)
M-x
xref-etags-mode
etagsを実行している場合(25.4.2.2参照)
識別子の照合

以下省略

25.5 Emacs開発環境

EDE(Emacs Development Ecvironment: Emacs開発環境)はビルド、デバッグなどを単純化するパッケージです。IDE(Integrated Development Environment: 統合開発環境)の機能を幾つか提供します。

今はSLIMEを想定しているので、省略しておく。

25.6 バグリファレンス

省略しておく。

コメント

タイトルとURLをコピーしました