0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

臆病者のためのEmacs入門〜2025年春に愛を込めて

Last updated at Posted at 2025-03-01

震える手で Emacs を起動しよう

この記事は、

  • Emacs に憧れを抱きながらも、その敷居の高さゆえに最初の一歩を踏み出す勇気を持てない
  • 過去に何度も Emacs に入門しようとしたが、そのたびに挫折を繰り返し、もはや起動する勇気すら持てない

......そんな臆病者のための Emacs 入門記事です。

ほとんどのエンジニアがプログラミングエディタに VSCode を選ぶ現代にあって、あえて Emacs を選ぶ理由があるとすれば、それは「なんとなくカッコいいから」という憧れだけでしょう。

ドナルド・クヌース(Donald Knuth)、グイド・ヴァン・ロッサム(Guido van Rossum)、まつもとゆきひろ(Matz)、スティーブ・イエギ(Steve Yegge)など、錚々たる顔ぶれが揃いも揃って Emacs 推しと聞いて、「じゃあ俺も」と憧れを抱いてしまったと。

ところが、Emacs はそんなピュアな憧れを一蹴します。「なんとなくカッコいい」などという軟派で脆弱な動機だけでは、エベレストより高い入門障壁を乗り越えられないのです。

でも、名だたるハッカーたちが愛用するのには、それなりに理由があるはず。
それを知りたい、俺も使いたい、でも......

この記事は、そんな臆病者のための Emacs 入門記事です。

インストール

Emacs のインストールは簡単です。Windows 版はインストーラ付きのバイナリパッケージが配布されていますし、Mac 版も専用のパッケージが配布されていますし、Linux 版は apt でインストールできます。腕に覚えのある人は、ソースコードからビルドしてもよいでしょう。

インストールの敷居は低いので、各自好きな方法でインストールしてください。

設定ファイル

Emacs の設定は、すべて ~/.emacs.d/init.el に、Emacs-Lisp と呼ばれるプログラミング言語で記述します。

......プログラミングに入門したくてエディタを選んだのに、そのエディタを使うためにプログラミング言語を1つ覚えなければならないのか......などと悲観する必要はありません。Emacs の設定例などいくらでも落ちているので、パクればいいだけです。

