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


39.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-initializeが呼び出されます。これはinitファイルと、(もしあれば)abbrevファイルのロード後、かつafter-init-hookの実行前に行われます(Startup Summaryを参照)。ユーザーオプションpackage-enable-at-startupnilなら自動的なパッケージのロードは無効です。

Command: package-initialize &optional no-activate

この関数はインストール済みパッケージ、およびそれらがロード済みかどうかを記録するEmacsの内部レコードを初期化する。ユーザーオプションpackage-load-listは何のパッケージをロードするかを指定する。デフォルトではすべてのインストール済みパッケージがロードされる。スタートアップ中に呼び出されると、この関数は意図せずパッケージを2重にロードすることを防ぐためにpackage-enable-at-startupnilをセットする。Package Installation in The GNU Emacs Manualを参照のこと。

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