本題の前に新年のご挨拶を…
あけましておめでとうございます。このブログは2025年の年末に"より続けやすいブログが欲しい"とのことで開設したものです。 2026年はたくさん記事を書いていきたいです。
tombiとは?
tombiとはRustで実装されたTOMLのLanguage Server & Formatter & Linterです。
Zennに投稿された開発者さんの記事によると、TOMLのLanguage Serverは、以前からtaploというものが存在するようですが、メンテナンスの継続が困難になってしまっていて、利用するのが難しくなってしまったことが開発の動機のようです。
筆者は、Rustによる開発の際に、Cargo.toml,Makefile.tomlを書くので、TOMLにも
Language Serverがあればな~っと思っていました。
そんな時、GitHubをぼんやりと見ていると、たまたま発見したので試してみることにしました。
インストール by Nix
現在は、マシンにグローバルにインストールはしておらず、プロジェクトごとのnix-shell内で有効化しています。
とりあえず試してみたいならば、
|
|
でnix-shellを作ってしまうのが一番簡単でしょう。
筆者は、Rustの開発環境をflakeで構築しているので、以下のようにpackagesにtombiを追加して運用しています。
この方法は、Rustでなくても、PythonでPoetry,uvなどでpyproject.tomlを書くような場面でも使えます。
- flake.nix
|
|
Nixを利用しないで、インストールしたい場合は公式ドキュメントのinstallationの部分を参照してください。
Neovim向けに設定する
tombi自体はインストールできたので、エディタ側も設定してきます。
先ほどのドキュメントのに、設定のサンプルへのリンクがあったのでそれを参考にして、以下のように設定しました。
|
|
この設定では、ビルドインのLSPマネージャーを使う方法で設定しました。
ポイントは、root_markers = {}でプロジェクトのルートディレクトリのヒントになるファイルを指定することです。
さらに、保存した時にフォーマットされるようにするために以下のように設定をしました。
|
|
tombiはLSP経由でのフォーマット機能が実装さているので、この設定では、*.tomlなファイルが保存された時(BufWritePostイベントが発生した時)
に、vim.lsp.buf.format()を実行するようにしています。
使用してみて
インストールは、flakeで環境構築しているRustのプロジェクトがあったので、packages = []に追加するだけでできてお手軽でした。
実際に使用してみたところ、基本的な機能は使えている印象です。きっとTOMLを書く場面で活躍することでしょう。