Next: , Up: Packaging   [Contents][Index]


41.1 パッケージ化の基礎

パッケージはシンプルパケージ(simple package)複数ファイルパッケージ(multi-file package)のいずれかです。シンプルパッケージは単一のEmacs Lispファイル内に格納される一方、複数ファイルパッケージはtarファイル(複数のLispファイルとマニュアルのような非Lispファイルが含まれる可能性がある)に格納されます。

通常の使い方ではシンプルパッケージと複数ファイルパッケージとの違いは比較的重要ではありません。Package Menuインターフェースでは、それらの間に差異はありません。しかし以降のセクションで説明するように作成する手順は異なります。

パッケージ(シンプルか複数ファイル)はそれぞれ特定の属性(attributes)をもっています:

Name

短い単語(たとえば‘auctex’)。これは通常はそのプログラム内でシンボルプレフィクスとしても使用される(Coding Conventionsを参照)。

Version

関数version-to-listが理解できる形式のバージョン番号(たとえば‘11.86’)。パッケージの各リリースではユーザーがパッケージアーカイブの問い合わせでアップグレードとして認識できるようにバージョン番号のアップも行うこと。

Brief description

そのパッケージがPackage Menuにリストされる際にが表示される。理想的には36文字以内の単一行であること。

Long description

これはC-h P (describe-package)により作成されたバッファーに表示されて、その後にそのパッケージの簡単な説明(brief description)とインストール状態(installation status)が続く。これには通常はパッケージの能力とインストール後に使用を開始する方法を複数行に渡って完全に記述すること。

Dependencies

そのパッケージが依存する他のパッケージ(恐らく最低のバージョン番号を含む)。このリストは空でもよく、その場合にはパッケージに依存パッケージがないことを意味する。それ以外ならパッケージをインストールすることにより依存パッケージも自動的かつ再帰的にインストールされる。依存パッケージのいずれかが見つからなければパッケージをインストールすることはできない。

コマンドpackage-install-file、またはPackage Menuのいずれかを介したパッケージのインストールでは、package-user-dirname-versionという名前のサブディレクトリーが作成されます。ここでnameはパッケージ名、versionはバージョン番号です(たとえば~/.emacs.d/elpa/auctex-11.86/)。わたしたちはこれをパッケージのコンテンツディレクトリー(content directory)と呼んでいます。これはEmacsがパッケージのコンテンツ(シンプルパッケージでは単一のLispファイル、または複数ファイルパッケージから抽出されたファイル)を配置する場所です。

その後にEmacsはautoloadマジックコメント(Autoloadを参照)にたいしてコンテンツディレクトリー内のすべてのLispファイルを検索します。これらのautoload定義はコンテンツディレクトリーのname-autoloads.elという名前のファイルに保存されます。これらは通常はパッケージ内で定義された主要なユーザーコマンドのautoloadに使用されますが、auto-mode-alistへの要素の追加(Auto Major Modeを参照)等の別のタスクを行うこともできます。パッケージは通常はその中で定義された関数と変数のすべてをautoloadしないことに注意してください — 通常はそのパッケージの使用を開始するために呼び出される一握りのコマンドだけがautoloadされます。それからEmacsはそのパッケージ内のすべてのLispファイルをバイトコンパイルします。

インストール後はインストールされたパッケージはロード済み(loaded)になります。Emacsはload-pathにコンテンツディレクトリーを追加してname-autoloads.el内のautoload定義を評価します。

Emacsのスタートアップ時には、カレントセッションでインストール済みパッケージを利用可能にするために、自動的に関数package-activate-allを呼び出します。これは早期initファイルロード後、かつ通常initファイルロード後に行われます(Startup Summaryを参照)。早期initファイルでユーザーオプションpackage-enable-at-startupnilにセットされている場合には、パッケージは自動的に利用可能にはなりません。

Function: package-activate-all

この関数はカレントセッションでパッケージを利用可能にする。ユーザーオプションpackage-load-listは利用可能にするパッケージを指定する。デフォルトではインストール済みのパッージすべてが利用可能になる。Package Installation in The GNU Emacs Manualを参照のこと。

ほとんどの場合には、スタートアップの間に自動的に行われるのでpackage-activate-allを呼び出す必要はないはずである。単に早期initファイル内にpackage-activate-allの前に実行される必要のあるコードを配置するとともに、package-activate-allの後に実行される必要のあるコードを主linitファイルに配置することを確実に行なえばよい(Init File in The GNU Emacs Manualを参照)。

Command: package-initialize &optional no-activate

この関数は何のパッケージがインストール済みかに関するEmacsの内部レコードを初期化してからpackage-activate-allを呼び出す。

オプション引数no-activateが非nilなら、インストール済みパッケージを実際に利用可能にせずにこのレコードを更新する。これは内部でのみ使用される。