🐃

Emacsでvibe coding!gptelを導入してemacsでLLMを利用しよう!

こんにちは!こんばんは!片ノ坂 卓磨です!
今回は、由緒あるエディターEmacsでLLMを利用できるようにするパッケージgptelを実際に自分の環境に導入してみた話を書きます!

前提知識

Emacsをご存知ですか?

Emacsとはvi(Vim)と双璧をなすUNIX/Linux上でよく使われるカスタマイズ可能なテキストエディタです。
詳細についてはWikipediaなどをご覧いただくと良いかと思います。
日本にもユーザーコミュニティがありますし、いまだに開発は続いているものでして、まだまだコアなファンがいらっしゃいます。
自分は高専で初めてUNIXを触った際に教員から使うよう指示されたのがEmacsだったので、鳥の刷り込みのように、以来、Emacsを『親』のように感じて使い続けています。

EmacsのカスタマイズにはLispの方言であるEmacs Lisp(以下、ELisp)を用います。
Lispとは関数型言語の一種であり、これもまたコアなファンが存在する言語なのでEmacsのコアさを一層引き立てています。
また、有志が色々な拡張機能をELispを用いて実装して公開してくれています。大変助かりますね。
PyPiやnpmのようにELispにもMELPAというパッケージを公開する場所が用意されています。

今回ご紹介するgptelもそんなEmacsを拡張するパッケージであり、利用するにはELispで設定を書く必要があります。

gptel: A simple LLM client for Emacs

gptelというパッケージはEmacsにLLMクライアント機能を実装してくれる便利なパッケージです。
メモ帳のサイドバーで指定のLLMに対しての対話的インターフェースを提供してくれるものになります。
必要なのはEmacsとLLMのAPIキーで、多くのLLMサービスをサポートしています。

実際にやってみた

説明はこれぐらいしにして、参考文献の内容をもとに実際に自分の環境に導入してみました!

1. 検証環境

端末は会社支給の端末、ツールのバージョンは執筆時点(2025/07/28)での最新安定版としています。なお、今回もツールのチョイスは自分の好みです。

特徴的なのはパッケージ構成管理ツールとしてleaf.elを使っている点です。leaf.elを紹介できるほど詳しくはないものの、2020年代のEmacs入門で紹介されているもので、「イマドキのEmacsユーザーなら使いこなせた方がいいのかな?」と思って自分もこっそり利用しています。

  • 端末
    • MacBook Pro(14インチ、11月 2023)
      • CPU Apple M3 Pro
      • メモリ 36 GB
      • macOS 15.5(24F74)
  • Emacs
    • 30.1
  • パッケージ構成管理
  • LLMチャットクライアント
  • LLM

2. 手順

2.1. init.elの設定

leaf.elを使うための設定とgptelの設定だけinit.elから抜き出しております!
<YOUR API KEY> の部分は各自で置き換えてください 🙇
モデルは自分が現在利用しているGoogleのGeminiのモデルを指定しています。
そこもご自身で適宜書き換えていただけると幸いです!

;;; -*- lexical-binding: t; -*-
;; <leaf-install-code>
(eval-and-compile
  (customize-set-variable
   'package-archives '(("org" . "https://orgmode.org/elpa/")
                       ("melpa" . "https://melpa.org/packages/")
                       ("gnu" . "https://elpa.gnu.org/packages/")))
  (package-initialize)
  (unless (package-installed-p 'leaf)
    (package-refresh-contents)
    (package-install 'leaf))

  (leaf leaf-keywords
    :ensure t
    :init
    ;; optional packages if you want to use :hydra, :el-get, :blackout,,,
    (leaf hydra :ensure t)
    (leaf el-get :ensure t)
    (leaf blackout :ensure t)

    :config
    ;; initialize leaf-keywords.el
    (leaf-keywords-init)))
;; </leaf-install-code>

;; leaf settings
(leaf leaf
  :config
  (leaf leaf-convert :ensure t)
  (leaf leaf-tree
    :ensure t
    :custom ((imenu-list-size . 30)
             (imenu-list-position . 'left))))

;; (中略)

;; LLM Client
(leaf gptel
  :doc "Interact with ChatGPT or other LLMs"
  :req "emacs-27.1" "transient-0.4.0" "compat-29.1.4.1"
  :tag "convenience" "emacs>=27.1"
  :url "https://github.com/karthink/gptel"
  :added "2025-06-16"
  :emacs>= 27.1
  :ensure t
  :after compat
  :defvar (
           (gptel-model)
           (gptel-backend)
           )
  :setq ((gptel-model quote gemini-2.5-flash-preview-05-20))
  :config
  (setq gptel-backend (gptel-make-gemini "Gemini"
                        :key "<YOUR API KEY>" :stream t))
  )

設定を書き換えたらコンパイルを行います。
コンパイルしなくても問題ないのですが、コンパイルすることでエラーや警告を見つけ出すことができます。
エラーや警告などが出る場合は出力内容をググるなりLLMに確認するなりして解消してください 😣

emacs --batch -f batch-byte-compile init.el

2.2. 動作確認

きっと皆さんの環境では何も問題なくコンパイルもできたことだろうと信じて動作確認に移ります。

ちなみに、自分が一番苦戦したのは公式のREADMEにあるインストールガイドの内容をleaf.elを使った形でinit.elにどのように書くのか?を調べて手作業で変換するところでした。
四苦八苦している中で、leaf.elの便利機能leaf-convertなるものがあることを知り、使ってみるとさっきまでの苦労が嘘みたいに書き換えがサクッと終わってしまいとても感動しました。すごいぞleaf.el。
本件についてはこちらのQiitaの記事が大変参考になりました

Emacsを起動し、META-xを入力します。METAキーを何に割り当てているかは各々のシェル環境に依存しますが、私は左Altキーにしています。人によってはESCキーだったりもするでしょう。
自分は色々カスタマイズしているので表示内容が若干違うかと思いますが、操作方法自体は変わらないので無視してください。

Emacs起動からMETA-xキー入力まで

gptel と入力してEnterキーを押下します。

gptelと入力

続いて使用するLLMサービスを指定します。
init.elで指定したLLMサービスがデフォルトになっています。
自分はGeminiがデフォルトなのでそのままEnterキーを押下します。

使用するLLMサービスに関する問い

Gemini Readyとなって起動が完了しました!

起動完了

見づらいのでctrl-x 0で表示をgptelだけにします。
LLMにクエリを投げるには###の右横にクエリを書いてctrl-c RETで送信します。

LLMへのクエリのサブミット(クエリと回答の一部)

LLMへのクエリのサブミット(回答の一部〜最後)

こんな感じで、Emacsで作業しながらEmacsから離れずにLLMを利用することができます。やったね 👍

まとめ

今回はEmacsにシンプルなLLMクライアント機能を実装するgptelの紹介をしました。
この記事を読んでEmacs自体に興味を少しでも持ってもらえたり、より豊かなEmacsライフを送るための一助となれば幸いです。

参考文献

最後に

TRUSTART株式会社は、一緒に働くメンバーを募集しています!インターンメンバーも大募集中です!
興味をお持ちいただけた方は、ぜひ弊社の採用ページをご確認ください。

https://www.trustart.co.jp/recruit/

TRUSTARTテックブログ

Discussion