← 記事一覧に戻る

私のEmacs設定を公開する

#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みたいなインライン補完の設定を実施したいです。

レポジトリ