ここでは、適当なエディタ(VSCode でいいですよ!)で ~/.emacs.d/init.el を開いて、下記をコピペしておきましょう。

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 '(("gnu"   . "https://elpa.gnu.org/packages/")
                       ("melpa" . "https://melpa.org/packages/")
                       ("org"   . "https://orgmode.org/elpa/")))
  (package-initialize)
  (unless (package-installed-p 'leaf)
    (package-refresh-contents)
    (package-install 'leaf))

  (leaf leaf-keywords
    :ensure t
    :init
    (leaf hydra :ensure t)
    (leaf blackout :ensure t)

    :config
    (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)))

(leaf cus-edit
  :doc "tools for customizing Emacs and Lisp packages"
  :tag "builtin" "faces" "help"
  :custom `((custom-file . ,(locate-user-emacs-file "custom.el"))))

;;; ここに各自好きな設定を書く

(provide 'init)

この記述は「おまじない」です。なんのこっちゃ分からなくても構いません。Emacs に慣れてくると自動的に知ることになるので、いまは脳死でコピペしておいてください。

起動

それでは Emacs を起動します。初回起動時は少し時間がかかりますし、ずらずらと警告が表示されることがありますが、怯まずに待ちましょう。

下記ようなウィンドウが開けば起動成功です。ようこそ Emacs の世界へ!

スクリーンショット 2025-03-01 11.20.03.png

外観の設定

さて、これからどんどん Emacs を使っていきたいのですが、その前にやっておきたいことがあります。それは外観の設定です。

Emacs の初期状態では見た目がクソダサいので、使っていて気分がアガりません。Emacs を使い続けるモチベーションを上げるためにも、外観をカッチョよく仕上げておきましょう。

~/.emacs.d/init.el の「;;; ここに各自好きな設定を書く」の部分に、下記の記述を追加し、Emacs を再起動してください。

init.el
(leaf doom-themes
  :doc "An opinionated pack of modern color-themes."
  :req "emacs-25.1" "cl-lib-0.5"
  :tag "faces" "themes" "emacs>=25.1"
  :url "https://github.com/doomemacs/themes"
  :ensure t
  :config
  (load-theme 'doom-dark+ t)
  (set-frame-parameter nil 'alpha 92))

どうでしょうか? 背景が少し透過された、下記のようなウィンドウが開けば成功です。これでさっきよりは見た目がマシになりました。

スクリーンショット 2025-03-01 11.38.39.png

なお、この外観は「doom-dark+」というテーマを適用したものです。どんなテーマがあるかは doom-themes の公式レポジトリにリストがあるので、好きなテーマを選ぶといいと思います。

フォントの設定

次に、フォントを設定しておきたいと思います。ここでは、Bizin ゴシックを使いたいので、init.el に下記を追記します。

init.el
(set-frame-font "Bizin Gothic 18")

当然ですが、フォントはあらかじめ OS にインストールされている必要があります。

プログラミングフォントとして名高かった Ricty Diminished はサポートが終了したので、個人的には、Bizn ゴシックか PlemolJP の二択ではないかと思います。

ちなみに、PlemolJP を使いたい場合は、以下のように設定します。

init.el
(set-frame-font "PlemolJP light 18")

フォントが大きすぎる場合は、「18」の値を小さくしてください。

キーバインド

さて、外観をカッコよくし、フォントも綺麗になったので、気分はアゲアゲのはずです。ここで、ようやく本格的に Emacs を触っていきましょう。

Emacs の特徴の1つとして、独特の「キーバインド」が挙げられます。これは特定のキー操作にコマンドや機能を割り当てる仕組みのことで、簡単に言うと、キーボードショートカットのことです。

キーバインドに習熟すれば、すべての操作をキーボードで完結させることができるため、マウスに手を伸ばす必要がなくなります。これによる作業効率の良さが、多くのハッカーたちを魅了する理由の1つです。

軽くググればキーバインドの一覧が出てきますが、これらを全部覚える必要はありません。Emacs を辛抱強く使っているうちに、自分にとって有用なキーバインドだけが体に染み込み、残りは淘汰されていきます。

なお、Emacs で困ったら C-g を押してください。連打しても構いません。これは緊急脱出ボタンです。「困ったらとにかく C-g」ですので、これだけは覚えておきましょう。

Emacs で設定ファイルを編集

先ほどから編集している init.el を Emacs で開いてみてください。ファイルを開くキーバインドは C-x C-f です。

これを押すと、ウィンドウの下端領域(「ミニバッファ」と呼びます)でファイル名の入力を促されるので、~/.emacs.d/init.el と入力しましょう。

スクリーンショット 2025-03-01 14.15.37.png

これまでは、他の適当なエディタ(VSCode とか!)で init.el を編集してきたと思いますが、これからは Emacs で Emacs の設定をいじっていきましょう。

なお、編集するにあたって最低限覚えておきたいキーバインドは、次の4つです。

キーバインド 機能
C-x C-s 変更を保存
C-@ マークセット
M-w コピー
C-y ペースト

設定例

ここでは、Emacs を活用するにあたっておすすめできる設定例を紹介します。なお、私の設定は GitHub にアップしているので、参考にしてください。

行番号の表示

プログラミングをするなら必須の設定です。下記の記述を追加しておきましょう。

init.el
(global-display-line-numbers-mode t)

起動時のウィンドウの大きさの定義

下記の記述を追加することで、Emacs を起動した時に、ウィンドウをどの位置にどれくらい広げるかを設定できます。サイズ・位置の数値については、適当にいじってください。

init.el
(setq default-frame-alist
      (append (list
               ;; サイズ・位置
               '(width . 200)           ; 横幅(文字数)
               '(height . 65)           ; 高さ(行数)
               '(top . 50)              ; フレーム左上角 y 座標
               '(left . 1000)            ; フレーム左上角 x 座標
               )
              default-frame-alist))

シェル

下記の記述を追加すれば、C-' を押すことでウィンドウが二分割され、下半分でシェルを操作できるようになります(Mac 版 VSCode でいえば Command+j と同じです)。

C-' のキーバインドは私固有の設定なので、global-set-key の行にある (kbd "C-'") の記述を適当に変えてキーバインドを変更してください。

なお、下記の設定は Windows 版 Emacs では正しく動作しませんので注意が必要です。

init.el
(defun toggle-zsh-window ()
  (interactive)
  (if (get-buffer-window "*terminal*")
      (progn
        (switch-to-buffer (other-buffer))
        (delete-window (get-buffer-window "*terminal*")))
    (progn
      (split-window-below)
      (other-window 1)
      (term "/bin/zsh")
      (rename-buffer "*terminal*"))))
(global-set-key (kbd "C-'") 'toggle-zsh-window)
(add-hook 'term-mode-hook
          (lambda ()
            (define-key global-map (kbd "C-'") 'toggle-zsh-window)))

シェル.gif

自動補完(company)

プログラミングにおいて、自動補完はもはやなくてはならないものだと思います。もちろん、自動補完は Emacs でも可能です。下記の設定を追加しておきましょう。

init.el
(leaf company
  :doc "Modular text completion framework"
  :req "emacs-24.3"
  :tag "matching" "convenience" "abbrev" "emacs>=24.3"
  :url "http://company-mode.github.io/"
  :emacs>= 24.3
  :ensure t
  :leaf-defer nil
  :bind ((company-active-map
          ("M-n" . nil)
          ("M-p" . nil)
          ("C-s" . company-filter-candidates)
          ("C-n" . company-select-next)
          ("C-p" . company-select-previous)
          ("C-f" . company-complete-selection))
         (company-search-map
          ("C-n" . company-select-next)
          ("C-p" . company-select-previous)))
  :custom ((company-idle-delay . 0)
           (company-minimum-prefix-length . 1)
           (company-transformers . '(company-sort-by-occurrence)))
  :global-minor-mode global-company-mode)

自動補完.gif

Git インターフェース(magit)

magit があれば、git のコマンド操作から解放されます。使い方は magit チュートリアルを読んでください。

init.el
(leaf magit
  :ensure t
  :bind
  (("C-q C-f" . magit-status)))

Git 変更点の明示(Git Gutter)

Git Gutter があれば、前回 Commit からの変更点が一目瞭然になります。必ず入れておきましょう。

init.el
(leaf git-gutter
  :ensure t
  :global-minor-mode global-git-gutter-mode
  :custom
  ((git-gutter:added-sign . "+")
   (git-gutter:deleted-sign . "-")
   (git-gutter:modified-sign . "=")))

自動再読み込み

git でブランチをスイッチしたときなど、Emacs の外部でファイルの内容が変更された場合に、自動的に再読み込みして変更内容を反映させる設定です。

init.el
(global-auto-revert-mode t)

タブ

下記の記述を追加すれば、VSCode のように Emacs をタブ化できます。

init.el
(leaf tab-bar-mode
  :init
  (define-key global-map (kbd "C-<up>") 'tab-bar-switch-to-prev-tab)
  (define-key global-map (kbd "C-<down>") 'tab-bar-switch-to-next-tab)
  (define-key global-map (kbd "C-t") 'tab-bar-new-tab)
  (define-key global-map (kbd "C-w") 'tab-bar-close-tab)
  :custom
  ((tab-bar-new-tab-choice . "*scratch*"))
  :config
  (tab-bar-mode t)
  (face-spec-set 'tab-bar-tab '((((background light)) (:background "gold")) (((background dark)) (:background "#808080")))))

タブ化.gif

GitHub Copilot

Emacs でも Copilot が使えます。node.js が必要になるので、npm で 18 以上をインストールしてください。

init.el
(leaf copilot
  :doc "An unofficial Copilot plugin"
  :req "emacs-27.2" "s-1.12.0" "dash-2.19.1" "editorconfig-0.8.2" "jsonrpc-1.0.14" "f-0.20.0"
  :tag "copilot" "convenience" "emacs>=27.2"
  :url "https://github.com/copilot-emacs/copilot.el"
  :added "2025-02-27"
  :emacs>= 27.2
  :ensure t
  :bind  (copilot-completion-map ("C-f" . copilot-accept-completion)))

メニューバーとツールバーを非表示にする

キーバインドに習熟すれば、メニューバーとツールバーは不要になるでしょう。下記の記述を追加することで、これらを非表示にできます。

なお、初級者の間は表示させておくのが無難だと思います。自分でわざわざ敷居を上げる必要はないですからね。

(menu-bar-mode 0)
(tool-bar-mode 0)

おわりに

Emacs は 50 年以上の歴史があるエディタです。長い歴史に堪えて、名だたるハッカーたちに愛され続けながらここまで発展してきたのには、やはりそれなりの理由があります。

Emacs に少しでも憧れを抱いている人は、少し背伸びしてその歴史に触れてみることをおすすめします。キーバインドに慣れてきたころには、もう VSCode に戻れない体になっているでしょう。

本記事が、臆病者たちが Emacs の世界に足を踏み入れるきっかけになれば幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?