Emacs ― Guide to getting started with Emacs.

World Administrator
2023年7月21日
6 分で読めます
Photo by Oskar Yildiz / Unsplash

WindowsでEmacsを使おうと思い、入れたは良いものの、試行錯誤があったので私なりのEmacsの事始めとしてまとめておきます。

私の環境

まずはハードウェア

  • Processor AMD Ryzen 7 5800H with Radeon Graphics 3.20 GHz
  • Installed RAM 40.0 GB (39.4 GB usable)
  • System type 64-bit operating system, x64-based processor

OS

  • Edition Windows 11 Pro
  • Version 22H2
  • Installed on ‎01/‎07/‎2023
  • OS build 22621.1992
  • Experience Windows Feature Experience Pack 1000.22644.1000.0

導入方法

3つの入れ方があると思います。

  • WSLの中に入れる方法
  • Windowsに直接インストールする方法
  • MSYS2を介して入れる方法

WSLを使う

Good: Linuxの環境を使える

Bad: ATOK(あるいはその他のWindowsのIME)を使えない

WSLの中に入れる方法では完全なLinax環境を用意することができるので、完全にEmacsの期待した動作をしてくれます。デメリットは、WindowsのIMEを使うことができません。Google日本語入力以外のIMEになれてきた人は乗り換えなければならない。私はATOKを使ってきたのでmozcを入れてGoogle日本語入力を使うことなどできなかった。

Windowsに直接入れる

Good: ATOK(あるいはその他のWindowsのIME)を使える

Bad: プラグインが動かない

WSLを介するのがだめならWindawsに直接入れてしまえばいいという発想。バニラのEmacsを使う分には問題ないがEmacsのプラグインはLinaxのエコシステムを前提にしているため多くのプラグインで問題が発生しました。とくにinit.elの管理をつかさどるleaf.elの拡張であるleaf-convertが使えないのに困ってしまった。ただでさえ敷居の高いエディターに移行したいのに環境設定でやる気をそがれていてはだめだということで今回は見送りました。

MYSYS2の上に構築

Good: ATOK(あるいはその他のWindowsのIME)を使える

Bad: 本物のLinuxの環境ではないため、不具合が出るかもしれない

Windowsの中でLinax

ATOKユーザーがEmacsを使う方法はこれしかないと思います。

結論

ということで結局Windows環境にEmacs公式が推薦しているMYSYS2を使い導入することにしました。

MYSYS2の導入

まずMYSYS2を導入する。

MSYS2
Software Distribution and Building Platform for Windows

公式のインストールガイドに従うだけです。

  1. インストーラーをダウンロード
  2. 自分のマシンがWindows 8.1以上であり、64ビット環境であることを確かめる
  3. インストーラーを実行
  4. 何もいじらずNextを押し続ける
  5. MYSYS2 UCRT64が自動的に開かれる
  6. 次のコマンドを実行
$ pacman -S mingw-w64-ucrt-x86_64-gcc
  1. :: Proceed with installation? [Y/n]と聞かれるのでYを押し、Enter
  2. 次のコマンドを実行gcc --version
  3. エラーが出ず、gccのバージョンが表示されることを確認する
  4. Gitも導入しておく
$ pacman -S git
  1. 次のコマンドを実行git -v
  2. エラーが出ず、gitのバージョンが表示されることを確認する
  3. MYSYS2 UCRT64を閉じる

インストールが終わるとWindowsのアプリ一覧に以下のアプリが追加されている。

  • MYSYS2 CLANG64
  • MYSYS2 CLANGARM64
  • MYSYS2 MINGW32
  • MYSYS2 MINGW64
  • MYSYS2 MSYS
  • MYSYS2 UCRT64

それぞれに設定されている環境変数が異なるが、基本的にMYSYS2 MINGW64を使えばよい。あまのじゃくな方は好きなものを使ってください。別に何か問題が起きるわけではないです。

Emacsのインストール

GNU Emacs download - GNU Project

これもインストールガイドに従うだけです。

  1. MYSYS2 MINGW64を開く
  2. 以下のコマンドを実行するpacman -S mingw-w64-x86_64-emacs
  3. Emacsがインストールされたことを確認するemacs --version

以上です。

バージョンが正しく表示されなかった場合は、MYSYS2を開き直してください。また、MYSYS2 UCRTなどではEmacsを使えなかったのでご注意ください。私はMYSYS2 MINGW64でしか動作確認を行っていませんので、ほかの動作はわかりません。

これでemacsコマンドでEmacsを起動できるようになった。

また、ウイルス対策ソフトを入れている方はEmacsを初めて起動するときにファイアウォールに関する警告が表示されますが、通信を許可してください。

Emacs設定ファイルの導入

~/.emacs.d/init.elのような構造にすることが一般的です。

私の場合はC:\msys64\home\Yasun\.emacs.dのように配置しました。

私はcanao3さんの作ったleaf.elに任せている。導入は制作者本人のブログを参考にする。

Emacs入門から始めるleaf.el入門 - Qiita
背景leaf.elの日本語情報は比較的充実していると思いますが、やはり多少の背後情報が必要です。Emacsの設定はどのファイルで行なうのか、マクロとは、バイトコンパイルとは、、、leafが設定の…

以下がleaf.elのGitHubリポジトリである。

GitHub - conao3/leaf.el: Flexible, declarative, and modern init.el package configuration
Flexible, declarative, and modern init.el package configuration - GitHub - conao3/leaf.el: Flexible, declarative, and modern init.el package configuration

