プログラミング
Emacs 31: markdown-ts-modeの非公式ガイド
Emacs 31: An unofficial guide to Markdown-ts-mode (rahuljuliato.com)
要約
Emacs 31で導入された新しいexperimentalモードであるmarkdown-ts-modeについて、その機能とセットアップ方法を解説する非公式ガイドです。このモードはCommonMark仕様とGitHub Flavored Markdownの大部分をサポートしており、Tree-sitterを活用して高機能なMarkdown編集体験を提供します。本記事では、モードの有効化方法、Tree-sitterの文法インストール、およびYAMLなどの追加文法が必要な場合の対処法についても触れています。
全文翻訳
Emacs 31のmarkdown-ts-modeの非公式ガイド
Rahul M. Juliato
Rahul M. Juliato
2026年8月26日
#emacs #markdown #tree-sitter
はじめに
Emacs 31がリリースされ、私たちが遊べる多くの新しい機能が追加されました。おそらく、この新しいmarkdown-ts-modeについて耳にし、チェックしてみることにしたでしょう。そして、どうでしょう? Emacsバージョン31では、これはexperimentalモードとしてマークされています。これはどういう意味でしょうか? それを使うべきか、使わないべきか? 準備はできていますか? これはモードのスケッチにすぎませんか? この投稿を、このモードをセットアップし、これらの質問に対する答えを見つけるのに役立つ簡単なガイドとして扱ってください。
機能の面ではどのあたりか?
これはexperimentalモードですよね? オプトインする必要があるため、おそらくすべてが完璧に機能するわけではなく、さらにテストとフィードバックが必要です。とはいえ、このタイトルに惑わされないでください。これは機能が未熟なモードという意味ではありません。ご覧のとおり、これは非常に機能豊富なモードです。このモードは、https://commonmark.org/ の仕様全体をカバーしており、https://github.github.com/gfm/ の大部分もカバーしています。さらに、elispのような非-ts-modes用のコードブロック、目次ユーティリティ、pandocやgfmなどの外部コンバーターとのインターフェースといった追加機能もあります。
自分で深く掘り下げる前に、モードをオンにするだけで役立つかもしれません。Tree-sitterはトリッキーです。Tree-sitterを初めて使う人もいるかもしれませんので、簡単な「インストールガイド」を予定しています。
どこにありますか? モードをインストールする必要がありますか?
Experimentalとは、Emacsがデフォルトでモードを有効にしないことを意味するため、.mdファイルを開いたり、M-x markdown-ts-mode RETと呼び出したりしても、それは待っていません。このライブラリをロードする必要があります。Emacsでは、いつものように、すべてを行う方法は一つではありません。私はuse-packageのファンなので、initファイルを整理するためにそれを使用する傾向があります。以下は、私の推奨する初期セットアップです。
(use-package markdown-ts-mode :ensure nil :mode ("\.md\'" "\.mdx\'" "\.markdown\'" ) :config (require 'markdown-ts-mode-x))
または、use-packageを使用しない場合は、次のようになります。
(autoload 'markdown-ts-mode "markdown-ts-mode" nil t)
(dolist (re '("\.md\'" "\.mdx\'" "\.markdown\'" ))
(add-to-list 'auto-mode-alist (cons re 'markdown-ts-mode)))
(with-eval-after-load 'markdown-ts-mode
(require 'markdown-ts-mode-x))
これで、モードとx(便利な追加機能)ライブラリの両方がロードされ、Markdownファイルを開くだけでそれを使用できます。自分の設定を変更せずに実験したい場合は、次の手順を実行してください。
この内容をtesting.elのようなファイルに保存します。
emacs -Q --load 'testing.el' でEmacsを呼び出します。
これで、テストグラウンドがセットアップされた、ベアなEmacsセッションが完成しました。これは、このガイドの残りの部分で使用します。
重要:このパッケージをダウンロードしたり、パッケージマネージャーに追加したりする必要はまったくありません。 (現在非常に古く、アーカイブされている) MELPAリポジトリは、Emacsバージョン31以降ではインストールを拒否し、機能の面で非常に、非常に貧弱です。これを使用している場合、新しい組み込みのmarkdown-ts-modeを使用していません。正しいですか? 続けましょう。
最初のMarkdownファイルを開く
私があなたに見せるものを見るためには、いくつかの画像が必要です。Tree-sitterベースのモードを初めて使用する場合、警告しておきます。Tree-sitterは素晴らしい、高速で機能豊富ですが、完了すべきタスクと、必要に応じてデバッグスキルが独自のセットで付属しています。ここでいくつかカバーしようとしますが、いくつか忘れるでしょう。このガイドでは、このテストファイルを使用します。ホストされているリポジトリは私たちの実験室です。コードはそこにありません。覚えておいてください、すべてのコードはEmacs自体にあります。
次に、test.mdファイルを開いてください。
重要:この時点で、多くのことが起こる可能性があります。Markdownの文法がシステムにインストールされている場合、ファイルはすでに開かれています。しかし、次のようなプロンプトが表示される場合があります。
これは、Emacsが私のシステム、この場合は~/.emacs.d/tree-sitter/ (Emacsをemacs -Q ...で起動したときのデフォルト) にMarkdownの文法を見つけられなかったことを意味します。Emacsはそれをインストールするように促します。これは、markdown-ts-modeのソースコードで定義されているリポジトリからダウンロードしてコンパイルすることを意味します。yでインストールしましょう。
Emacsは文法リポジトリをクローンし、コンパイルし、2番目の文法に進みます。はい、Markdownは2つの文法を使用します。メインの文法とインライン解析用の文法です。yで2番目の文法もインストールさせてください。
成功!
表示されるべきもの:
そうでない場合は、何か問題が発生した場合に確認すべきことは次のとおりです。
EmacsはTree-sitterフラグでコンパイルされていますか? M-: (featurep 'treesit) RET を使用して、tが返されるか確認してください。
文法を「コンパイル」するために使用されるツール(make、gccなど)はありますか? Tree-sitterは、通常tree-sitter-cliという名前のディストロのパッケージを必要とします。これはTree-sitterバイナリを提供します。tree-sitter --versionで確認できます。これはすべてのTree-sitterモードの一般的な頭痛の種です。
多くの人が独自の文法をコンパイルするのではなく、信頼できる場所(たとえば、独自のディストロリポジトリや、数百の事前コンパイル済み文法を含むパッケージ)からコンパイル済みのファイルを使用することを好みます。私はそれに深く入り込みません。文法を取得する方法はたくさんありますが、このガイドでは「自分でビルドする」に固執します。
見てください、私はあなたを少しだましました。私はあなたに見せるべきものがあると言いましたが、実際には、「あなたが見るものを見る」は次のようになっているはずです。
ここでは完全なファイルを提供しており、セットアップが完了しているかどうかを比較できるように、いくつかのデフォルトテーマがあります。
それで、何が起こったのでしょうか? これはmarkdown-ts-modeが非常に特別な理由の一部です。このモードはMarkdownだけでなく、利用可能な他のすべての-ts-modesでも動作します! これを念頭に置いておいてください。コードブロックについては後で話します。今のところ、いくつかのことを理解する必要があります。
テストファイルでは、特別なヘッダーがあります。Markdownファイルのヘッダーとしてtomlまたはyamlを持つことは非常に一般的です。
この小さな男:
---
title: The Official 'markdown-ts-mode.el' Feature Test File
author: Rahul Martim Juliato
date: 2026-03-18
version: 0.1.0
parsers needed: markdown, markdown-inline, yaml, c, javascript, python, ruby, rust
---
色付け(つまり、Emacsによって色でペイントされる)のために何か別のものが必要です。何が欠けているか推測できますか?
あなたの答えが「YAMLの文法が必要だ!」であれば、おめでとうございます! -ts-modesで正しく色付けされないものがあれば、おそらく文法が欠けています。そして、markdown-ts-modeは利用可能なすべてのts-modesと連携するように作られているため、これは例外ではありません。
信頼できるM-x treesit-install-language-grammar RET yamlでYAML文法をインストールしましょう。
今回は、yaml-ts-modeがtreesit-installで優先文法を登録しようとして何か問題が発生したようですが、提案はありません。
手動で提供することもできます。しかし、まず何かを確認しましょう。
yaml-ts-mode.elを見ると、ソースコードでどの文法を期待しているかを確認できます。
;; yaml-ts-mode.elから
(add-to-list 'treesit-language-source-alist '(yaml "https://github.com/tree-sitter-grammars/tree-sitter-yaml" :commit "b733d3f5f5005890f324333dd57e1f0badec5c87") t)
素晴らしい! このブロックを評価して、もう一度文法をインストールしてみましょう。または、今回行ったように、すでに開始したインタラクティブセッションにソース https://github.com/tree-sitter-grammars/tree-sitter-yaml を手動で提供します。
その後、RET RET RET...でライブラリがインストールされるまでデフォルトを続けます。その後、markdown-ts-modeをリロードするか、C-x x gを使用するか、訪問中のファイルを再度開きます。
ソースコードを訪問することで行ったことは非常にまれであり、ほとんどの-ts-modesはコンパイルするリポジトリを自動的に提案します。私があなたに見せるためにこれが起こったのは良かったです。
さて、どうすればいいですか? ファイルで使用されている欠落している文法ごとに、同じM-x treesit-install-language-grammarを実行する必要があります。必要であれば、テストファイルのために、C-x x fを使用して色付けを強制し、このファイルで使用されている欠落している各文法についてプロンプトを表示させることができます。