EmacsでTypeScriptのシンタ
ックスハイライトを有効にする

.ts ファイルを開いたとき色がつかなかったので、typescript-ts-mode を設定しました。

関連記事

1. 環境とinit.elの設定

Emacs 29以降には typescript-ts-mode が標準で搭載されています1。ただしTree-sitterの文法ファイルを別途インストールしないと機能しません2

init.el の設定 1 取得元を定義 treesit-language-source-alist ‘((typescript “…/tree-sitter-typescript”)) 2 未インストール時のみビルド (unless (treesit-language-available-p lang) (treesit-install-language-grammar lang)) 3 .ts を開くと自動で有効化 ⚠ 注意点 gcc が必要(文法ファイルのビルド用) 初回起動時にビルドが走る :ensure nil = 外部インストール不要 (Emacs 29 に同梱済み) use-package は Emacs 29 から標準搭載 対応拡張子 .ts .tsx treesit-language-source-alist → ビルド → 自動モード切替

M-x treesit-install-language-grammar は対話コマンドなので init.el には直接書けません3。代わりに treesit-language-source-alist で取得元を定義し4、未インストール時だけビルドを走らせます。

(use-package typescript-ts-mode
  :ensure nil
  :mode (("\\.ts\\'"  . typescript-ts-mode)
         ("\\.tsx\\'" . tsx-ts-mode))
  :init
  (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")))
  (dolist (lang '(typescript tsx))
    (unless (treesit-language-available-p lang)
      (treesit-install-language-grammar lang))))
Code language: PHP (php)

初回起動時に文法ファイルのビルドが走ります。gcc が必要なので5、入っていない場合は事前にインストールしておきます。コード中の :ensure nil は、use-package-always-ensure t をグローバルに設定している環境でも、このパッケージをパッケージアーカイブから取得しないよう指示するキーワードです6

  1. Tree-sitterサポートはEmacs本体をTree-sitterライブラリ付きでコンパイルしている場合に限り有効です。パッケージマネージャ経由でインストールしたEmacsでは無効になっているケースがあります。M-x treesit-available-p で確認できます。 – How to Get Started with Tree-Sitter
  2. 文法ファイルはデフォルトで ~/.emacs.d/tree-sitter/ に格納されます。手動でビルドした場合も同ディレクトリに置けば読み込まれます。 – Tree-sitter – EmacsWiki
  3. use-package マクロはEmacs 29から標準搭載されています。Emacs 28以前では別途インストールが必要です。 – use-package essentials
  4. treesit-language-source-alist は言語名とGitリポジトリURLのペアを登録する変数です。treesit-install-language-grammar はこの変数を参照してソースを取得しビルドします。 – Setting up tree-sitter in Emacs 29.x
  5. Tree-sitterの文法ファイルはCソースとして配布されており、インストール時にEmacsがgccを使ってネイティブライブラリにコンパイルします。gccがない場合はエラーになります。 – Compiling Emacs 29 With Tree-Sitter
  6. typescript-ts-mode はEmacs 29に同梱されているため、package.elによるインストールは不要です。:ensure nil を指定することで、MELPAなどへの不要なアクセスを防ぎます。 – use-package User Manual – Install package