エマックスソロの2年間
概要
- Emacs Soloは、外部パッケージに依存しないEmacs設定の2周年を迎えた
- 最新のリファクタで「コア」と「自作モジュール」を明確に分離
- init.elはEmacs組み込み機能のみを設定し、lisp/は自作の追加機能を格納
- 35個の独立した自作Elispモジュールを紹介
- 維持の理由・学び・今後の展望についても言及
Emacs Solo 2周年:リファクタと設計思想
- Emacs Soloは、外部パッケージを一切使用しないEmacs設定
- init.elはEmacs本体の機能だけを設定、**lisp/**以下に自作モジュールを配置
- package-installやstraight.el、use-package :ensure tは一切不使用
- Emacs本体と自作コードのみで完結する設定環境
- スクリーンショットや詳細はリポジトリ参照
Emacs Soloを維持する理由
- Emacsの素の機能を徹底的に理解するため
- Emacsリリース間の互換性や壊れにくさの追求
- パッケージリポジトリ依存によるトラブル回避
- 外部要因によるビルド失敗やデバッグ地獄からの解放
- 自作・自己管理の楽しさ
リファクタの概要:コアとエクストラの分離
- 以前は巨大なinit.el一つに全て詰め込んでいた
- 分離前の問題点
- 構成が見通しにくい
- 一部機能だけ使いたい人に不親切
- Emacs本体の設定と自作コードの境界が不明瞭
- 解決策:2層構造へ
- Layer 1: init.el(Emacsコア設定のみ。依存なし)
- Layer 2: lisp/(自作Elispモジュール群。必要なものだけrequire)
init.elの構成と主な設定
- 見出し付きセクションで整理(outline-mode対応)
- 各セクションごとにEmacs組み込み機能をカスタマイズ
- 主な内容
- キーバインド再定義(例:M-oでother-window等)
- window-layout系コマンド(Emacs 31新機能)
- フレーム名の管理、C-z無効化
- バックアップ/オートセーブ先をcache/に統一
- **treesit(tree-sitter)**自動インストールと有効化
- abbrev-modeの独自プレースホルダーシステム
- auth-source設定(~/.authinfo.gpg利用)
- auto-revertによるファイル自動リロード
- compilation-modeでANSIカラー対応
- window管理の強化
- tab-barによるワークスペース管理
- RCIRC/ ERC両IRCクライアントの設定
- icomplete-vertical-modeでの補完強化
- dired/wdiredのカスタマイズ(システム連携、詳細非表示等)
- eshellの高度な設定(履歴共有、プロンプト切替等)
- isearchの拡張
- vc(バージョン管理)の徹底活用と独自拡張
- smerge/diff/ediffの見やすいウィンドウ分割
- eldoc/eglotによるLSP・ドキュメント表示
- flymake/flyspell/whitespace等の診断・可視化
- gnus(メール/ニュース)
- man/minibuffer/newsticker(RSS/ATOM)等
- electric-pair/proced/org/speedbar/time/uniquify/which-key/webjump等
- 各言語モードのtree-sitter/非tree-sitter両対応
lisp/ディレクトリ:35個の自作Elispモジュール
- 各モジュールは独立したElispファイル
- MELPA等の外部パッケージの代替を小型・自作で実装
- provide/requireで簡単に使い回し可能
- 「hacky reimplementation」の精神:シンプル・理解しやすい・日常利用に十分
- 例:emacs-solo-themes(独自カラーテーマ)など
Emacs Soloを通じて得た知見
- Emacs本体の進化(Emacs 31等)で自作polyfillが不要になる場面が増加
- 自作コードの可搬性・保守性が大幅向上
- 壊れにくい・再現性の高い開発環境の実現
- 自分で実装することでEmacsの深い理解を獲得
- 外部依存ゼロの快適さと安心感
今後もEmacs Soloは「最小限の依存・最大の理解・日常利用に最適化」を目指して進化予定。興味があればリポジトリをぜひ参照。