Emacsの起動時間を「0.5秒以下」へ。伝説的アーキテクトが伝授するinit.elの極意
諸君、Emacsの起動時間が気になり、コーヒーを淹れている間に設定を修正していないか?もしそうなら、君の生産性は「Emacsの神」ではなく「Emacsの奴隷」になっている。
Emacsは単なるエディタではない。OSの上で動くOSだ。だからこそ、初期化プロセスを放置すれば、肥大化した設定の墓場と化す。本稿では、Emacsを「爆速の統合開発環境」へと変貌させるための、設計思想から踏み込んだリファクタリング術を伝授する。
—
1. 敵を知る:起動時間の計測と可視化
闇雲に設定を削っても意味がない。まずはボトルネックを特定する。Emacsには起動時間を詳細に可視化する機能がある。
;; init.elの先頭で計測を開始し、終了後にレポートを表示する
(add-hook ‘emacs-startup-hook
(lambda ()
(message “Emacs ready in %s with %d garbage collections.”
(format “%.2f seconds”
(float-time (time-subtract after-init-time before-init-time)))
gcs-done)))
さらに強力なツールとして `esup` (Emacs Startup Profiler) を導入せよ。どのプラグインが何ミリ秒消費しているかを正確にグラフ化してくれる。勘ではなく、データでボトルネックを殴り倒すのがエンジニアの流儀だ。
—
2. 「遅延読み込み」こそが最強の最適化
Emacsが遅い最大の理由は、起動時に全パッケージを `(require ‘package)` してしまうことにある。これを解決するのが `use-package` だ。
use-packageによる「オンデマンド・ロード」
必要な時に、必要な機能を、必要なだけ読み込む。これが鉄則だ。
;; :defer t を使うことで、そのパッケージを即座に読み込まない
;; 特定のキー操作やコマンド実行時に初めてロードする
(use-package magit
:ensure t
:bind (“C-x g” . magit-status) ; C-x gを押した瞬間に読み込まれる
:defer t)
さらに、`leaf` を検討するのも良い。`use-package` よりもさらにDSLが洗練されており、評価順序の制御が厳密に行える。起動速度にこだわるなら、設定の「宣言的記述」への移行は避けて通れない。
—
3. バイトコンパイルという「静的解析の恩恵」
設定ファイル(`.el`)を毎回インタープリタで解釈させるのは、ソースコードを毎回コンパイルせずに実行するようなものだ。`init.el` をバイトコンパイルし、`.elc` ファイルを生成せよ。
;; ~/.emacs.d/init.el を一括コンパイルするスクリプト
(defun my/compile-init ()
(interactive)
(byte-recompile-directory user-emacs-directory 0))
これをCIパイプラインや、ローカルのフックに組み込む。起動時に読み込まれるファイルがすべてバイナリ化されていれば、起動時間は劇的に短縮される。
—
4. チーム開発における設定共有のベストプラクティス
チームでEmacsを使う際、ローカルの設定を強要してはいけない。「ベースとなる共有設定」と「個人の拡張」を分離するのが鉄則だ。
設定の構成例 (ディレクトリ構造)
~/.emacs.d/
├── init.el ; エントリポイント。最小限の読み込みとロードパスの設定
├── core/ ; チーム共通の必須設定(キーバインド、エディタ設定)
│ ├── base-ui.el
│ └── base-keybind.el
├── modules/ ; 開発言語ごとの設定(LSP, LSP-ui等)
└── custom.el ; ローカル専用設定(Gitの管理対象外にする)
Git管理外の「ローカル設定」の分離
`.gitignore` に `custom.el` を含め、`init.el` の最後で以下のように読み込む。
;; チーム共通設定の後に個人の設定を読み込むことで、上書きを許可する
(setq custom-file (expand-file-name “custom.el” user-emacs-directory))
(when (file-exists-p custom-file)
(load custom-file))
—
5. 現場で震えるほど役立つ「神プラグイン」と設定
効率を極限まで高めるための、プロが選ぶ三種の神器を紹介する。
1. `vertico` + `orderless`: 補完の概念を刷新する。`orderless` を使えば、順不同の検索が可能になり、ファイル探索の速度が脳の思考速度に追いつく。
2. `corfu`: LSPの補完を最小限のオーバーヘッドで表示する。UIが軽量で、VSCodeの補完に慣れたエンジニアも納得の軽快さだ。
3. `project.el`: Emacs標準のプロジェクト管理。外部プラグインなしで `git` リポジトリを認識し、ルートディレクトリからの検索を一瞬で行う。
—
結論:エディタを「飼い慣らす」ということ
Emacsの最適化とは、単に起動時間を削ることではない。「道具と自分の思考の間の摩擦をゼロに近づけること」である。
今回紹介した「遅延読み込み」「バイトコンパイル」「設定の分離」を実践すれば、君のEmacsはただのテキストエディタから、君の思考をコードへと直接出力する「拡張現実的な開発環境」へと進化する。
設定ファイルをいじりすぎたと感じたら、一度 `M-x profiler-start` を実行せよ。君の愛機が、今どの関数で、どれだけのCPUを浪費しているか。それを突き止めた時、君は真のEmacs使いへの階段を一段登ることになる。
さあ、init.elを開け。そして、不要な `(require …)` を、今すぐ消し去れ。