山下泰平の趣味の方法

これは趣味について考えるブログです

Emacs と他のエディタとの違い

Emacs と他のエディタとの違い

結論

Emacs はあらゆるものがテキストであるという一貫性があり、すべてのバッファが等価に存在するという世界観で作られているので、『様々な場所にあるファイルを開き、気が向いた作業をちょろちょろしながら過集中が起きるのを待つ』という人には向いている。

長い余談

ここ数年、私は Emacs は終わってるとずっと思っていて、移行すべきだと考えていた。過去に3回くらいしかないが、他人に Emacs について聞かれると、こんなものに手を出したら足を洗えなくなるから、興味を持たないほうがいいと返答していた。

そもそも最近はエディタの性能みたいなものはどうでもよくなってきていて、AI に最適化されてるのを使うみたいになってきていると思う。ただ私の用途だとエディタの性能が重要になってくる。

こういう前提があって、大きな作業が一区切りついたので、Emacs の init.el を整理したんだけど、これはもう新規ユーザーを増やすの無理だろという感想になり、ますます危機感が募ってしまった。手始めに多少は知っている Neovim について調べたところ、こちらもひどかったので、色々とモダンエディタを試したところ、思ってたのと少し違う次のような結論が出た。

ほとんどの人は Emacs を使う必然性はないけど、『様々な場所にあるファイルを開き、気が向いた作業をちょろちょろしながら過集中が起きるのを待つ』という人には Emacs が向いてると思われる。

Emacs はあらゆるものがテキストであるという一貫性があり、すべてのバッファが等価に存在するという世界観なので、例えばエッセイや料理レシピ、論文や SNS 向け他人の悪口などを書きながら、気が向いたらコードを書くというようなことが自然にできるが、そんな奴がどの程度の数いるのかは不明である。

別のエディタはどうなのか表にすると、だいたいの次のようになると思う。

エディタ / ツール コンセプト / 定義
VSCode系 コードを書く場所
Zed コードを高速で書く場所
Vim/Neovim テキストを編集する言語
Emacs テキストを操作する環境

VSCode系は「プロジェクト」単位で作業する「軽量IDE」みたいな認識、zed は速い。GPUアクセラレーション? リアルタイムコラボレーション機能もあるみたいだけど試してない。

Helix も速い。しかしモーダルエディタが好みではないので正しい評価はできない。なぜ好みでないのかといえば、日本語だとモードの状態に加えて IM の状態と、私の場合は Qwerty 配列か Dvorak 配列かを常に把握する必要があり、認知負荷が大きいからなんだけど、これは思い込みかもしれない。設定とかでなんとかなるんじゃないかな。Neovim 大昔に使ったきりなんだけど、Emacs から移行するのはあり得ないので今回は試していない。

拡張については VSCode で足りないというのは、ほぼあり得ない。ただし Emacs は全てが Lisp なので、理論上は何でもできる。例えばキー入力も目茶苦茶できる。OS側のIMEを無視できる。日本語入力+ミニバッファのみ dvorak、キーバインド、ターミナルは qwerty というのも可能、で特殊な用途だと Emacs のほうが適しているかもしれない。

あと init.el を AI と書き直すうち、「新規ユーザーを増やすの無理だろ」と思うと同時、案外 Emacs が生き残りそうだなとも感じた。多分だけど elisp は AI にとって書きやすい言語なので、ユーザ数は少なくなるけど AI が順調に進化し続ければ、少なくとも私は不便しなさそうである。こういう結論もあって Emacs でいいかなと思ってる。

使いたくなった人は

こんなものを読んで Emacs を使いたい! となるとは思えないが、万が一使いたくなった人が普通に Emacs をダウンロードして起動すると意味不明すぎて嫌な気持になると思うので、いくつかおすすめのものを紹介しておく。

MiniApollo/kickstart.emacs

  • コンセプト: 「独自の構成を作成するための」出発点。
  • 特徴:
    • 単一ファイル構成: init.org(またはinit.el)で簡潔。
    • Neovimからの影響: kickstart.nvim にインスパイアされている。Evilモード(Vimキーバインド)がオプションで簡単に有効化できる。
    • 標準的なパッケージ構成: Vertico, Orderless, Consult, Marginaliaといった現代的な定番パッケージを採用。
    • 学習用途: コード内に説明が多く、初心者が設定方法を学ぶのに適している。

Centaur Emacs (seagle0128/.emacs.d)

  • コンセプト: 「Fancy and Fast」 リッチな機能、高速起動。
  • 特徴:
    • 多機能・全部入り: 多くのプログラミング言語(C/C++, Python, Web系, Go, Rust等)の設定が最初から組み込まれている。
    • 中国語サポート: CJK(中国語・日本語・韓国語)環境への配慮がある。
    • モダンなUI: 現代的なIDEに近い構成。

jamescherti/minimal-emacs.d

  • コンセプト: 「Better Emacs Defaults and Optimized Startup」
  • 特徴:
    • ゼロパッケージ・ゼロ強制: init.elearly-init.elのみ。パッケージやモードを強制せず、ユーザーの制御下に置く。
    • 高速起動: 146パッケージを使用しても0.22秒で起動。
    • 段階的カスタマイズ: pre-init.elpost-init.elpre-early-init.elpost-early-init.elで拡張する設計。
    • 充実したドキュメント: READMEにVertico、Corfu、Evil、Eglot、org-mode等の設定例が豊富。初心者が「何を追加すべきか」を学べる。

Emacs Bedrock (ashton314/emacs-bedrock)

  • コンセプト: 「Emacs 入門」。学習用の最小限設定。
  • 特徴:
    • 標準機能重視: Emacs 29以降の標準機能(Eglot, Tree-sitter, use-package)を活用し外部パッケージ依存を減らしている。
    • ブラックボックスの排除: 標準的なEmacsの作法。
    • 教育的設計: コード内に詳細なコメントあり。設定方法を学べる。

NANO Emacs (rougier/nano-emacs)

  • コンセプト: 「Emacs made simple」 シンプル
  • 特徴:
    • UI/UXの刷新: ヘッダーラインやモードラインをシンプルに。
    • 一貫したデザイン言語: 画面要素の統一。
    • ミニマリズム: 書くことや読むことに集中できる。

ichibeikatura/emacs-config

  • コンセプト: 私の設定、フォントとかは参考になるかも
  • 特徴:
    • 日本語入力の最適化: DDSKK + yaskkserv2、EPWING辞書との連携、Dvorak配列に合わせたキー設定。
    • 執筆支援機能: 西暦・和暦変換、旧字体・新字体変換、縦書きEPUB変換スクリプトとの連携など。

NANO Emacs は見た目はシンプルだけど設定は複雑、自分でカスタマイズしたくなったら別の使ったほうが良いかも。私のは DDSKK + yaskkserv2、EPWING辞書との連携させたり、フォントの設定は少し役立つかもしれないが、 Dvorak 配列も Emacs と同じくらい慣れないほうが良いと思う。