Emacs28.1がリリースされましたね。 色々な新機能が導入されていますが、やはりEmacsが高速になるというNative Compilation機能が気になります。
そこで、この記事ではUbuntu、Arch Linux、macOSで、Native compilationを有効化したEmacs28のインストール方法を個人的にまとめます。
基本的な流れ #
Native compilationを有効化したEmacs28のインストールは基本的に以下の流れで実施します。
-
libgccjitライブラリとEmacs28のビルドに必要なライブラリ群のインストール
Native compilationを有効化するためにはlibgccjitライブラリが必須です。
-
Emacsリポジトリのclone
-
Emacs28のビルド
Ubuntu #
必要なライブラリ群のインストール #
以下のコマンドでEmacs28のビルドに必要なライブラリをインストールします。
libgccjitにはいくつかバージョンがありますので、適宜変更してください。私はlibgccjit-12-dev
を使いました。
sudo apt install autoconf make texinfo gnutls-bin libgccjit-12-dev
Emacsリポジトリのclone #
以下のコマンドでEmacsリポジトリをクローンします。
今回はEmacs28をビルドするだけなので、--depth 1 --branch emacs-28
オプションを付与して必要なファイル群だけをcloneします。
git clone --depth 1 --branch emacs-28 git://git.savannah.gnu.org/emacs.git
Emacs28のビルド #
まず、リポジトリに移動して、autogen.sh
を実行してconfigureファイルを作成します。
cd ./emacs
./autogen.sh
次に自分に必要なオプションを付与して、configure
を実行します。
このオプションに--with-native-compilation
を付与することでNative compilationが有効になります。
他のオプションは個人の好み・環境に合わせて、付与してください。私はGUI環境が不要なので、--with-x=no
としています。
なお、この際にCFLAGSでlibgccjitのパスをconfigureへ渡しています。libgccjitのインストールバージョンによってpathが少し変わりますので、気をつけてください。
CFLAGS='-I/usr/lib/gcc/x86_64-linux-gnu/12/include -L/usr/lib/gcc/x86_64-linux-gnu/12' ./configure --prefix=/usr/local --with-native-compilation --with-x=no --with-gnutls=ifavailable --without-pop
configureの実行が無事に完了しましたら、最後にmake
とmake install
を実行します。
make
sudo make install
これでUbuntuでのインストールは完了です。
Arch Linux #
Arch Linuxではpacman -S emacs-nativecomp
でNative compilationを有効化したEmacsがインストール可能です。
ただし、GUI版がインストールされるため、gtk等のGUIライブラリもインストールされてしまいます。
私はgtk等のGUIライブラリが不要かつEmacsをterminalでしか利用しないので、GUI機能を除いたEmacsを以下の手順でビルドします。
必要なライブラリ群のインストール #
以下のコマンドでEmacs28のビルドに必要なライブラリをインストールします。
sudo pacman -S libgccjit
上記以外にもビルドに必要なライブラリがありますが、何をインストールしたか忘れてしまったので、今回は割愛します。 ライブラリが足りない場合はビルド時にエラーが表示されますので、その際に適宜インストールしてください。
Emacsリポジトリのclone #
以下のコマンドでEmacsリポジトリをクローンします。
今回はEmacs28をビルドするだけなので、--depth 1 --branch emacs-28
オプションを付与して必要なファイル群だけをcloneします。
git clone --depth 1 --branch emacs-28 git://git.savannah.gnu.org/emacs.git
Emacs28のビルド #
まず、リポジトリに移動して、autogen.sh
を実行してconfigureファイルを作成します。
cd ./emacs
./autogen.sh
次に必要なオプションを付与して、configureを実行します。
このオプションに--with-native-compilation
を付与することでNative compilationが有効にります。
他のオプションは個人の好み・環境に合わせて、付与してください。私はGUI環境が不要なので、--with-x=no
としています。
./configure --prefix=/usr/local --with-native-compilation --with-x=no --with-gnutls=ifavailable --without-pop
configureが無事に完了したら、最後make
とmake install
を実行します。
make
sudo make install
これでArch Linuxでのインストールは完了です。
macOS version #
私はmacOSではHomebrewを利用していますので、HomebrewでNative compilationを有効化したEmacs28をインストールします。
Emacs Plusのformulaでインストールできますので、その手順に従ってインストールします。
brew tap d12frosted/emacs-plus
brew install emacs-plus@28 --with-native-comp
確認 #
ビルドが完了したEmacs28でNative compilationが有効になっているか確認します。
Emacsを起動してM-x describe-variable RET system-configuration-features RET
を実行する。
以下の画像のようにIts value is
にNATIVE_COMP
が含まれていれば有効になっています。

終わりに #
Emacs27からEmacs28に移行した感想としては、気になっていた部分が高速化されていて良かったです。 Native compilationを有効化しなかったバージョンとは比較していないので、Emacs28にしただけで高速化した部分もあると思いますが、特にlsp-modeの動作全体が高速になっていたので大満足です。
まだ、Native compilationを有効化したEmacs28を利用したことがない方はぜひ一度試してみてください!