
2026/06/18 21:10
Emacs 31 が目前:毎日使い込んできた変更点
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
いくつかの主要カテゴリが過小評価されているため(完了マシンリー、ウィンドウレイアウトコマンド、ERC 固有の詳細、広範な文法リスト、および追加のクオリティ・オブ・ライフ機能)、改良されたサマリーを推奨します:
改良サマリー: Emacs 31 では、言語サポート、ユーザビリティ、および現代ワークフローに焦点を当てた一連の変革的なアップデートが提供されます。中心的な改善点は、
treesit-enabled-modes を 't' に設定することで、TypeScript、TSX、Rust、TOML、YAML、Dockerfile といった重要な言語に対する Tree-sitter 文法の自動インストールへの移行であり、これにより多くの手動構成が排除されます。ただし、ユーザーは注意すべき事項として、自動インストールされた文法はアーキテクチャによって分離されていない点を認識する必要があります。アーキテクチャ横断の共有構成(例:arm64 における x86_64 バイナリ)では読み込み問題が発生する可能性があります。本リリースではオプトインが要求される新しい実験機能も導入されており、markdown-ts-mode がその一例です。このモードは Org 風のキーバインディング、非 Tree-sitter 言語(Elisp も含む)に対するライブカラー付きコードブロック、ならびにインライン画像表示を提供します。また Eglot も同様地、LSP ドキュメントのフォーマット付きレンダリング用の実験的 markdown-ts-view-mode を獲得しました。
ライブ開発支援は大幅に向上しており、Eldoc at point は現在のカーソル位置に対するヘルプテキストを自動的に表示し、コマンドを呼び出すことなく動作します。さらに
xref-edit-mode は 'E' を押すことで Xref バッファでの直接編集を可能にし、外部 grep 迂回の必要性を取り除きます。ウィンドウ管理は現代化され、Speedbar がサイドウィンドウへ移管され(タイルセットアップでの競合を防ぐ幅制限付き)、バッファーの位置を保持しながらウィンドウ配置を転置、回転、または反転するコマンドが追加されました。
クオリティ・オブ・ライフの改善点も豊富で、新しい完了トグル(
completion-eager-update、completion-eager-display)および改善されたミニバッファ可視完了(minibuffer-visible-completions を 'up-down' に設定)が含まれます。バージョン管理ワークフローは、更新済みファイルの自動非表示(vc-dir-auto-hide-up-to-date)および Jujutsu などのツールで公開済み履歴の書き換えサポートにより恩恵を受けました。ERC は erc-persistent-buffers を通じてプレビューログへの対応と、scrolltobottom が erc-fill-wrap に依存する不具合の修正を受けます。追加ユーザビリティ機能には、ライブキーストローク表示(view-lossage-auto-refresh)、永続 IELM 履歴、バッテリー安全なコンパイル、端末ツールチップ(tty-tip-mode)、ならびに term が行を飲み込む不具合の修正が含まれます。最後に、Emacs 31 では Modus テーマがいくつか同梱されており、デウターアノピーおよびトリターノピー向けに最適化されたバリエーション、ならびにライトモードとダークモード両方用の着色済みバックグラウンドが用意されています。これによりアクセシビリティとビジュアルカスタマイズ性がさらに向上します。本文
Emacs 31 で登場する新機能:パケットなし構成の未来
カールティク・チクマガルール氏による「Emacs をより快適にするバッテリー込みのエディタ」シリーズが執筆されています。同氏は現在版の Emacs に搭載されているがあまり知られていない機能を紹介しています。 本稿では、カールティク氏の記述を踏まえつつ、upcoming( forthcoming)の Emacs 31 で登場する新機能を中心にまとめました。
私は未だ正式リリース前の Emacs 31 を日常的に利用しており、以下の変更点は現在、パケットなし構成(Emacs Solo)で実際に動作している内容です。
⚠️ 免責事項
Emacs 31 はまだ開発・プレリリースフェーズにあります。
- 名前やデフォルト設定は最終リリース直前まで変動する可能性があります。
- 以下の内容は 2026 年中盤時点の動作実績に基づいています。
ブランチまたは master ブランチからビルドしていない方は、これを「次期 Emacs のプレビュー」とお考えください。emacs-31
Tree-sitter が劇的に改善しました
Tree-sitter は、Emacs での言語サポートを根本から変える機能です。以前は手動で文法ソースを追加したり、コンパイル環境を確認したりする必要がありましたが、Emacs 31 ではこれらが不要になりました。
主要な変更点
- 自動切替:
をtreesit-enabled-modes
に設定すると、Tree-sitter バリアントを持つマージンモード(major mode)が自動的に切り替わります。't - 自動インストール: 文法ファイルがない場合でもエラーにはならず、Fetch とビルドを提案するようになります(以前は
パケットの役割でしたが、今ではコア自体が行います)。treesit-auto
構成の簡素化
以前のように各言語の文法位置を定義する必要がなくなりました。
- TypeScript、TSX、Rust、TOML、YAML、Dockerfile などの文法ソースはモードそのものの中に格納されるようになりました。
- Emacs 31 のリリース後には、以下のコードブロックを削除できます。
;; ;; EMACS-31: このブロック全体が不要になります (defclass treesit-language-source () ... ) (treesit-install-language-grammar 'typescript '("path/to/grammar") ... )
注意点(アーキテクチャ互換性)
異なるアーキテクチャのマシン間で Emacs のディレクトリツリーを共有する場合は注意が必要です。
- 原因: 自動インストールされた文法ファイル (
) はアーキテクチャごとに隔離されていません。.so
のファイルとx86_64
のファイルが同じ名前を持つため、片方のマシンでビルドされたバイナリは他方で読み込めません。arm64 - 対策: マシンごとのバイナリ構築を推奨します。
今後の展望
Emacs における Tree-sitter は驚くべきスピードで進化しており、より良い言語サポート、使いやすさ、パフォーマンスの向上が期待されています。
組み込みの markdown-ts-mode(実験的)
Emacs 31 では
markdown-ts-mode がパケットなしで標準搭載されます。これは私が発案・開発に参加し、現在は Stéphane Marks 氏が共同開発者として加わっている機能です。
特徴と機能
- Org ユーザーとの親和性: キーバインドや操作感は Org モードに近く、Markdown の再学習が不要です(見出しナビゲーション、セクション折りたたみ、構造移動など)。
- ライブなコードブロック表示:
- フェンス付きコードブロックは、単なるテキストではなくその言語固有の Major Modeを使用します。
ブロックにはelisp
が適用され、適切な構文ハイライトが得られます。font-locking- 編集可能: コードブロック内のコマンドも基本的に機能します(補完系は未完全)。
- 埋め込み画像表示: 画像リンクがバッファ内でレンダリングされ、図やスクリーンショットを含むドキュメントを快適に閲覧できます。
注意:
は依然として実験的です。markdown-ts-mode
に登録されていないため、auto-mode-alistファイルへの自動切り替えは行われません。.md- 手動でロードするには
を使用するか、M-x load-library 'markdown-ts-modeに追加してください。auto-mode-alist
フィードバック(バグ報告や意見)が機能の安定化に役立ちます。
Eglot と Markdown ツイストモード連携(実験的)
Emacs 31 では Eglot が LSP ドキュメントを同一内部モードでレンダリングする機能を強化しました。
- 整形されたホバードキュメント:
を使用すると、追加パケットなしでフォーマットされたドキュメントを表示できます(依存するのはmarkdown-ts-view-mode
)。markdown-ts-mode - 設定上の注意点:
はノイズ多発のため私は OFF に保っています。eglot-code-action-indications
は廃止され、eglot-events-buffer-size
へ移行される予定です(対応注釈を残してあります)。eglot-events-buffer-config
ポインタごとの Eldoc(文脈ヘルプ)
カーソルが指している内容について、ヘルプテキストを自動的に表示する機能です。
と組み合わせることで、未知のコード内の探索時にガイドされた感覚を得られます。eldoc-echo-area-prefer-doc-buffer
賢く積極的な補完(Completion)
ミニバッファと補完機構に新しいトグルが追加されました。
- 即時更新:
とcompletion-eager-update
を設定すると、タイプ中も補完 UI が即座に更新され、「待つ必要」がありません。completion-eager-display
パケットを使用していない場合でも、単体で鋭い補完体験が得られます。icomplete
- 直感的な移動:
をminibuffer-visible-completions
に設定すると、矢印キーで可視候補を移動できます。'up-down
icomplete の改善
Emacs 31 ではバグ #75784 のパッチが含まれており、以下の機能が追加されました。
- 垂直方向のバッファ内動作: スクロールして補完リストを見ることができます。
- プレフィックスインジケーター: 現在入力中のプレフィックスが明確に示されます。
- これにより、構成内の大規模な互換性ブロック(Workaround)を削除できるようになりました。
;; ;; EMACS-31: これまでの冗長な設定を消せます
ウィンドウレイアウトの体操
ウィンドウを分割したり殺害したりせず、手動でレイアウトを再配置するための新しいコマンドセットです。
: 水平と垂直の配置を入れ替える。transpose
: レイアウト全体を回転させる。rotate
: 左右または上下に反転させる。flip
かつて構築した三分割レイアウトを反対側に戻す際などに便利です。
サイドウィンドウで動作する Speedbar
Speedbar が正式なサイドウィンドウとして動作し、独立したフレームから変更されました。
により、モダンなファイルツリーのようにサイドにドックされます。speedbar-window- タイルレイアウトや単一モニター環境では、旧来のフローティングフレーム動作より優れています(競合を防ぐ幅制限付き)。
VC (バージョン管理) に関する機能改善
いくつかのバージョン管理関連の不具合が修正され、設定が簡素化されました。
:vc-dir-auto-hide-up-to-date
バッファを更新すると、最新のファイルが自動的に非表示になります。vc-dir- これにより
キーハックでの手動更新操作が不要になり、設定ブロックを削除できます。-g
:vc-allow-rewriting-published-history- Jujutsu のようなワークフローや、プッシュ済みの履歴を書き換える
に柔軟に対応します。force-pushing
- Jujutsu のようなワークフローや、プッシュ済みの履歴を書き換える
編集可能な xref バッファ
以前は xref バッファ(他ファイルへの参照先リスト)でも編集操作が制限されていました。Emacs 31 ではこの状況が改善されました。
背景ストーリー
かつて私は、Dired や grep ブファのように xref でも編集 workflow が欲しいと考えました。しかし
xref-query-replace-in-results (r) は正規表現限定であり、自由に編集できませんでした。そのため *xref* から grep-mode にエクスポートする自作コマンド(xref-export-to-grep)を実装していました。
開発者との議論と解決
この問題をメンテナの Dmitry Gutov氏に提案しましたが、「バッファ間移動が必要」「キー操作が複雑」という指摘を受けました。「xref バッファ内でインライン編集ができないのか?」という鋭い問いかけをきっかけに、
xref-edit-mode が開発されました。
- 結果: 追加ステップなしで、xref バッファ内で直接編集できます。
- メリット: グレップへの回り道を廃止し、検索とリファクタリングの効率性が劇的に向上しました。
使い方
で検索を実行(例: FontAwesomeIcon)。C-x p g
キーで編集モードを開始。e- 変更を保存 (
)。C-c C-c
ERC がより整頓される
IRC クライアントである ERC において、以下の改善が行われました。
- ログの挿入タイミング: 新規にオープンされたターゲットバッファに対してのみ以前のログを挿入し、チャネルへの再接続時に望ましい動作になります。
- 依存関係の解消:
モジュールがscrolltobottom
に依存しないため、旧バージョン用の設定コードが不要になりました。erc-fill-wrap
QoL キャンプ(生活の質の微調整)
以下の小さな変更は日常使いを快適にするものです。
:kill-region-dwim- 領域選択なしで
を押した場合でも、単語を逆方向に殺害しエラーを出さず、「マーク未選択」のエラーを防ぎます。C-w
- 領域選択なしで
:view-lossage-auto-refresh
(キーバインド履歴表示)がライブビューとなり、共有画面で指しているキーが見やすくなります。C-h l
:ielm-history-file-name- IELM のセッションは再起動後も保存され続きます(シェルや comint 同様に)。
:native-comp-async-on-battery-power nil- ラップトップの充電時に背景でのネイティブコンパイルによるファン騒音を防ぎます。
:tty-tip-mode- ターミナルエミュレータ内にツールチップを表示し、非グラフ化環境での使いやすさ向上。
特別表彰:ターミナル表示の劇的改善
Emacs 31 では
term と ansi-term の挙動が根本的に改善されました。
- 前問題: これらのバッファは行(ライン)を飲み込み、フルスクリーンアプリケーション(htop, nethack など)の再描画時に画面が混乱し、プログラムが正しく動作しないことがありました。
- 新挙動:
が正しく再描画され、行を失うことなく高機能なターミナルアプリを実行できます。term- これにより、外部ターミナルエミュレータを使う最後の理由の一つを取り除かれました。
特別表彰:Modus テーマが標準搭載!
Protesilaos 氏の貢献により、Emacs に Modus テーマシリーズが標準で利用可能になりました。 デウターノピア(緑色色覚異常)、トリトノピア(青色色覚異常)の視認性も考慮されています。
使用できるテーマリスト
- 白色背景向け:
,modus-operandi
,modus-operandi-deuteranopia
,modus-operandi-tintedmodus-operandi-tritanopia - 黒色背景向け:
,modus-vivendi
,modus-vivendi-deuteranopia
,modus-vivendi-tintedmodus-vivendi-tritanopia
結論:マスター(最新開発版)を走動する必要はあるのか?
未リリースの Emacs を日常で使う意義について。
- 箱の中を知りたいから: パケットなし構成を使用する者は、コアに何が含まれているかを知っておく必要があります。
- 静かな喜び: コアが手動で作っていた機能(自作コマンドなど)を吸収し、設定ファイルが短くなっていくことは Emacs ユーザーの大きな楽しみです。
Emacs 31 が正式リリースされれば、上記で示したように山ほどのコードブロック(自作スニペット)を削除でき、設定はさらに簡素化されます。
詳しくは「Emacs Solo init.el」を参照してください。
追記(2026 年 6 月 18 日): Stéphane Marks 氏による慎重な校正と事実関係の訂正に対して感謝申し上げます。