
2026/08/27 22:22
Emacs 31:Markdown-ts モードへの非公式ガイド
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Emacs 31 は markdown-ts-mode を導入します。これは tree-sitter テクノロジーを活用した Markdown パーシングのための実験的ツールであり、特定の文法の opt-in 式の読み込みと手動インストール(例:
treesit-install-language-grammar を経由して)を必要とします。旧 MELPA リポジトリとは異なり、新セットアップはエラーなく動作させるために設定更新または特定の実行フラグ(例えば -Q --load)の適用を要求します。このモードは CommonMark と GitHub Flavored Markdown の仕様をサポートし、Org-mode の慣習(fill/outline 折りたたみなど)を模倣することでパワーユーザーへの導入を容易にします。言語に敏感なコードナビゲーション (M-.)、テーブル操作(転置、整列)、HTML コメントを介した TOC の再生成、PDF/HTML 向けエクスポートオプションといった高度な機能を提供します。ただし、実験的リリースであるため、安定性が将来のバージョンで約束されるまで API や特定の機能が変更される可能性があります。特に、間接バッファは現在、パーサーや font-lock 機能を共有していません。
Key Points List
本文
Emacs 31 に新登場:markdown-ts-mode
とは?
markdown-ts-modeEmacs 31 がリリースされました。特に注目すべきは、
という新しい Markdown モードの実装です。このモードは現時点で**実験的(Experimental)**としてマークされています。本記事では、このモードの特徴、インストール方法、基本機能、および注意点について解説します。markdown-ts-mode
1. 機能面での位置付け
markdown-ts-mode は Tree-sitter を用いた高度な文法解析を行います。
- 実験的モード:導入には同意(opt-in)が必要であり、すべての機能が完全に安定しているとは限りません。
- 対応仕様:
- CommonMark の完全対応。
- GitHub Flavored Markdown (GFM) の大部分対応。
- 付加機能:
などへのコードブロック、目次生成、Pandoc/GFM との連携など。elisp
導入ガイドは Tree-sitter の扱い方が難しいため、まずは設定から始めます。
2. インストールと起動手順
Emacs はデフォルトでこのモードを有効にしていません。手動での読み込みが必要です。
ユーザー設定ファイルからの追加
use-package を使用している場合(推奨):
(use-package markdown-ts-mode :bind (:mode "\\.md\\'" #'markdown-ts-mode) :hook (markdown-ts-mode . treesit-ensure))
use-package を使わない場合:
(require 'markdown-ts-mode) (add-hook 'markdown-mode #'markdown-ts-mode) (treesit-ensure)
テスト環境での起動(最小限の設定)
設定ファイルを変更せず試す場合は、以下のコマンドで Emacs を起動します。
emacs -Q --load 'testing.el'
(注:テスト用ファイルを
として作成し、中身を読み込む想定)testing.el
重要: パッケージマネージャー(MELPA など)へのインストールは不要です。古くアーカイブ化された MELPA は Emacs 31 で動作しません。標準搭載の
markdown-ts-mode を使用してください。
3. 最初の Markdown ファイルを開く
Tree-sitter ベースのモードを使用すると、システムに文法(Grammar)がインストールされていないとエラーになります。
起動時のクイズ
Markdown ファイル(例:
test.md)を開くと、Emacs がシステム上の文法を見つけられず、以下の手順でインストールを提案します。
- 「Install grammar?」 と尋ねられますので
を押します。y- Emacs はリポジトリからソースをダウンロードし、コンパイルしてインストールします。
- Markdown では「メイン解析用」と「インライン解析用」の 2 つの文法が必要です。2 番目のインストールも許可しましょう(
)。y
確認すべき項目
もし表示されない場合は以下の条件を満たしているか確認してください。
- Emacs が Tree-sitter でコンパイルされているか?
(featurep 'treesit) RET を実行し、M-:
が返ります。t
- 必要なツール(
,make
など)がインストールされているか?gcc - Tree-sitter バイナリ(例:
)が存在するか?tree-sitter-cli
で確認可能です。tree-sitter --version
文法の自動生成とトラブルシューティング
Tree-sitter モードは「共有資産」です。ファイルに TOML/YAML ヘッダーなどがあると、それに対応する文法が必要です。
- 不足している文法のインストール:
M-x treesit-install-language-grammar RET yaml RET - 自動的に登録されない場合(YAML の例)は、ソースコードから期待されるリポジトリを確認し、手動でコンパイルしてインストールする必要があります。
重要:
-ts-mode は文法に依存します。文法の更新に合わせて常に最新の文法を使用する必要があります。
4. markdown-ts-mode
の機能概要
markdown-ts-modeこのモードは Org-mode と互換性を重視しており、Emacs ユーザーにとって馴染み深いキーバインディングを持っています。
基本操作:編集 (Editing)
- 太文字:
(入力) →**bold**
で強調。C-c C-x C-f - 斜体:
(入力) →*italic*
キーで強調。i - 取り消し線:
→~~str~~
キー。s - インラインコード:
→`code`
キー。c - マークアップの隠し:
(C-c C-x RET
) 実行すると、入力記法が見えない状態で編集できます(Org-mode と同様)。markdown-ts-toggle-hide-markup- ヒント:
はリストや引用内の改行も自動修正します。M-q
- ヒント:
見出し (Headings)
- 入力:
,#
, ...##
または Setext 形式(######
/===
)も認識。--- - レベル変更:
- 昇格:
M-<left> - 降格:
M-<right>
- 昇格:
- 移動:
- セクション全体を上に/下に移動:
/M-↑M-↓
- セクション全体を上に/下に移動:
- 折りたたみ: 見出しの
で可視性を切り替え(アウトライン機能)。TAB
リスト (Lists)
- 入力形式:
,-
,+
または番号付きリスト。* - チェックボックス (GFM 準拠):
- 再生成/削除:
(C-c C-c
)markdown-ts-toggle-checkbox - 再番号付け:
(C-c C-r
)markdown-ts-renumber-list - 新しいアイテム追加:
M-RET
- 再生成/削除:
ブロックとコード (Code Blocks)
- 挿入:
キーを押した後、以下のキーで種類を選択。C-c C-,
: フェンス付きコードブロック(言語タグ可)。`
: ティルダフェンス。~
: 引用ブロック。q
: 区切り線。d
: テーブル。t
- フォント化: 言語が指定されたコードブロックは、対応する言語のモードでフォント化されます。色がない場合は文法不足の可能性があります。
- コンテキスト表示: コードブロック内部では、
を有効にすると、言語ごとの操作(TAB でインデント、言語キーなど)が可能になります。M-x markdown-ts-code-block-in-context-mode
テーブル (Tables)
- 挿入:
またはC-c C-, t
。M-x markdown-ts-table-insert-table - 内部操作: 専用モードに入るため、セル移動や行数調整が可能です。
- セル移動:
,TAB
。S-TAB - 行の挿入/削除:
,M-RET
,M-↓
など。M-Shift-↓ - 列の挿入/削除:
,M-→
,M-←
,M-Shift-→
など。M-Shift-← - 整列 (Align):
。C-c C-t a
- セル移動:
リンクと画像
- リンク:
および[text](url)
。フラグメントリンク([text][ref]
)も動作。#id - 画像: インラインレンダリング。
- 表示切り替え:
。C-c C-x C-v - 設定:
,markdown-ts-image-max-width
。markdown-ts-display-remote-inline-images
- 表示切り替え:
移動とナビゲーション
- 移動キー:
- 次の見出し:
C-c C-n - 前の見出し:
C-c C-p - 親見出しへ:
C-c C-u - コードブロック間移動:
/C-c C-v n
。C-c C-v p
- 次の見出し:
- 折りたたみ:
で初期表示状態を制御可能。markdown-ts-default-folding - ビューモード:
を実行すると、読み込み専用の簡素なナビゲーションモードになります。M-x markdown-ts-view-mode
目次 (TOC) とエクスポート
- 目次生成: HTML コメント形式で埋め込むことができます。
- テンプレート挿入:
M-x markdown-ts-toc-insert-template - 生成/更新/クリア:
,M-x markdown-ts-toc-generate
など。M-x markdown-ts-toc-update-before-save-mode
- テンプレート挿入:
- エクスポート: パンドック(Pandoc)などを介して PDF や HTML に変換可能です。
- コンバーター指定なし:デフォルトのコンバータを使用。
- 表示:
でブラウザに出力できます。markdown-ts-convert-display-function
5. よくある問題と注意点
実験的機能について
- API と動作は変更される可能性があります。
- 次回のリリースで「実験的」というラベルが外られることを目指していますが、現時点では回避策(Workaround)が必要です。
バグの原因となる主な要因
- 文法の共有: Tree-sitter の文法は外部資産です。Emacs 内のバグではなく、共有リポジトリ側の仕様や不具合の影響を受けます。
- ビルド環境: 事前コンパイルされたパッケージがなくても、ソースからコンパイルできます。ただし、
や C コンパイラが必要です。Node.js を必要とする文法もあるため注意が必要です。make - 間接バッファ (Indirect Buffers):
- Tree-sitter と間接バッファは相性が悪いです。
- パーサーやフォント化(Font-lock)は共有されません。
でもmarkdown-ts-mode
全般で、間接バッファ内のクローンにはフォント化が反映されない場合があります(Emacs の制限のため)。-ts-mode
バグ報告について
問題が発生した場合、Emacs 自体のバグではなく、以下のケースが多いです。
- 文法の解析ロジックの問題。
- Tree-sitter エコシステム側の問題。
- Emacs と Tree-sitter の統合の問題。
報告時は
M-x report-emacs-bug RET を使用し、最小で再現可能な例を含めることを推奨します。特にフォント化、文法インストール、テーブル機能、他のモードとの相性に関する情報は重要です。
まとめ:ぜひ試してみてください
markdown-ts-mode はまだ進化途中ですが、非常に強力なツールです。実験的というラベルに囚われず、以下のように利用することをお勧めします。
- Markdown ファイルで試す:異なる機能や設定を遊び倒し、改善点を発見しましょう。
- フィードバックを送る:問題があれば、Emacs 開発者ではなく
のメンテナに報告してください。markdown-ts-mode - 制限点との付き合い方:回避策を考えたり、文法のバージョンアップに対応したりするプロセスに参加することで、より安定した環境を作ることができます。
「準備万端」かどうかは関係なく、このモードの可能性を開発者と共有し合うことで、Emacs の Markdown エディタ体験は確実に向上していきます。