VimからEmacsに移った経緯
もともとはVimを1年ほど使っていました。
自分がVimを触っていた当時は、Python、Node.js、Deno、Rubyなど、さまざまな言語でプラグインが作られていました。
当時の自分の会社では、そのあたりが規約や運用方針と少し相性が悪く、より一本化しやすい環境を求めてSpacemacs経由でEmacsに移行しました。今はSpacemacsも離れて、普通のバニラEmacsをEmacsキーバインドで使っています。
そんな流れで、ここ数年はずっとEmacsを使ってきました。
その後、改めてNeovimを触ってみた
ただ、今のNeovimは当時のVim系環境とはかなり印象が違います。
設定やプラグインまわりはLuaベースでかなり整理されていて、少なくとも自分が昔感じていた「いろいろな言語が混ざっていて運用しづらい」という感覚はだいぶ薄れていました。
そこに加えて、Neovideのヌルヌル動く動画を見て、久しぶりにNeovimとNeovideを触ってみたくなりました。
実際に触ってみると、Neovim + Neovide は正直かなり良かったです。
軽くて見た目も良く、起動して触った瞬間に「これは気持ちいいな」と思いました。LazyVim系の構成を入れてみると、プラグインの完成度も高く、LSP周りも含めて開発体験はかなり洗練されています。
それでも、最終的に自分が常用しているのはEmacsでした。
この記事は「EmacsのほうがNeovimより上」と言いたい話ではありません。むしろ逆で、編集体験や開発体験だけを切り取ると、今のNeovimは本当に強い と思っています。
では、なぜ戻らなかったのか。
答えはシンプルで、いま自分が一番時間を使っているのが、もはや“コーディングそのもの”ではない と気づいたからです。
CodexやClaude Codeを使うようになってから、エディタに求めるものが少し変わりました。コードを書く・編集する時間は依然ありますが、以前よりも「レビューする」「タスクを整理する」「メモを残す」「Gitを操作する」「ファイルを横断して調べる」といった時間の比率がかなり増えています。
その結果、Neovimの強さが刺さる場面よりも、Emacsの“編集以外の総合力”が効く場面のほうが多かった、というのが今の結論です。
先に結論だけ書くと、いま自分がEmacsに残っている理由は次の5つです。
- MagitでGit操作が速い
- Orgでタスクとメモを一元管理しやすい
- ディレクトリ移動や検索の導線を組みやすい
- Embarkで「今ある候補に対して次に何をするか」をつなげやすい
- 小さな自作関数をその場で育てやすい
この記事では、特に「編集以外で効いている部分」に絞って、その理由を書いていきます。
1. Magit
Emacsを使い続ける理由として、まず外せないのがMagitです。
Gitクライアントとして有名ですが、単に「EmacsからGitを触れる」だけではなく、*操作の流れが気持ちよく整理されている* のが強いです。ステージング、コミット、rebase、stash、blameあたりまで、頭の中の操作モデルとUIがかなり噛み合います。
たとえば「差分を確認しながら一部だけstageして、そのままコミットして、必要なら直前コミットを調整する」といった流れが、ほとんど引っかからずにつながります。CLIでもできますが、Magitはその一連の流れをバッファ上で崩さず回せるのが強いです。
Neovimにも lazygit があります。見た目の良さや軽快さは確かに魅力です。ただ、自分の感覚では 見た目はlazygit、操作の一貫性はMagit という印象です。
関連する議論として、Redditでも比較スレッドが立っていました。ここに関しては好みの部分もあるかと思いますので、実際に触ってみて判断するのが良いと思います。
スクリーンショット
特定の範囲だけステージングしたりできます。
また、CodexやClaude codeを活用するとコードレビューの頻度が増えます。通常のdiffツールでは差分が分かりにくいことがありますが、difftasticというツールとMagitを統合することで、構造的な差分が表示でき、レビューをしやすくしています。
2. Org
Orgは、AIコーディング時代のEmacsで特に価値が落ちていない機能だと思っています。自分の主な用途は3つです。
2-1. org-agenda + org-capture によるタスク管理
org-capture で思いついたタスクを即追加し、そのままスケジュール設定まで行う。あとで org-agenda を開けば、今日やること、期限が近いもの、詰まっているものを一覧で見られます。
AIにコードを任せられるようになるほど、人間側は「何をいつやるか」の整理が重要になります。自分にとってOrgは、まさにそこを支える道具です。
他にもっと良い設定があるかもしれませんが、org-captureとorg-agendaを紐付ける私の設定は下記のとおりです。
(setopt org-default-notes-file "~/org/inbox.org" ; org-captureで追記する場所
org-agenda-files '("~/org/") ; org-agendaが参照する場所
)
2-2. initファイルの管理
Emacsの設定は通常 init.el で管理しますが、自分はOrgファイルに設定を書いて、 org-tangle で init.el を生成する運用にしています。
設定と説明を同じ場所に書けるので、「なぜこの設定を入れたのか」を残しやすいのが利点です。あとから見返したときにも理解しやすく、設定ファイルそのものがドキュメントになります。
「設定を書く」と「設定の意図を記録する」を同時にこなせるのは、Orgならではの気持ちよさだと思っています。
2-3. Denoteでメモ管理
denote を使ってメモも管理しています。
案件名、企業名、調査対象などの単位でメモを残していくと、あとで検索しやすいのが本当に便利です。AIに調べものやたたき台作成を任せても、最終的に自分の知識として残す場所が必要になるので、ここも価値が落ちません。
3. bookmark + dired + consult-dir + vertico + orderless + migemo
これは派手さはないですが、実務ではかなり効いています。
仕事をしていると、ローカルフォルダ、共有フォルダ、案件ごとの資料置き場など、とにかく「よく開く場所」が増えていきます。最初はエクスプローラーのショートカットや履歴で回せても、案件数が増えるとだんだん破綻します。
それぞれの役割はざっくりこんな感じです。
-
dired: ディレクトリを起点に作業する -
bookmark: よく使う場所を保存する -
consult-dir: 候補から移動先ディレクトリを選ぶ -
vertico+orderless: 候補の絞り込みを気持ちよくする -
migemo: 日本語名の場所でもローマ字で探しやすくする
そこで自分は、
-
diredでよく開く場所を開く -
bookmarkを付ける - あとは
consult-dirで絞り込んで飛ぶ
という運用にしています。
vertico と orderless で候補を気持ちよく絞り込みつつ、 migemo も組み合わせているので、ローマ字検索でも目的の場所へかなり素早くたどり着けます。
しかも bookmark だけでなく、今まで開いた場所も候補に上がるので、ディレクトリ移動のストレスがかなり減りました。
地味に重宝しているのが、 dired の C-x C-q です。ファイル一覧をそのまま編集可能にして、複数ファイル名をまとめて直せるのが便利です。
さらに、下記の設定をすると再帰的にミニバッファを呼び出せるようになります。これを入れておくと、コピーや移動、 find-file のような「目的のファイルを探す作業」でも、 consult-dir で先にディレクトリを絞り込んでから対象ファイルを選べるので、日常操作のテンポがかなり良くなりました。
(setopt enable-recursive-minibuffers t)
別ディレクトリにファイルをコピーする例:
またdired上でEキーを押下することで外部アプリの呼び出しもできます。
diredで該当のファイル上でEキーを押下してエクセルやPDF等を開いたり、 . や .. 上でEキーを押下してエクスプローラーなどを開いたりしています。
AIコーディングと関係ないように見えて、こういう周辺速度が高いと、最終的な作業効率にしっかり効いてきます。
4. Embark
embark が便利なのは、今見えている候補に対して、その場で次の行動を選べる ところです。
コマンド候補、ファイル候補、検索候補などをまとめてバッファに出力して、あとで参照できるのも助かっています。たとえば検索候補を一覧化して、そこから別バッファで確認したり、対象をまとめて処理したりといった流れが自然につながります。
「いまこの候補群に対して何ができるか」を引き出しやすくなるので、Emacs全体の操作密度が一段上がる感覚があります。
Emacsって、慣れるほど「点の機能」より「機能同士の接続」が強いと感じるのですが、Embarkはその象徴っぽいパッケージです。
5. その他: 自作関数を雑に育てやすい
Emacsの強みとして、個人的にかなり大きいのが「自作関数の作りやすさ」です。
Lispに慣れる必要はありますが、今はAIの助けもあるので、以前よりかなり敷居は下がっています。しかも interactive を付ければ、すぐに M-x から自作コマンドとして呼べる。この距離感がとても良いです。
自分は業務で、DBの検索結果を WHERE IN 句に整形して調査したい場面がたまにあります。そのたびに手作業で整えるのは面倒なので、専用の関数を作って使っています。
(defun my/replace-region-with-in-clause (start end)
"選択範囲 (START から END まで) の内容をSQLのIN句に変換し、元の選択範囲を置換します。"
(interactive "r") ; リージョンがアクティブな場合に呼び出し可能
(let* ((region-content (buffer-substring-no-properties start end)) ; 選択範囲の文字列を取得
(records (split-string region-content "\n" t)) ; 改行で分割してリスト化 (空行は無視)
(unique-records (delete-dups records)) ; 重複を削除
;; 各レコードをシングルクォートで囲む
(quoted-records (mapcar (lambda (record) (format "'%s'" record)) unique-records))
;; IN句の文字列を生成
(in-clause (format "IN (%s)" (mapconcat 'identity quoted-records ", "))))
(delete-region start end) ; 元の選択範囲を削除
(insert in-clause))) ; 生成したIN句を挿入
こういう「自分の業務にだけ刺さる小さな便利」を、その日のうちにコマンド化できるのはかなり強いです。
汎用エディタとしての完成度とは別に、*自分専用の作業台として育てやすい* のがEmacsの魅力だと思っています。
6. 最後に
UI、編集機能、LSPに関しては、Neovimも非常に強いです。そこはもう「Emacsだけの強み」とは言いにくいと思っています。場合によってはNeovimのほうが洗練されていると感じる場面が多々あります。
それでも自分がEmacsを使い続けているのは、編集機能そのものではなく、編集以外の作業まで含めた日々の運用 に強いからです。
CodexやClaude Codeを使うほど、人間の仕事は「どう書くか」から「どう回すか」に少しずつ寄っていきます。
そのとき、
- Gitを気持ちよく扱える
- タスクを整理できる
- メモを育てられる
- ファイルやディレクトリを素早く横断できる
- 必要なら自作関数で雑務をすぐ潰せる
このあたりがまとめて効いてくるEmacsは、思っていた以上にAI時代と相性が良いツールでした。
Neovimを触って「やっぱりすごいな」と感動したからこそ、逆に自分がEmacsに求めていた価値もはっきり見えた気がします。
今、AIが浸透してきて開発の状況が大きく変わってきています。一度自分のツールを見なおしてみると新しい発見があるかもしれません。












