Next: , Previous: , Up: Emacs Lispパッケージ   [Contents][Index]


49.3 パッケージのインストール

パッケージを一番便利にインストールするのはパッケージメニューを使う方法(Package Menuバッファーを参照)ですが、コマンドM-x package-installを使用することもできます。これはステータスが‘available’のパッケージ名の入力を求めて、それをダウンロードしてからインストールします。同様にあるパッケージのアップグレード行いたければM-x package-upgradeコマンド、すべてのパッケージをアップグレードしたければM-x package-upgrade-allコマンドを使うことができます。

デフォルトではアーカイブから新しいバージョンが利用可能なビルトインパッケージをpackage-installは考慮しません(パッケージがEmacsディストーションに含まれているパッケージはビルトイン)。特にビルトインパッケージはパッケージ入力を求める際の補完候補には表示されません。ただしプレフィックス引数とともにpackage-installを呼び出すと、アップグレード可能なビルトインパッケージも考慮するようになります。変数package-install-upgrade-built-inをカスタマイズすることによって、この挙動をデフォルトにすることができます。この変数の値が非nilであれば、たとえプレフィックス引数なしでpackage-installを呼び出した際にもビルトインパッケージが考慮されるようになります。package-install-upgrade-built-inはpackage-menuコマンド(Package Menuバッファーを参照)にも影響を与えることに注意してください。

これとは対照的に、package-upgradepackage-upgrade-allがビルトインパッケージを考慮することは決してありません。あるビルトインパッケージのアップグレードにこれらのコマンドを使いたければC-u M-x package-install RETを通じてアップグレードするか、あるいはpackage-install-upgrade-built-inを非nil値にカスタマイズしてからパッケージメニューかpackage-installからそれらのパッケージを一度アップグレードする必要があります。

package-upgrade-allやパッケージメニューのUといったコマンドを使うと一度に多くのパッケージがアップデートされるので、package-install-upgrade-built-inを非nil値にカスタマイズする場合には注意してください。あなたの意図に反して、これらのコマンドがビルトインパッケージをアーカイブ由来の新バージョンに上書きして置き換えてしまうかもしれません。少数のビルトインパッケージだけをアップデートしたい場合には、これらのバルクコマンド(bulk command: 一度に大量の処理を行うコマンド)を使わないでください。

他のパッケージが提供する機能に依存するために、それらのパッケージがインストール済みであることを必要(require)とするパッケージもあるでしょう。Emacsがそのようなパッケージをインストールするときは、必要なパッケージがインストールされていなければ、それらのパッケージのダウンロードとインストールも自動に行ないます(必要なパッケージが何らかの理由で利用できない場合、Emacsはエラーをシグナルしてインストールを中止します)。パッケージの必要条件リスト(requirements list)は、そのパッケージのヘルプバッファーに表示されます。

デフォルトでは、パッケージはEmacs開発者により保守される単一のパッケージアーカイブからダウンロードされます。これは変数package-archivesにより制御されます。この変数の値は、Emacsが認識するパッケージアーカイブのリストです。リストの各要素は(id . location)という形式でなければなりません。ここで、idはパッケージアーカイブの名前、locationはパッケージアーカイブディレクトリーのURLか名前です。サードパーティーのアーカイブを使用したい場合はこのリストを変更できます — が、自己責任で行い、信用できるサードパーティーだけを使用してください!

パッケージアーカイブのメンテナーは、パッケージにサイン(signing)を付して、信頼度を増すことができます。これらはプライベートとパブリックのペアーからなる暗号化キーにより生成されます。プライベートキーは各パッケージにたいする署名ファイル(signature file)を作成するのに使用されます。パブリックキーにより、署名ファイルを使用してそのパッケージ作成者と、それが改ざんされていないかを確認できます。署名の検証は、EasyPGインターフェイス(EasyPG in Emacs EasyPG Assistant Manualを参照)を通じてthe GnuPG packageを使用します(EasyPG in Emacs EasyPG Assistant Manualを参照)。有効な署名であっても、それが悪意がないパッケージであることを厳正に保証する訳ではなく、用心するべきです。パッケージアーカイブは、パブリックキーの入手方法について、説明を提供するべきです。http://pgp.mit.edu/のようなサーバーからキーをダウンロードするのも1つの方法です。Emacsにキーをインポートするには、M-x package-import-keyringを使用します。Emacsは変数package-user-dirで指定されるディレクトリー(デフォルトはpackage-gnupghome-dirのサブディレクトリーgnupg)にパッケージキーを格納します。これにより、Emacsが署名を検証する際に、オプションgnupgでGnuPGを呼び出すようになります。package-gnupghome-dirnil,の場合は、GnuPGのオプション‘--homedir’は省略します。GNUパッケージアーカイブにたいするパブリックキーはEmacsと共に配布され、etc/package-keyring.gpgにあります。Emacsはこれを自動的に使用します。

