私のEmacs設定を公開する
はじめに
Claude Code IDE for Emacsを導入した際に、既存の設定を見直して一から作り直すことにしました。 この記事では結構いい感じになったので使用しているパッケージを紹介していきます。
設定ファイル構成
設定をモジュール化し、~/.emacs.d/lisp/配下に機能ごとにファイルを分けて管理しています。
~/.emacs.d/
├── init.el # エントリーポイント
└── lisp/
├── init-base.el # 基本設定・キーバインド
├── init-ui.el # UI・テーマ
├── init-completion.el # 補完システム
├── init-editor.el # エディタ機能
├── init-navigation.el # ナビゲーション
├── init-lsp.el # LSP設定
├── init-languages.el # 言語別設定
└── init-tools.el # ツール
init.el - エントリーポイント
init.elではパッケージマネージャーの設定と、各モジュールのインポートを行っています。
パッケージマネージャー
Elpacaを使用しています。モダンなパッケージマネージャーで、非同期インストールに対応しています。
init.elの前半でElpacaのブートストラップコードを実行し、パッケージ管理の基盤を整えています。
モジュールのインポート
パッケージマネージャーの設定後、各機能モジュールを順次読み込みます。
(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory))
(require 'init-base) ; 基本設定・キーバインド
(require 'init-ui) ; UI・テーマ
(require 'init-completion) ; 補完システム
(require 'init-editor) ; エディタ機能
(require 'init-navigation) ; ナビゲーション
(require 'init-lsp) ; LSP
(require 'init-languages) ; 言語別設定
(require 'init-tools) ; ツール
init-base.el - 基本設定
recentf
最近開いたファイルの履歴を管理するパッケージです。組み込みパッケージで、ファイルの再オープンが簡単になります。
(use-package recentf
:config
(recentf-mode 1)
(setq recentf-max-menu-items 50)
(setq recentf-max-saved-items 1000))
init-ui.el - UI・テーマ
doom-themes
人気のあるテーマコレクションです。doom-oneテーマを使用しています。
(use-package doom-themes
:ensure
:config
(setq doom-themes-enable-bold t
doom-themes-enable-italic t)
(load-theme 'doom-one t)
(doom-themes-org-config))
nerd-icons
アイコンフォントを提供するパッケージです。doom-modelineで使用します。
doom-modeline
モダンで見やすいモードラインです。各種情報を視覚的に表示してくれます。
(use-package doom-modeline
:ensure
:init (doom-modeline-mode 1)
:config
(setq doom-modeline-height 25
doom-modeline-icon t))
rainbow-delimiters
括弧を階層ごとに色分けして表示するパッケージです。プログラミング時に非常に便利です。
(use-package rainbow-delimiters
:ensure
:hook (prog-mode . rainbow-delimiters-mode))
whitespace
行末の空白を視覚化するパッケージです。余計な空白を見つけやすくなります。
init-completion.el - 補完システム
vertico
ミニバッファの補完UIを強化するパッケージです。候補を縦に並べて表示します。
(use-package vertico
:ensure
:init
(vertico-mode)
:config
(setq vertico-count 30))
orderless
柔軟な補完スタイルを提供します。スペース区切りで複数のキーワードで絞り込みができます。
consult
検索やバッファ切り替えを強化するパッケージです。consult-lineで高速な検索が可能になります。
(use-package consult
:ensure
:bind (("C-s" . consult-line)
("C-x b" . consult-buffer)
("M-g g" . consult-goto-line)
("C-x C-b" . consult-recent-file)
("C-x C-i" . consult-projectile)))
company
コード補完のUIを提供するパッケージです。自動的に補完候補を表示してくれます。
(use-package company
:ensure
:init
(global-company-mode)
:config
(setq company-idle-delay 0.1)
(setq company-minimum-prefix-length 2)
(setq company-selection-wrap-around t))
init-editor.el - エディタ機能
multiple-cursors
複数のカーソルを同時に操作できるパッケージです。一括編集に便利です。
(use-package multiple-cursors
:ensure
:config
(define-key global-map (kbd "C-x C-a") 'mc/mark-all-like-this)
(define-key global-map (kbd "C-x C-d") 'mc/mark-all-like-this-in-defun)
(define-key global-map (kbd "C-x C-e") 'mc/edit-ends-of-lines)
(define-key global-map (kbd "C-x C-r") 'mc/mark-all-in-region-regexp))
autorevert
ファイルが外部で変更された場合に自動的にリロードするパッケージです。組み込みパッケージです。
transient
transientメニュー(Magitなどで使用)の設定を管理します。
init-navigation.el - ナビゲーション
ace-window
ウィンドウを素早く切り替えるパッケージです。番号で選択できます。
(use-package ace-window
:ensure t
:bind (("C-x C-o" . ace-window)))
treemacs
サイドバーにファイルツリーを表示するパッケージです。プロジェクトの構造を把握しやすくなります。
(use-package treemacs
:ensure
:defer
:bind
("s-b" . treemacs)
:custom
(treemacs-width 50))
projectile
プロジェクト管理パッケージです。プロジェクト単位でファイルを検索できます。
consult-projectile
consultとprojectileを連携させるパッケージです。
init-lsp.el - LSP設定
tree-sitter
構文解析のためのパッケージです。Emacs 29+では組み込みになっています。 TypeScript、Rust、Dockerfileなどの文法を自動インストールします。
(use-package treesit
:ensure nil
:config
(setq treesit-language-source-alist
'((typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src")
(tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src")
(dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile" "main" "src")
(rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.21.2" "src"))))
eglot
LSPクライアントです。Emacs 29+では組み込みになっています。 各言語のLSPサーバーと連携してコード補完や診断を行います。
(use-package eglot
:ensure nil
:hook ((typescript-ts-mode . eglot-ensure)
(tsx-ts-mode . eglot-ensure)
(ruby-mode . eglot-ensure)
(markdown-mode . eglot-ensure)
(dockerfile-ts-mode . eglot-ensure)
(yaml-mode . eglot-ensure)
(rust-ts-mode . eglot-ensure)))
init-languages.el - 言語別設定
typescript-ts-mode
TypeScript/TSX用のメジャーモードです。Emacs 29+の組み込みパッケージです。
(use-package typescript-ts-mode
:ensure nil
:mode (("\\.ts\\'" . typescript-ts-mode)
("\\.tsx\\'" . tsx-ts-mode))
:config
(setq typescript-ts-mode-indent-offset 2))
markdown-mode
Markdown編集用のメジャーモードです。プレビュー機能も提供します。
dockerfile-ts-mode
Dockerfile用のメジャーモードです。Emacs 29+の組み込みパッケージです。
yaml-mode
YAML編集用のメジャーモードです。インデントを自動調整してくれます。
rust-ts-mode
Rust用のメジャーモードです。Emacs 29+の組み込みパッケージです。
init-tools.el - ツール
vterm
高性能なターミナルエミュレータです。Emacsの中で完全な端末環境を実現します。
(use-package vterm
:ensure t
:bind (("C-c t" . 'vterm))
:config
(setq vterm-max-scrollback 10000)
(setq vterm-term-environment-variable "xterm-256color"))
claude-code-ide
Claude Code IDE連携パッケージです。EmacsからClaude Codeを操作できます。
(use-package claude-code-ide
:ensure (:host github :repo "manzaltu/claude-code-ide.el")
:bind ("C-c C-'" . claude-code-ide-menu)
:defer t
:config
(claude-code-ide-emacs-tools-setup))
まとめ
モジュール化することで、各機能の役割が明確になり、設定の管理がしやすくなっています。 Emacs 29+の組み込み機能(eglot、tree-sitter)を活用しつつ、必要なパッケージで機能を拡張しています。 今後はcopilotみたいなインライン補完の設定を実施したいです。