本連載は、「 エキスパートへの道しるべ(Load to Expert) 」をテーマとして、初級者がエキスパートになるためのヒントを、日本を代表するエキスパートの方々に伺う企画です。
テキストエディタの中でも抜群の拡張性とカスタマイズ性を誇る「Emacs」。しかし、「設定が難しそう」「初心者にはハードルが高い」という印象を持つ方も多いのではないでしょうか。
本記事では、14年の実績を持つEmacsのエキスパート・tadsanへのインタビューを通じて、Emacsの魅力や学習のステップ、そして最新のトピックまでを初心者向けにわかりやすく解説します。
PHPとの連携や静的解析にも精通するtadsanが語る、Emacsの可能性と使いこなし方をぜひチェックしてみてください。ここで紹介するポイントを押さえれば、あなたも“自分好みのEmacs”を手に入れられるはずです。

tadsanをTechFeed上でフォローしよう!
Emacsとは?
――まずは、tadsanのプロフィールについて簡単に教えていただけますでしょうか。
tadsan: はい、宇佐美と申します。インターネットではtadsanとして知られています。現在ピクシブ株式会社に所属しており、主にPHP、特に静的解析を専門としています。静的解析とは、ソフトウェアのソースコードを実行せずに解析する手法です。PHPは動的言語ですが、そこに型をつけて、プログラムを実行せずにコードの性質(型などの記述が間違っているかどうか)を確認するような技術を扱っています。
私はEmacsというエディタを使っていて、PHPを開発するためのPHP Modeや、PHPコーディングをしながら静的解析や型検査をするためのPHPStanという静的解析ツールと連携する機能などのパッケージ開発も行っています。
- PHP Mode:ソースコード内の構文の色分け表示やインデントなどのコーディング支援機能を提供するパッケージ。
- PHPStan:PHPの静的解析ツール(型チェッカー)。ソースコードが潜在的に持っている問題のうち、コードを実際に実行しなくても発見可能な問題を指摘してくれる。
―― Emacsとはなにか、について簡潔に教えて下さい。
tadsan: EmacsとはGUI(Graphical User Interface)上でもターミナル上でも動作するリッチなテキストエディタです。
ターミナル(端末)はテキストベースで、ユーザーがコマンドを入力することでコンピューターを操作できるインターフェイスです。ターミナル上でもテキストエディタとしての機能は全て利用できますが、GUIでEmacsを起動することでフォントや画像などを活かすことができます。GUIから外部のサーバーにSSHで接続することも簡単ですし、PC内やサーバー上の画像ビューアーとして使うこともできます。
tadsanはこうしてEmacsエキスパートになった
―― tadsanがEmacsにハマったきっかけと、エキスパートになるまでの道のりを聞かせて下さい。
tadsan: Emacsを本格的に使い始めたのは2011年頃です。もともとはVimを使っていたのですが、学生時代にアルバイトをしていた会社の本棚にEmacsの本があったり、その会社に誘ってくれた人がEmacsを使っていたので、使ってみようと思ったことがきっかけでした。
その後現職に就職してPHPでのアプリケーション開発に使っていく中で、機能として足りないところを補いたいとか、ちょうどPHP Modeの開発が停滞していて、PHPの新しい文法に対応していなかったのを改善したいと思うようになり、Emacsをカスタマイズするための技術を学ぶようになりました。
その当時東京で「関東Emacs勉強会」というコミュニティがあったので、そこに参加したり、会場提供などを通じて、日本のEmacsユーザーコミュニティとつながっていきました。今でもコミュニティ活動は続けていて、Emacsに興味のある人たちをつなげるための活動をしています。
エキスパートが語るEmacsの魅力 — 高度なカスタマイズ性、Emacs Lisp
―― Emacsの魅力を教えてください。
tadsan: 世の中にはたくさんのテキストエディタがありますが、Emacsの特に面白い点としては、Emacs Lispというプログラミング言語でEmacs自体を拡張できること です。
他のエディタ、例えばVS CodeではエクステンションAPIが公開されており、ユーザー自身で機能を追加したり、マーケットで公開されているパッケージをインストールできます。
Emacsではinit.elというファイルに設定を記述することで挙動をカスタマイズできます。Emacsの大半の機能はEmacs Lispで実装されているため、設定と機能拡張の境目がありません。 設定もEmacs Lisp、機能拡張もEmacs Lispで行い、どちらもファイルを読み込むだけ。Emacsを実行しながら任意のEmacs Lispコードを実行し、振る舞いを即座に変えることも可能です。
このように、「 カスタマイズが異様に簡単で、カスタマイズできる範囲が非常に広い 」というのがEmacsの一番の魅力かと思います。もちろんVS Codeも簡単にエクステンションを開発できるようになっていますが、Emacsは実行中に直接Lispを実行して挙動を変えられたりと、カスタマイズの幅と自由度は段違いです。
―― ちなみにEmacs Lispというのはどういう言語なのか教えてください。
tadsan: Lispはよく、「カッコだらけの言語」と言われています。 世の中で普及しているJavaやPythonなどの言語とはかなり趣きが違っています。一般に普及している多くの通常のプログラミング言語では、セミコロンや改行で文を区切りますが、Emacs Lispの構文では基本的に丸括弧だけを使います。そして、if文やwhile文のような制御構造も全て「式」です。 このように、言語の基本的な部分が他の言語と違っているので、最初はとっつきにくいと感じる方も多いかもしれません。
Emacs Lispのサンプルコード
(defun factorial (n)
"入力した数 N の階乗を計算して表示する."
(interactive (list (read-number "数を入力: ")))
(let ((result 1)
(i n))
(while (> i 1)
(setq result (* result i))
(setq i (1- i)))
(message "%d の階乗は %d です" n result)))
# 同じような処理をPythonで
def factorial_command():
"""入力した数の階乗を計算して表示する."""
n = int(input("数を入力: "))
result = 1
i = n
while i > 1:
result *= i
i -= 1
print(f"{n} の階乗は {result} です")
;; 消費税総額と税率を入力して、内税を求めるEmacs Lispコマンド(関数)
(defun uchizei (total tax)
"総額(TOTAL)と税率(TAX)から内税を計算する."
(interactive (list (read-number "総額: ")
(let* ((tax-rates '(("10%" . 10)
("8% (軽減税率)" . 8)))
(value (completing-read "消費税率: " tax-rates)))
(cdr (assoc value tax-rates)))))
(let ((result (/ (* total tax) (+ 100 tax))))
(message "消費税額: %f" result)))
def uchizei():
"""総額と税率から内税を計算する."""
total = float(input("総額: "))
tax_rates = {"10%": 10, "8% (軽減税率)": 8}
print("消費税率を選択してください:")
for i, key in enumerate(tax_rates.keys(), 1):
print(f"{i}. {key}")
choice = int(input("選択: "))
tax = list(tax_rates.values())[choice - 1]
result = (total * tax) / (100 + tax)
print(f"消費税額: {result:.2f}")
tadsan: Lispはそもそも、「LISt Processor」(リスト処理系)の略 で、基本的にリスト(配列のようなもの)を処理するための言語として設計されています。ここで面白いのが、コード自体もリストで記述する ということです。Lispの丸括弧は、リストを定義している んですね。
言語自体がリスト処理言語、コードがリストということは、Lispコード自体をLispで処理し、中身をいじくることができる。
具体的にはマクロという機能がありまして、これを使うとLispコードを構文木のリストとして取得することができ、それを更に別のプログラムに変形して使うことができる。これによって、データとして書いたものをコードとして展開することもできますし、コードとして書いたものをデータとして扱うこともできます。
これにより、プログラムコードを生成するプログラムを書くような、メタプログラミングを簡単に行えるのもLispの魅力です。
―― とても面白いですね。ただ、上級者向けの言語のようなイメージを受けます。
tadsan: いえ、ただ使うだけならそこまで上級者向けというほど難しくはないです。
ただ、使いこなすにはLispならではの特徴に慣れる必要があるので、JavaScriptなど、既存のプログラミング言語の先入観を捨てた上で勉強した方がいいかなとは思います。一度慣れると、すごく楽しいプログラミング言語なのは保証します。
初学者がまず踏むべきステップ:無理せず使い慣れる
――Emacsをこれから使ってみたいという方は、どのように始めるのがベストでしょう?
tadsan: 最初からすべての機能を使いこなすというのは、あまり考えない方がいいと思います。例えば、Emacsの上級ユーザーの中には、矢印キーでカーソル移動するのは邪道だという人もいます (※)が、いきなりそんなところを目指すのではなく、普通の使い方もある程度できるようになってから、押しやすいキーを使って慣れていけばいいと思います。
ちなみにEmacsには「鬼軍曹.el」というものもあり、バックスペースや矢印キーなど 「軟弱なキー」 を押すと怒られるものもあります。
―― 鬼軍曹(笑) バックスペースもだめ、というのはすごいですね…
バックスペースは、Ctrl+Hで実行できるんです。とは言え、通常はそれを強制されるものではありません。Emacsユーザーは、ソフトな方からハードな方までいろいろなスタイルの人がいて、そこが大変面白いコミュニティだと思います。
※Emacsでは、Ctrl+Pで上、Ctrl+Nで下など、カーソル移動自体にも独自のショートカットキーがある。
――ちなみに、Emacsといえば独特なショートカットが特徴ですが、tadsanの好きなショートカットキーはありますか?
tadsan: 「Meta-x」(M-x, execute-extended-command)ですね。 VS Codeのコマンドパレットと同じように、コマンド名で機能を検索して実行できます。これを使えば、ショートカットを一つ一つ覚えていなくても、すべての機能を呼び出すことができます。よく使うコマンドをショートカットに登録することもできます。
Metaは現代のキーボードにはないキーですが、通常はAltキー(macOSではoptionキーまたはcommandキー)に割り当てて使用されることが一般的です。
※なぜM-x?
MはMetaを意味する。Emacsが登場した1970年代、Lispマシンと呼ばれるコンピュータの キーボードにはMetaキーが付いており、Controlキーと同様 M-xなどはMetaキーを押しながら xを打つことで入力していた。現代のほとんどのキーボードには、Metaキーがなく、 ESCキーを押してから次のキーを打つという方法で代用している。 現代のEmacs使いには、Altキーや◇キーをMetaキーとして代用する者もいるようである。
http://www.rsch.tuis.ac.jp/~ohmi/literacy/emacs/quick.html

