use-packageとstraight.elの自動インストールとセットアップ

2023年3月29日
thumbnail

概要

use-packageはemacsで利用するサードパーティ製のパッケージをインストールし、読み込み、初期化、設定ができます。
emacsはuse-packageを使わなくても、package.elのpackage-list-packagesを使ってmelpaに公開されている好きなパッケージをインストールし、init.elrequire("パッケージ名") を追加して利用しても良いのですが、手動でパッケージをインストールして、設定を記述していては時間が膨大にかかってしまいます。use-packageはオプションでensure: tがあり、これを記述しておくと、パッケージがインストールされていなければ、自動的にインストールしてくれます。
公式Githubリポジトリを読むとuse-packageの主な目的はパッケージのロードと設定で、emacsの環境構築ツールとして使う事を目的とはしていませんが、私はどちらかというとansibleみたいな自動環境構築ツールとして使っています。
Straightもuse-packageと同じく、パッケージマネージャーであり、use-packageよりも強力であると掲げていますが、有名なのはuse-packageの方です。Straightを使う1番の理由はgithubに公開されているパッケージをuse-packageで使うためです。
emacsで扱われるパッケージはgithubができる前からあったりして、伝統的にsubversionが使われたりしていました。2010年くらいからチラホラgithubで公開されるパッケージが増えてきて、そこで公開されているパッケージを使いたいニーズが増えました。
use-packageではgithubにあるパッケージを指定できないので、straightを入れて、そちら経由でインストールして使える様にします。

use-packageのセットアップ

package.el

最初にpackage.elの設定を~/.emacs.d/init.elに加えます。use-packageを使うにしてもpackage.elのmelpaとかは使うので必須です。
;; package.elでmelpaパッケージ利用の初期化
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

use-package

use-packageもemacsのサードパティ製のパッケージなので、最初からemacsに入っているわけではありません。ですが、手動でM-x package-install RET use-packageするのは面倒くさいので、~/.emacs.d/init.el にuse-packageの存在判定も加えて、use-packageがインストールされていなければ、自動的にインストールして使える様にしましょう。
;; use-packageがインストールされていなかったらuse-packageをインストール
(dolist (package '(use-package))
   (unless (package-installed-p package)
       (package-install package)))
init.elに上の2つのコードが書けたら、emacsを再起動するだけでuse-packageの環境が整います。

Straightのセットアップ

Straightも同様にセットアップします。こちらはGithubのREADMEに自動インストールとセットアップの方法が書いてあるのでそれを流用して~/.emacs.d/init.elに追加します。
;; Straightを使うための設定
(defvar bootstrap-version)
(let ((bootstrap-file
       (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
      (bootstrap-version 6))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
        (url-retrieve-synchronously
         "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
         'silent 'inhibit-cookies)
      (goto-char (point-max))
      (eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))
保存したら、emacsを再起動します。 Straightはセットアップに時間がかかるので、気長に待ちましょう。

まとめ

以上でuse-packageとStraightを使う環境が整いました。
最後にここで扱ったコードをまとめておきます。
;; package.elでmelpaパッケージ利用の初期化
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

;; use-packageがインストールされていなかったらuse-packageをインストール
(dolist (package '(use-package))
   (unless (package-installed-p package)
       (package-install package)))

;; Straightを使うための設定
(defvar bootstrap-version)
(let ((bootstrap-file
       (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
      (bootstrap-version 6))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
        (url-retrieve-synchronously
         "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
         'silent 'inhibit-cookies)
      (goto-char (point-max))
      (eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))
profile image
Ted
大学でコンセンサスアルゴリズムを研究。卒業後ベンチャー企業に入社してフルスタックでWebサービスを開発。現在は大手IT企業に転職し、プログラミングを行っている。AIにプログラマーの仕事を奪って欲しいと願っている。