GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Library-Headers.html ・ emacs-doc.conao3.com

D.9 Emacsライブラリの慣用的ヘッダー

Emacsでは、Lispライブラリにおいて特殊なコメントを用いてセクションを区切り、作成者などの情報を記載するという慣習があります。これらの項目に標準的な形式を用いることで、ツール(および人間)が関連情報を抽出しやすくなります。本セクションでは、例を挙げながら、これらの慣習について解説します。

;;; foo.el --- Support for the Foo programming language  -*- lexical-binding: t; -*-

;; Copyright (C) 2010-2026 Your Name

;; Author: Your Name <yourname@example.com>
;; Maintainer: Someone Else <someone@example.com>
;; Created: 14 Jul 2010
;; Keywords: languages
;; URL: https://example.com/foo

;; This file is not part of GNU Emacs.

;; This file is free software...
...
;; along with this file.  If not, see <https://www.gnu.org/licenses/>.

最初の1行は、以下の形式にする必要があります:

;;; filename --- description  -*- lexical-binding: t; -*-

説明は1行に収めてください。ファイル内で ‘-*-’ 指定にさらに変数を設定する必要がある場合は、lexical-binding の後に追加してください。これにより1行目が長くなりすぎる場合は、ファイル末尾の「ローカル変数」セクションを使用してください。

著作権表示には通常、氏名(ファイルを作成した場合)が記載されます。作品の著作権を主張する雇用主がいる場合は、代わりにその名称を記載する必要があるかもしれません。ファイルがEmacsディストリビューションやGNU ELPAに採用されていない限り、著作権者がFree Software Foundationである(あるいはファイルがGNU Emacsの一部である)とは記載しないでください。著作権およびライセンス表示の形式に関する詳細については、GNUウェブサイトのガイドを参照してください。

著作権表示の後には、それぞれ ‘;; header-name:’ で始まる複数のヘッダーコメント行が続きます。以下に、header-name に使用可能な一般的な選択肢をまとめた表を示します。

‘Author’

このヘッダーには、少なくともライブラリの主著者の氏名とメールアドレスを記載します。著者が複数いる場合は、;; とタブまたは2つ以上のスペースで始まる継続行に列挙してください。‘<…>’ 形式の連絡先メールアドレスを記載することを推奨します。例:

;; Author: Your Name <yourname@example.com>
;;      Someone Else <someone@example.com>
;;      Another Person <another@example.com>
‘Maintainer’

このヘッダーは、Authorヘッダーと同じ形式です。現在そのファイルを管理している人物(バグ報告への対応など)が記載されます。

Maintainerヘッダーがない場合、Authorヘッダーに記載されている人物がメンテナーであるとみなされます。Emacsの一部のファイルでは、メンテナーとして‘emacs-devel@gnu.org’が使用されており、これは著者がもはやそのファイルの責任を負わず、Emacsの一部としてメンテナンスされていることを意味します。

‘Created’

この任意行にはファイルの元の作成日時が記載されており、あくまで履歴確認用のものです。

‘Version’

個々のLispプログラムのバージョン番号を記録したい場合は、この行に記述してください。Emacsに同梱されているLispファイルには、通常「Version」というヘッダーは含まれません。これは、Emacs自体のバージョン番号が同様の役割を果たすためです。複数のファイルからなるコレクションを配布する場合は、すべてのファイルにバージョンを記述せず、メインのファイルにのみ記述することを推奨します。

‘Keywords’

この行には、finder-by-keyword ヘルプコマンド用のキーワードが列挙されています。意味のあるキーワードの一覧を確認するには、このコマンドを使用してください。M-x checkdoc-package-keywords RET コマンドは、finder-known-keywords に含まれていないキーワードを検索して表示します。変数 checkdoc-package-keywords-flag に non-nil を設定した場合、checkdoc コマンドのチェックにキーワード検証が含まれるようになります。

このフィールドは、トピック別に検索する際に、ユーザーがあなたのパッケージを見つけるためのものです。キーワードを区切るには、スペース、カンマ、またはその両方を使用できます。

このフィールドの名前は不適切です。というのも、単に関連するFinderキーワードを記入する場所ではなく、パッケージを説明する任意のキーワードを書き込む場所だと誤解されがちだからです。

‘URL’

この行には図書館のウェブサイトが記載されています。‘Homepage’は、‘URL’の非推奨の代替表記です。

‘Package-Version’

‘Version’がパッケージマネージャーでの利用に適さない場合、パッケージで‘Package-Version’を定義すれば、代わりにそちらが使用されます。これは、‘Version’がRCS IDであったり、version-to-listで解析できないその他の形式であったりする場合に便利です。パッケージングの基本を参照してください。

‘Package-Requires’

これが存在する場合、現在のパッケージが正常に動作するために依存するパッケージが指定されます。パッケージングの基本を参照してください。これはパッケージマネージャーによって、ダウンロード時(パッケージ一式が確実にダウンロードされるようにするため)およびアクティベーション時(すべての依存関係が満たされた場合にのみパッケージがアクティベートされるようにするため)の両方で使用されます。

形式は、1行にリストのリストを並べたものです。各サブリストの car は、シンボル形式のパッケージ名です。各サブリストの cadr は、version-to-list で解析可能な文字列形式の、許容される最小バージョン番号です。バージョンが指定されていないエントリ(すなわち、単なるシンボルであるエントリ、または要素が1つだけのサブリスト)は、バージョン "0" のエントリと同等です。例えば:

;; Package-Requires: ((gnus "1.0") (bubbles "2.7.2") cl-lib (seq))

Emacs 27より古いバージョンをサポートする必要のないパッケージでは、‘Package-Requires’ヘッダーを次のように複数行に分けて記述できます。

;; Package-Requires: ((emacs "27.1")
;;                    (compat "29.1.4.1"))

なお、この形式では、引き続きリストを ‘Package-Requires’ と同じ行から書き始める必要がある点にご注意ください。

パッケージコードは、現在動作しているEmacsのバージョン番号を持つ‘emacs’という名前のパッケージを自動的に定義します。これを利用して、パッケージに最低限必要なEmacsのバージョンを要求することができます。

ほぼすべてのLispライブラリには、「Author」と「Keywords」というヘッダーコメント行が含まれているべきです。他のものが適切であれば、それらを使用してください。また、別のヘッダー名を記述したヘッダー行を入れても構いません。これらに標準的な意味はないため、特に問題はありません。

ライブラリファイルの内容を細分化するために、さらに書式付きのコメントを使用します。これらは、空行によって他の部分と区切られている必要があります。以下にその一覧を示します。

‘;;; Commentary:’

ここから、ライブラリの仕組みを説明する導入コメントが始まります。このコメントはコピー権限の直後に配置し、後述するコメント行のいずれか(‘Change Log’、‘History’、または‘Code’)で終了させます。このテキストはFinderパッケージで使用されるため、その文脈において意味が通じる内容である必要があります。

‘;;; Change Log:’

ここから、ファイルへの変更履歴を任意で記録します。このセクションに情報を詰め込みすぎないでください。詳細なログは、バージョン管理システム(Emacsのように)や別のChangeLogファイルに保存しておく方が適切です。「History」は「Change Log」の代替表記です。

‘;;; Code:’

ここからプログラムの実際のコードが始まります。

‘;;; filename ends here’

これはフッター行で、ファイルの最後尾に記述されます。その目的は、フッター行がないことで、ファイルが切り詰められたバージョンであることを判別できるようにすることです。