検索エンジンから来た人に注意

このマニュアルは、Emacs ver. 19.x 向けのマニュアルを Mule 2.x の開発にあたり邦訳したものを、 電脳外道学会がミラーリングしているものであり、旧版製品パラノイアであるところの椅子人の趣味によるものです。

しかしながら、現在の Emacs の主流は ver. 20 以降であり、ver 19.x と ver 20.x とでは、仕様の違いが少なからずあります。

したがって、一般的な Emacs ユーザーにとっては、 このマニュアルと実機の動作とが符合しない場合があります。
特に、公開用の Emacs Lisp コードを書こうとする人は、 新バージョンのマニュアル(英語)を参照することを強くおすすめします。


トップページ&リンク | マニュアルの目次 | 検索
Go to the first, previous, next, last section, table of contents.


ヒントと標準的な作法

この章にはEmacs Lispの新たな機能の説明ではなく、前章までに説明された 機能を効果的に使用するためのアドバイスが記述されています。

明確なLispプログラムの記述

以下は、広く使用されることを目的とするLispコードを書くときによく犯され る誤りを避けるためのヒントや作法です。

コンパイルされたコードを速くする

バイト・コンパイルされたLispプログラムの実行速度を改善する方法につい て説明します。

読みやすい説明文字列を書く

説明文字列(documentation string)の書き方の作法について説明します。

コメントの書き方

ここに書かれているようにコメントを記述し、字下げを行うことが推奨されま す。

`;'
一つのセミコロン(`;')で始まるコメントは、全てソース・コードの右側の 同じ桁に揃えてください。通常これらのコメントは、同じ行のコードが何をする かを説明するのに用いられます。Lispモードや関連するモードでは、M-; (indent-for-comment)コマンドが、自動的に正しい場所にこの`;' を挿入したり、すでにコメントがある場合はその位置を揃えたりします。 この例およびこれ以降の例はEmacsのソースのものです。
(setq base-version-list                 ; there was a base
      (assoc (substring fn 0 start-vn)  ; version to which
             file-version-assoc-list))  ; this looks like
                                        ; a subversion
`;;'
二つのセミコロン(`;;')で始まるコメントは、コードの字下げと同じ位置 に揃えてください。通常これらのコメントは、それ以降の行の目的や、その位置 でのプログラムの状態を記述します。たとえば、
(prog1 (setq auto-fill-function
             ...
             ...
  ;; update mode line
  (force-mode-line-update)))
(そのパッケージ内でのみ使用されるため)説明文字列を持たない関数には、かわ りにその関数が何を行ないどのように呼ばれるのが正しいかを説明する二つのセ ミコロンから始まるコメントを書くべきです。それぞれの引数の意味とその値を 関数がどのように用いるかを正確に説明してください。
`;;;'
三つのセミコロン(`;;;')で始まるコメントは、左マージンの位置から開始 してください。このようなコメントは、関数定義の外でのそのプログラムの設計 方針を説明する一般的な記述に用いられます。
;;; This Lisp code is run in Emacs
;;; when it is to operate as a server
;;; for other processes.
三つのセミコロンで始まるコメントのもう一つの使い方は、関数の中の行をコ メント・アウトするものです。コメントが左マージンに残るようにこの目的に 使用します。
(defun foo (a)
;;; This is no longer necessary.
;;;  (force-mode-line-update)
  (message "Finished with %s" a))
`;;;;'
四つのセミコロン(`;;;;')で始まるコメントは、左マージンの位置から開 始し、プログラムの大きな区切りごとの先頭に用いられます。たとえば
;;;; The kill ring

M-; (indent-for-comment)やTAB (lisp-indent-line)などのEmacsのLispモードの字下げ命令は、自動的に この規約に従って字下げを行ないます。See section `Manipulating Comments' in The GNU Emacs Manual

Emacsライブラリのヘッダの規約

Emacsバージョン19では、Lispライブラリを段落に分けたり、その作者 などの情報を付加するために特別なコメントの規約を定めています。この節で はこれらの規約について説明します。まず最初に例を示します。

;;; lisp-mnt.el --- minor mode for Emacs Lisp maintainers

;; Copyright (C) 1992 Free Software Foundation, Inc.

;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
;; Maintainer: Eric S. Raymond <esr@snark.thyrsus.com>
;; Created: 14 Jul 1992
;; Version: 1.2
;; Keywords: docs

;; This file is part of GNU Emacs.
copying permissions...

1番先頭の行は次の書式です。

;;; file名 --- 説明

説明(description)は一行に納めてください。

著作権表示に続いて、数行のヘッダ・コメント(header comment)行 が置かれます。それぞれ`;; header名:'で始まります。以下が header名で使われる規約の表です。

`Author'
この行には、ライブラリの少なくとも最初の作者の名前とネットワーク・アドレ スを記述します。 複数の作者がいる場合は、次のように;;とタブ文字で始まる継続 行を用いて記述します。
;; Author: Ashwin Ram <Ram-Ashwin@cs.yale.edu>
;;      Dave Sill <de5@ornl.gov>
;;      Dave Brennan <brennan@hal.com>
;;      Eric Raymond <esr@snark.thyrsus.com>
`Maintainer'
この行には、Author行のように、一人分の名前とアドレスもしくは一人分のアド レスのみ、もしくは`FSF'と書きます。この行が省略された場合は、Author 行の作者が管理を行っているものとみなされます。上の例は、maintainer行が冗 長であるため、あまりよい例ではありません。 手で名前を埋め込まなくとも "管理者へmailを送る" Lisp関数を作ること を可能とすることが、`Author'行と`Maintainer'行のもう一つの目 的です。 ネットワーク・アドレスとフル・ネームを両方記述する場合は、必ずネッ トワーク・アドレスを`<...>'で囲ってください。
`Created'
この行には、最初にファイルを作成した日付を記述します。省略可能です。歴史 的な興味のためだけのためにあります。
`Version'
個々のLispプログラムにバージョン番号を記録したいのであれば、この行に 記述してください。
`Adapted-By'
この行には、(たとえばこの規約に従うように変更をした場合のように)ライブラ リのあまり内部にかかわらないような(30)変更を行った人の名前を記述してください。
`Keywords'
この行には、finder-by-keywordヘルプ命令のためのキーワードを記述し ます。ユーザは、やりたいことから探すときに、あなたのプログラムをこのキー ワードから探すため、この行は重要です。キーワードを分けるときは、空白文字、 コンマ、もしくはその両方を用います。

少なくとも`Author'`Keywords'の行は、全てのLispライブラリに 必要です。適切であれば他の行も使用してください。別のヘッダ名の行を加えて も構いません。標準的な意味はないため何の害もありません。

我々は、ライブラリ・ファイルの内容をいくつかに分割するために標準的なコ メントを決めています。以下がその表です。

`;;; Commentary:'
そのライブラリがどのように働くかを説明する紹介説明の始まりを示します。 著作権許可のすぐ後にあるべきです。
`;;; Change log:'
(変更履歴を記述する場合の)ライブラリ・ファイルの変更履歴の始まりを示しま す。Emacsとともに配布されるほとんどLispファイルでは、変更履歴は `ChangeLog'に書かれており、ソース・ファイル中には全く記述されていま せん。したがってこれらのファイルには`;;; Change log:'行はありません。
`;;; Code:'
実際のプログラム・コードの始まりを示します。
`;;; filename ends here'
これはフッタ行(footer line)で、ファイルの1番最後の行です。このフッ タ行がないことから、ファイルの後部が切り取られたバージョンであることを知 ることができます。


Go to the first, previous, next, last section, table of contents.