学習と情報収集:コミュニティ・GitHub・パッケージマネージャー
―― ちなみにtadsanは、どのようにしてEmacsの情報を得ているのですか?
tadsan: 情報収集に関しては、GitHubのIssueなどを見ています。また、Emacsの拡張機能(Lispパッケージ)の配布手段としては公式のGNU ELPA、非公式ですが数多くのパッケージが投稿されるMELPAなどのパッケージリポジトリがあります。一日に数個の新しいパッケージが追加されるので、それを一つずつ見ていって、興味あるものがあれば調べたりします。また「Emacs JP」というSlackコミュニティがあるので、そちらで情報を収集したり発信したりもしています。
――なるほど、GitHubやパッケージマネージャー、コミュニティから情報収集されているのですね。SNS等で特定のアカウントなども見ていますか?
tadsan: Emacsに関して、特にSNSで見ているものはなく、「Emacs JP」や、「vim-jp」を見ています。コミュニティがメインですね、実はvim-jpにもEmacsのチャンネルがあるんです。
https://emacs-jp.github.io/
https://vim-jp.org/
コミュニティには、海外の方も含め、色々な方がいます。特に注目してるEmacsの開発者で、パッケージを作ってるような方の情報は参照させていただきますね。
(編注: この記事の最後に、tadsanがおすすめするサイトやアカウントの一覧を掲載しますので、ぜひご覧ください)
エキスパートへの更なる一歩:Emacs Lispを読もう!書こう!
――では、Emacsのエキスパートを目指すとしたらどのようにすればいいと思いますか?
tadsan: Emacsはすべてのコードが公開されていて、アクセスでき、変更することもできるようになっています。もし気になったものがあれば、コードを読んで動かしてみたり、いじってみるといいと思いますね。
あとはやはり、Lispを覚えることが重要 です。Lisp、特にEmacs Lispに特化した資料があまり存在しない状態なので、時間を見て自分でも資料を書いたりしていますが、まだ不足していますね。
覚え方としては、まずLispが読めるようになったら、とにかく色々なコードを読んでみる、というのがいいと思います。長い道のりのようですが、Emacsのコミュニティに参加している人たちは親切な人が多いので、質問すれば何でも教えてくれることが多いです。なので、コミュニティで積極的に質問してみるのが近道になると思います。
――tadsanのような、自分の使っている道具を自分でカスタマイズしているようなエキスパートの方にとって、エディターを自由自在にいじるという感覚はどのようなものですか?普通の方とはまた大分感覚が違ってきてしまいそうですね。
tadsan: そうですね、それはあると思います。私は、最初はエディター上から「このコマンドを実行するだけ」というようなシンプルなカスタマイズをたくさん行ってきました。例えば、学生の時によくやっていたのは、LaTeX風の文章を書いてボタン一発押したらコンパイルし、PDFのビューワーがリロードするようにするといった、ボタン一つで複数の作業ができるようにすることでした。いきなり大きなことをするというのは難しいので、そういった小さなカスタマイズから始めて、徐々に慣れていき、複雑なことに挑んでいくのがいいと思います。
tadsanをTechFeed上でフォローしよう!
Emacsエキスパートが注目する最新トピック:LSP、Tree-sitter、EditorConfig
―― Emacs関連でインパクトのある新機能や今注目されているテーマを教えていただけますか?
tadsan: 最近の大きなトピックとしては、LSP(Language Server Protocol)のクライアントが標準添付されるようになりました。 LSPクライアントは、プログラミング言語ごとに開発されているLSPサーバーと連携して、従来IDE(統合開発環境)で実現されていた機能を容易に実装できるようにするものです。
これにより、数年前なら専用のIDEでしかできなかったような構文チェックやリファクタリングなどがEmacsでもできるようになっています。
また、構文に色をつけるシンタックスハイライトに関しても、最近のEmacsではTree-sitterという構文解析ライブラリを用いた実装が進められつつあります。
※Tree-sitter:シンタックスハイライトに特化したコードの構文解析器(パーサー)。ハイライト以外にも使用することができ、Tree-sitter の構文解析結果を用いて、特定の識別子を選択することも可能。
また、EditorConfig に対応したのも大きなトピックです。 .editorconfig とは、テキストエディタに依存しない設定ファイルで、例えば「このプロジェクトではPHPファイルはスペースでインデント、JSONはタブで2文字幅でインデント」などの設定を、どのエディタに対しても一括で行うことができます。
ちなみにこの機能は、日本人の方が開発し、Emacsの本体に取り込まれたものです。
――日本人の方って結構Emacsの開発に貢献されているのですか?
tadsan: そうですね、歴史的にはEmacsの多言語化(MULE)など日本からの多くの貢献がありました。現代のEmacs開発では一番貢献してるのは、Androidブランチのメンテナをやっているayatakesiさんだと思います。
これからEmacsを触る人へ:カスタマイズの自由度を極限まで楽しもう!
――最後に、 これからEmacsを触ろうと思っている方々へメッセージをお願いします。
tadsan: Emacsは、言ってみれば未完成品のまま出荷されているようなもの。それを自分好みの製品として完成させていくためのフレームワークというか、インターフェースのようなもの と考えてもらえると嬉しいです。自分の満足のいくようにカスタマイズして使うことができるのがEmacsの一番の特徴と言えるでしょう。
自分の好きなキーバインド(ショートカットキー)を設定して使うこともできますし、なんならVim風に使うためのパッケージまである。他のエディタではできないような自由度を、思う存分楽しんでもらえればと思います。
――本日は貴重なお話をいただき、ありがとうございました。
エキスパートがおすすめする、Emacs関連情報源
- 活発なEmacs Lispパッケージ作者のGitHubリポジトリ
- @minad: Emacsの基本機能を基盤に使いやすくするパッケージを多く発表しています
- @protesilaos: 完成度の高いテーマや定番のパッケージをモダン化したものなどを数多く開発しています
- @manateelazycat: Emacsの常識に囚われない野心的で高速なパッケージを開発しています
- M-x list-packages (Emacsのパッケージマネージャー)
- 起動すると新しく追加されたパッケージが上に並ぶので、気になったものをチェックしています
- Slackコミュニティ
- Emacs JP https://emacs-jp.github.io/
- vim-jp https://vim-jp.org/docs/chat.html
Emacsの最先端情報を知りたい方は以下のTechFeedチャンネルをフォローしよう!