canao3さんのブログから以下のコードを転載するが、結論としてはinit.elにこれを貼り付ければよい。

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see http://www.gnu.org/licenses/.
;;; Commentary:
;; My init.el.
;;; Code:
;; this enables this running method
;; emacs -q -l ~/.debug.emacs.d/{{pkg}}/init.el
(eval-and-compile
(when (or load-file-name byte-compile-current-file)
(setq user-emacs-directory
(expand-file-name
(file-name-directory (or load-file-name byte-compile-current-file))))))
(eval-and-compile
(customize-set-variable
'package-archives '(("org" . "https://orgmode.org/elpa/")
("melpa" . "https://melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")))
(package-initialize)
(unless (package-installed-p 'leaf)
(package-refresh-contents)
(package-install 'leaf))
(leaf leaf-keywords
:ensure t
:init
;; optional packages if you want to use :hydra, :el-get, :blackout,,,
(leaf hydra :ensure t)
(leaf el-get :ensure t)
(leaf blackout :ensure t):config
;; initialize leaf-keywords.el
(leaf-keywords-init)))



;; ここにいっぱい設定を書く
(leaf leaf
:config
(leaf leaf-convert :ensure t)
(leaf leaf-tree
:ensure t
:custom ((imenu-list-size . 30)
(imenu-list-position . 'left))))
(leaf macrostep
:ensure t
:bind (("C-c e" . macrostep-expand)))
(provide 'init)
;; Local Variables:
;; indent-tabs-mode: nil
;; End:
;;; init.el ends here

"Emacs入門から始めるleaf.el入門", canao3, https://qiita.com/conao3/items/347d7e472afd0c58fbd7, visited on 2023/07/21.

こちらもcanao3さんのブログからの引用です。

init.elのバイトコンパイル

init.elはEmacsの設定ファイルですが、Emacs lisp (Elisp)によって記述します。 Elispはバイトコンパイルすることによってバイナリを得ることができ、これはinit.elについても同様です。

バイトコンパイルによる実行速度への寄与は少ないですが、コンパイラのワーニング(未定義変数の参照、未定義関数の評価など)を受け取るためにもバイトコンパイルを行いましょう。 ただ、バイトコンパイルした .elcファイルとバイトコンパイル前の .elファイルは .elcの方が優先度が高いので、init.elを編集した後は必ずバイトコンパイルを行うようにしましょう。

初回には leafhydraのインストールが入るのでログが大量に流れます。

コンパイラのワーニングが見辛いようでしたらもう一度実行することをお勧めします。 多くのコンパイラと同じように、出力がなければワーニングやエラーなしで正常にコンパイルできたことを示します。
$ cd ~/.emacs.d
$ emacs --batch -f batch-byte-compile init.el
Importing package-keyring.gpg...
Importing package-keyring.gpg...done
Contacting host: elpa.gnu.org:443
Contacting host: elpa.gnu.org:443
Contacting host: melpa.org:443
Contacting host: orgmode.org:443
Package refresh done
Setting ‘package-selected-packages’ temporarily since "emacs -q" would overwrite customizations
Setting ‘package-selected-packages’ temporarily since "emacs -q" would overwrite customizations
Contacting host: melpa.org:443
  INFO     Scraping files for leaf-autoloads.el...
  INFO     Scraping files for leaf-autoloads.el...done
Checking /home/user/.emacs.d/elpa/leaf-20200817.1226...
...
Compiling /home/user/.emacs.d/elpa/blackout-20200404.1550/blackout-pkg.el...
Compiling /home/user/.emacs.d/elpa/blackout-20200404.1550/blackout.el...
Done (Total of 1 file compiled, 2 skipped)

$ emacs --batch -f batch-byte-compile init.el

"2020年代のEmacs入門", canao3, https://emacs-jp.github.io/tips/emacs-in-2020.html, visited on 2023/07/21.

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

init.elを開く。

package.elの登録リストを更新。

M-x package-refresh-contents

leaf.elでパッケージを管理したいので、;;ここにいっぱい書くの上で以下のコマンドを実行する。

M-x leaf-convert-insert-template [package name]

バイトコンパイルをし、Emacsを開き直す。

このときパッケージのインストール処理が走るのでEmacsが重くなるが気長に待つ。

e. g. Ayuのインストール

私はエディターのテーマとしてAyuを以前から使っていたのでEmacsにも導入したいと思っていました。ということで、参考までに導入します。

  1. 誰かがAyuをEmacsに移植していないか調べる
  2. https://duckduckgo.com/?q=ayu-theme+emacs&atb=v385-4&ia=images
  3. Emacs用に作ってくれた人を見つけた
GitHub - vutran1710/Ayu-Theme-Emacs: ayu-themes for emacs
ayu-themes for emacs. Contribute to vutran1710/Ayu-Theme-Emacs development by creating an account on GitHub.
Melpa

With use-package macro:
(use-package ayu-theme
:config (load-theme 'ayu-dark t))

とあり、Melpaに登録されていることがわかった。つまり、package.elのリストに載っているという意味であり、leaf.elleaf-convertを使えば簡単に導入ができる。

  1. Emacsでinit.elを開く。
  2. M-x package-refresh-contents
  3. M-x leaf-convert-insert-template ayu-theme
  4. 出てきたコードを眺めて:config (load-theme 'ayu-dark t)がなかったので書き込む。括弧の中に書くことに注意。
  5. 保存した後、Emacsを閉じる。
  6. 以下のコードを実行してバイトコンパイルする。
  7. Emacsを開き、数秒間待っているとパッケージがインストールされる。