Masonをやめようかな、ま、そんなところです
この記事は以下の記事の続きです。
TL;DR
- Masonの使用をやめました
- 代わりにlazy.nvimを悪用して半手動でツールを管理することにしました
はじめに
皆さんはNeovimでMasonを使っていますか?
MasonはNeovimで用いるLSPやformatter、lintなどのツールを管理するためのツールです。
Masonは自動でバイナリを落としてきたり管理してくれたりするので、とても便利です。
また、設定ファイルも最小限で済むので、とても楽に環境を構築することができます。
もしNeovimを始めたてであれば、Masonを使うことをおすすめします。
Masonをやめた理由
Masonはとても便利なのですが、いくつか問題があります。
- Masonはlockfileを生成してくれないので、現在どのバージョンを使っているのかわからない
- Masonのupdateは手動で行う必要がある(もちろんlazy.nvimではプラグインのアップデートと同時に
:MasonUpdate
を実行するように設定することもできますが) - Mason経由でバイナリを使うとおかしくなることがある
1の理由については、やはり各ツールのバージョンをGit管理できないことが性に合わないためです。
また、3の理由については過去に記事が上がっています。
というわけで、Masonをやめてどのような管理をするか考えました。
Masonから移行していこう
バイナリを落とせば動くもの
まずはバイナリを落とせば動くものから考えていきます。
たとえば以下のようなツールがあります。
これらはaquaで管理をします。
aquaはaqua.yaml
に必要なツールを記述しておくと、必要に応じて自動でバイナリを落としてきてくれます。
さらにrenovateと連携させることで、定期的にバイナリをアップデートしてくれます。
バイナリ管理のできないもの / aquaで管理ができないもの
これについては、前回の記事で紹介したように、lazy.nvimを悪用することにします。
zls
zlsはZigのLSPです。
こちらはバイナリ配布を利用するのが難しいため、手元でビルドする必要があります。
これはlazy.nvimに設定を記述することで、最新版があったら自動でインストールしてくれるようにしました。
Pyright / Ruff
PyrightやRuffはPythonのツールです。
こちらはzlsと違い、Pythonの環境が必要になります。
そのため、これらのツールはryeを使ってプロジェクトを作成し、ツールの管理自体はryeで、アップデート時の更新はlazy.nvimで行うようにしました。
Nodeツール
自分はNPMにあるツールを使うことが多いのですが、これらはaquaで管理することができません。
こちらは自分でBunでプロジェクトを作成し、ツールの管理自体はBunで、インストールの操作はlazy.nvimで行うようにしました。
NodeのツールもPythonのツールもそれぞれlockfileに記述がされているので、どのバージョンを使っているのか一目でわかります。
またこちらもRenovateが定期的にアップデートしてくれるので、定期的にdotfilesをgit pull
するだけで最新版を使うことができます。
(Renovateが作ってくれるPRをみているだけでも楽しい)
bunx使わないの? or Deno使わないの?
Bun版のnpx
であるbunx、もしくはDenoを使えば、nvim-lspconfig
のcommand
に直接bunx
やdeno
を指定することでツールをインストールすることなく使うことができます。
つまり、node_modules
を管理する必要がなくなります!
自分としても将来的にはこれらを使えたらいいなと思っています。
ですが、今回はこれらの使用を見送りました。
理由としては:
- Denoのnpm互換はまだ発展途上なため、動かないツールがある
- BunはDeno以上に互換性はある
- しかし
bunx
は一時的なツールを/tmp
に落としてくるため、万が一オフライン環境でマシンを再起動した場合にツールが使えなくなる危険性がある
常時インターネットに確実に接続されることが保証されている環境であれば、現時点ではbunx
を使うのが一番良いと思います。
しかし、管理の手間から解放されつつも、ある程度はオフラインにキャッシュしてくれるDenoも魅力的ですね。
これらのツールが今後発展していくにつれて、Nodeツールの管理の方法は変わっていくと思います。
まとめ
- Masonは便利だけど、lockfileがないので管理が難しい
- 代わりにlazy.nvimを悪用して半手動で管理することにした
- これでlockfileがあるので、どのバージョンを使っているのかわかる
- Renovateと組み合わせると定期的にアップデートしてくれる
余談
ところで、lazy.nvimのlockfileはRenovateでアップデートされませんね。
Contributionが必要かな?
Discussion