パッケージのインストールは、パッケージメニュー(パッケージメニューバッファを参照)を使用するのが最も便利ですが、M-x package-installコマンドを使用することもできます。このコマンドは、‘available’ステータスのパッケージ名の入力を求め、その後パッケージをダウンロードしてインストールします。同様に、パッケージをアップグレードしたい場合はM-x package-upgradeコマンドを、すべてのパッケージをアップグレードしたい場合はM-x
package-upgrade-allコマンドを使用できます。デフォルトでは、これらのコマンドは古いインストールを削除しますが、変数package-retention-policyをカスタマイズすることでこの動作を調整できます。
なお、package-install
は既にインストール済みのパッケージのインストールを提案しません。同様に、package-upgrade はより新しいバージョンが存在するパッケージのアップグレードのみを提案します。
デフォルトでは、package-install
はアーカイブから新バージョンが提供されている組み込みパッケージを考慮しません。(パッケージが Emacs
ディストリビューションに含まれている場合、それを組み込みパッケージと呼びます。)特に、プロンプトで入力した際に、補完候補のリストに組み込みパッケージが表示されることはありません。ただし、接頭辞引数を指定して
package-install
を呼び出した場合は、アップグレード可能な組み込みパッケージも考慮されます。変数 package-install-upgrade-built-in
をカスタマイズすることで、この動作をデフォルトに設定できます。その値が nil
以外であれば、接頭辞引数なしで呼び出された場合でも package-install
は組み込みパッケージを考慮します。なお、package-menu コマンド(パッケージメニューバッファ を参照)も package-install-upgrade-built-in の影響を受けます。
これに対し、package-upgrade および package-upgrade-all
は組み込みパッケージを一切考慮しません。これらのコマンドを使用して一部の組み込みパッケージをアップグレードしたい場合は、各パッケージを一度ずつ、C-u M-x package-install RET
経由か、あるいは package-install-upgrade-built-in を nil 以外の値にカスタマイズした上でパッケージメニューまたは package-install 経由でアップグレードする必要があります。
package-install-upgrade-built-in を nil 以外の値にカスタマイズする場合、パッケージメニューの package-upgrade-all や U
のように、一度に多くのパッケージを更新するコマンドを使用する際は十分にご注意ください。これらのコマンドは、アーカイブの新しいバージョンに置き換える意図がなかった組み込みパッケージを上書きしてしまう可能性があります。少数の組み込みパッケージのみを更新したい場合は、これらの一括更新コマンドを使用しないでください。
パッケージは、他のパッケージが提供する機能に依存しているため、特定のパッケージのインストールを必要とする場合があります。Emacsがこのようなパッケージをインストールする際、まだインストールされていない必要なパッケージも自動的にダウンロードしてインストールします。(必要なパッケージが何らかの理由で利用できない場合、Emacsはエラーを通知し、インストールを停止します。)パッケージの依存関係リストは、そのヘルプバッファに表示されます。
パッケージアーカイブからのパッケージのインストールやアップグレードに際して慎重な対応を取りたい場合は、package-review-policy
を設定して、インストール前にパッケージを確認できるようにできます。ユーザーオプションを t
に設定すると、すべてのパッケージ(依存関係を含む)を確認でき、その際にソースコードを閲覧したり、ダウンロードしたパッケージと以前のインストール版との差分を確認したり、変更履歴を読んだりすることが可能です。また、package-review-policy
を設定して、特定のパッケージやアーカイブを選択的に信頼または信頼しないようにすることもできます。
デフォルトでは、EmacsはGNU ELPAとNonGNU ELPAという2つのアーカイブからパッケージをダウンロードします。これらはEmacsの開発者によって管理され、GNUプロジェクトによってホストされています。GNU ELPAには、GNU Emacsの一部とみなされるものの、コアのEmacsとは別に配布されているGNUパッケージが含まれています。NonGNU ELPAには、著作権がフリーソフトウェア財団に譲渡されていないサードパーティ製パッケージが含まれています。35
これは変数 package-archives によって制御されており、その値は Emacs
が認識しているパッケージアーカイブのリストとなっています。リストの各要素は (id . location)
という形式である必要があり、ここで id はパッケージアーカイブの名前、location はパッケージアーカイブディレクトリの URL
または名前となります。サードパーティ製のパッケージアーカイブを利用したい場合は、このリストを変更することも可能です—ただし、その際は自己責任で行い、信頼できると判断したサードパーティのみを利用してください!
この変数の値は、Emacsパッケージマネージャが認識するパッケージアーカイブのalistです。
alistの各要素は1つのアーカイブに対応し、(id . location) という形式である必要があります。ここで、id はアーカイブ名(文字列)、location はそのベースロケーション(文字列)です。
ベースロケーションが ‘http:’ または ‘https:’ で始まる場合、それは HTTP(S) URL として扱われ、パッケージはこのアーカイブから HTTP(S) 経由でダウンロードされます(デフォルトの GNU アーカイブの場合と同様です)。
それ以外の場合、ベースとなる場所はディレクトリ名である必要があります。この場合、Emacsは通常のファイルアクセスを通じてこのアーカイブからパッケージを取得します。このようなローカルアーカイブは、主にテスト用途に有用です。
Emacsでは、特定の種類のファイルを開いた際にパッケージのインストールを提案することがあります。特定のモードが設定されていないファイルを開いた場合、package-autosuggestコマンドを使用して、そのファイルタイプに推奨されるELPAアドオンパッケージを検索し、インストールできます。package-autosuggest-modeを有効にすると、バッファで開いているファイルに対して推奨されるアドオンパッケージがある場合、Emacsが自動的に通知します。デフォルトでは、これらの通知はバッファウィンドウのモードラインに、アドオンパッケージをインストールしてメジャーモードをアップグレードすることを提案するボタンを表示しますが、package-autosuggest-styleユーザーオプションをカスタマイズすることで、Emacsがこれらの通知をどのように表示するかを制御できます。
パッケージアーカイブの管理者は、パッケージに署名を行うことで、パッケージに対する信頼性を高めることができます。管理者は暗号鍵の秘密鍵と公開鍵のペアを生成し、秘密鍵を用いて各パッケージの署名ファイルを作成します。公開鍵があれば、この署名ファイルを使用してパッケージの作成者を検証し、パッケージが改ざんされていないことを確認できます。署名の検証には、EasyPGインターフェースを介してGnuPGパッケージを使用します(Emacs EasyPG Assistant ManualのEasyPGを参照してください)。有効な署名があるからといって、パッケージに悪意がないことが絶対的に保証されるわけではないため、引き続き注意が必要です。パッケージアーカイブには、公開鍵の入手方法に関する説明が記載されている必要があります。その一つの方法は、https://pgp.mit.edu/のようなサーバーから鍵をダウンロードすることです。Emacsに鍵をインポートするにはM-x package-import-keyringを使用します。Emacsはパッケージ鍵を変数package-gnupghome-dirで指定されたディレクトリ(デフォルトではpackage-user-dirのgnupgサブディレクトリ)に保存します。これにより、Emacsは署名を検証する際にオプション‘--homedir’を指定してGnuPGを呼び出します。package-gnupghome-dirがnilの場合、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
の場合はすべてが有効である必要があります。
暗号鍵と署名の詳細については、The GNU Privacy Guard ManualのGnuPGを参照してください。EmacsにはGNU Privacy Guard用のインターフェースが用意されています。Emacs EasyPG Assistant ManualのEasyPGを参照してください。
複数のパッケージアーカイブを有効にしており、その中に同一パッケージの異なるバージョンが含まれている場合、package-pinned-packages
オプションが便利です。このリストにパッケージとアーカイブのペアを追加することで、指定したパッケージが必ず指定したアーカイブからのみダウンロードされるようにできます。
複数のパッケージアーカイブを有効にしている場合に有用なもう一つのオプションが package-archive-priorities
です。これは各アーカイブの優先度を指定します(数値が大きいほど優先度が高くなります)。デフォルトでは、本オプションの値で別途指定しない限り、アーカイブの優先度は
0 となります。より優先度の高いアーカイブに同じパッケージが存在する場合、優先度の低いアーカイブのパッケージはメニューに表示されません。(これは
package-menu-hide-low-priority の値によって制御されます。)
パッケージがダウンロードされ、バイトコンパイルおよびインストールされると、現在のEmacsセッションで利用可能になります。パッケージを利用可能にすると、そのディレクトリがload-pathに追加され、オートロードが読み込まれます。パッケージのオートロードによる影響は、パッケージによって異なります。ほとんどのパッケージは単にいくつかの新しいコマンドを利用可能にするだけですが、中にはEmacsセッションにより広範な影響を及ぼすものもあります。こうした情報については、そのパッケージのヘルプバッファを参照してください。
インストール済みのパッケージは、それ以降のすべてのセッションにおいてEmacsによって自動的に利用可能になります。これは起動時に、initファイルの処理前、かつ初期initファイルの処理後(初期initファイルを参照)に行われます。例外として、‘-q’または‘--no-init-file’オプションを指定して起動した場合、Emacsは起動時にパッケージを利用可能にしません(初期オプションを参照)。
Emacsが起動時にパッケージを自動的に利用可能にするのを防ぐには、変数 package-enable-at-startup を nil に変更してください。この変数は通常の init ファイルを読み込む前に参照されるため、初期 init
ファイル内でこの操作を行う必要があります。したがって、Customize でこの変数をカスタマイズした場合は、カスタマイズした設定を初期 init
ファイルに保存してください。そのためには、package-enable-at-startup
のカスタマイズ値を保存する前に、変数 custom-file(カスタマイズの保存 を参照)の値を設定または変更して、初期 init
ファイルを指定してください。
インストールされているパッケージが多い場合は、ユーザーオプション package-quickstart を t
に設定することで、起動時間を短縮できます。このオプションを設定すると、Emacs
は起動のたびに再計算するのではなく、多くの処理を事前に計算しておくようになります。ただし、この設定を行った場合、package-load-list
の値を変更する際など、アクティベーションを変更する必要があるときは、手動でコマンド package-quickstart-refresh を実行する必要があります。
package-enable-at-startup を nil
に設定した場合でも、起動中または起動後にパッケージを利用可能にできます。インストール済みパッケージを起動中に利用可能にするには、init ファイルで関数
package-activate-all
を呼び出してください。インストール済みパッケージを起動後に利用可能にするには、コマンド M-:
(package-activate-all) RET を実行してください。
起動時に提供するパッケージをより細かく制御するには、変数 package-load-list
を使用できます。その値はリストである必要があります。(name version)
形式のリスト要素は、name という名前のパッケージのバージョン version を提供するよう Emacs に指示します。ここで、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 コマンドを使用できます。(インストール済みのパッケージ数が多い場合、後者のコマンドの実行にはかなり時間がかかることがあります。)