ユーザーオプションpackage-check-signatureが非nilの場合、Emacsはパッケージのインストール時に署名の検証を試みます。このオプションが値allow-unsignedをもち、使用可能なOpenPGP設定が見つかったらサインされたパッケージはチェックされますが、未サインのパッケージもまだインストールができます。パッケージにサインしないアーカイブを使用する場合には、それらをpackage-unsigned-archivesに追加できます(値がallow-unsignedで使用可能なOpenPGPが見つからなければこのオプションはあたかも値がnilであるかのように扱われる)。値がtなら少なくとも1つの署名が有効でなければならず、allならすべての署名が有効でなければなりません。

暗号化キーとサインについての詳細は、GnuPG in The GNU Privacy Guard Manualを参照してください。EmacsのGNU Privacy Guardにたいするインターフェースについては、EasyPG in Emacs EasyPG Assistant Manualを参照してください。

複数のパッケージアーカイブが有効で、同じパッケージにたいして異なるバージョンを提供する場合は、オプションpackage-pinned-packagesが便利かもしれません。指定したパッケージが指定されたアーカイブだけからダウンロードされるように、このリストにパッケージとアーカイブのペアーを追加できます。

複数の有効なパッケージアーカイブがあるときに便利な他のオプションとして、package-archive-prioritiesがあります。これは各アーカイブにたいして、優先度(高い数字は高い優先度のアーカイブを指定します)を指定します。このオプションにより指定されない限り、アーカイブの優先度はデフォルトの0です。優先度高のアーカイブのパッケージが利用可能な場合、優先度低のアーカイブのパッケージはメニューに表示されません(これはpackage-menu-hide-low-priorityの値により制御されます)。

一度パッケージをダウンロードしてバイトコンパイル、インストールするとそのパッケージはカレントEmacsセッションで利用可能になります。パッケージを利用可能にするにはパッケージのディレクトリーをload-pathに追加してパッケージのautoloadをロードします。パッケージのautoloadの効果はパッケージごとにさまざまです。ほとんどのパッケージはいくつかの新たなコマンドを利用可能にするだけですが、Emacsセッションにたいして広範な影響を及ぼすものもあります。この種の情報についてはパッケージのヘルプバッファーを参照してください。

インストールされたパッケージはその後のすべてのEmacsセッションで自動的にロードされます。これはEmacs開始時のinitファイル処理前、早期initファイル(早期初期化ファイルを参照)の処理後に行なわれます。例外として‘-q’か‘--no-init-file’オプション(初期化オプションを参照してください)で呼び出されたときは、Emacs開始時にパッケージを利用可能にしません。

スタートアップ時にEmacsが自動的にパッケージを利用可能しないようにするためには変数package-enable-at-startupnilに変更してください。この変数は正規のinitファイル(regular init file)のロード前に読み込まれるので早期initファイル(early init file)で行うようにしてください。現在のところこの変数はCustomizeを通じてセットできません。

多くのパッケージのインストール後には、ユーザーオプションpackage-quickstartのセッティングでスタートアップタイムを改善できるかもしれません。このオプションをセットすることによって、Emacsのスタートアップ時に毎回再計算するかわりに、多くの事項をEmacsに事前に計算させることができます。しかしこれを行うと、package-load-listの値の変更時のようなアクティベーション変更が必要になった際にコマンドpackage-quickstart-refreshを手動で実行する必要が生じます。

package-enable-at-startupnilにセットしてもスタートアップ中およびスタートアップじにパッケージを利用可能にすることはできます。インストール済みパッケージをスタートアップ中に利用可能にするにはinitファイル内で関数package-activate-allを呼び出し手ください。スタートアップ後に利用可能にするにはコマンドM-: (package-activate-all) RETを呼び出してください。

スタートアップ時に利用可能になるようにパッケージのロードをより精密に制御するために、変数package-load-listを使用することができます。この変数の値にはリストを指定します。(name version)という形式のリスト要素は、nameという名前のパッケージのバージョンversionを利用可能にするように指示します。ここでversionには、(そのパッケージの特定のバージョンに対応する)バージョン文字列、t (任意のインストール済みのバージョンを意味する)、またはnil (バージョンを意味しない。パッケージを利用可能にすることを抑止してパッケージを無効にする)を指定します。リストの要素にはシンボルallも指定でき、これは他のリスト要素で名前指定されていない任意のパッケージのインストール済みバージョンを利用可能にすることを意味します。デフォルト値は単に'(all)となっています。

たとえばpackage-load-list'((muse "3.20") all)にセットするとEmacsは‘muse’のバージョン3.20のみ、および‘muse’以外のパッケージのインストール済みの任意のバージョンをロードします。‘muse’の他のバージョンがインストールされていたとしてもそれらは無視されます。‘muse’パッケージは‘held’というステータスでパッケージメニューにリストされるはずです。

Emacsのバイトコードは極めて安定していますがバイトコードが古くなってしまったり、コンパイル済みファイルが依存するマクロが新しいバージョンのEmacsで変更されてしまう可能性もあります。特定のパッケージをリコンパイルするためにはM-x package-recompile、すべてのパッケージをリコンパイルするためにはM-x package-recompile-allというコマンドを使うことができます(インストール済みパッケージの数が多ければ後者コマンドの実行にかなりの時間を要するかもしれない)。