@ryoppippi

NeovimでのSvelte/SvelteKitの開発環境

22 May 2023 ・ 6 min read


Note

この​記事はVim 駅伝の​ 5/22 の​記事です(1 日遅れました)。 前回の​記事はmonaqaさんに​よる、​5/19 の「Vim キーマップを​カスタマイズする​とき​考えている​こと」と​いう​記事でした。 次回は​ 5/24 に​投稿される​予定です。

はじめに

正直な​ところ、​Svelte 公式の​エディタは​ VSCode であり、​プラグインも​ VSCode 向けが​優先されているのですが、​Neovim でも​ Svelte/SvelteKit の​開発を​する​ことは​可能です。 また​何よりも​ Neovim の​ Keybind が​好きなので、​Neovim で​開発したいと​いうのが​本音です。

この​記事では、​Neovim で​ Svelte/SvelteKit の​開発を​する​ための​オレオレ設定を​紹介します。

この​記事で​紹介する​プラグインは​ Svelte/SvelteKit の​開発に​限らず、​さまざまな​開発に​役立つものばかりです。 是非とも​参考に​してみてください。

LSP を​入れよう!

Svelte/SvelteKit の​開発を​する​ためには、​LSP を​入れる​必要が​あります。 これに​よって、​コード補完や​定義ジャンプなどの​機能を​使うことができます。

手っ取り早く​これらを​導入するには、​Nvim-lspconfig/mason.nvim/mason-lspconfig.nvim を​使うのが​良いでしょう。

https://github.com/neovim/nvim-lspconfig https://github.com/williamboman/mason.nvim https://github.com/williamboman/mason-lspconfig.nvim

Svelte での​開発に​必要な​(および​個人的に​推奨したい​)LSP は​主に​以下の​通りです。

これらに​加えて、​ご自分の​お好きな​補完プラグインを​入れると​よいでしょう​(例: nvim-cmp)

SvelteKit に​おける​ tsconfig.json の​設定

SvelteKit ではZero-effort type safetyなる​仕組みが​あります。 VSCode では​この​仕組みが​自動的に​有効に​なるのですが、​Neovim では​有効に​なりません。

これを​有効に​する​ためには、tsconfig.jsontypescript-svelte-pluginを​プラグインと​して​追加する​必要が​あります。

以下にtsconfig.jsonの​例を​示します。

{
	"extends": "./.svelte-kit/tsconfig.json",
	"compilerOptions": {
		"allowJs": true,
		"checkJs": true,
		"esModuleInterop": true,
		"forceConsistentCasingInFileNames": true,
		"resolveJsonModule": true,
		"skipLibCheck": true,
		"sourceMap": true,
		"strict": true,
		"plugins": [
			{
				"name": "typescript-svelte-plugin"
			}
		]
	}
}

Other.nvim を​使おう!

ここからは​特に​最近​便利に​使っている​プラグインを​ 2 つ​紹介します。 まずは、​other.nvim

https://github.com/rgroli/other.nvim

この​プラグインは、​現在開いている​ファイルと​関連の​ある​ファイルを​自動的に​探してくれて、​選ぶことができます。

SvelteKit では、src/routes以下が​このような​ファイル構成に​なっています。

src
├── app.d.ts
├── app.html
└── routes
    ├── +layout.svelte
    ├── +page.server.ts
    ├── +page.svelte
    └── +page.ts

Other.nvim を​使うと、​例えば+page.svelteを​開いている​状態で:Otherを​実行すると、+page.server.ts+page.tsを​探してきて、​リストアップしてくれます。 いちいち File Explorer を​開いて​ファイルを​探す必要が​なくなるので、​かなり​便利です。

other screenshot1

以下に​自分の​使っている​ SvelteKit 用の​設定を​示します。

https://github.com/ryoppippi/dotfiles/blob/9c96631c58728c6b34bc523798a48fc923f68856/nvim/lua/plugin/other.lua

oil.nvim + vim-sonictemplate を​使おう!

次に​紹介するのは​最近の​推しプラグイン、oil.nvimです。 https://github.com/stevearc/oil.nvim

Oil.nvim は​ File Explorer なのですが、​ファイルシステムを​あたかも​ Neovim の​ Buffer のように​扱うことができます。 つまり​ファイルの​作成も​ファイル名の​編集も、​コピーも​削除も​いつも​通りの​ Neovim の​コマンドで​行うことができます。 編集の​様子は​以下の​スクリーンキャプチャを​みていただけると​わかりやすいと​思います。

oil screenshot

と​いう​ことは、​Template ライブラリを​使えば​一気に​ファイルを​作成できると​いう​ことですね…​!?

https://github.com/mattn/vim-sonictemplate

vim-sonictemplate は、​Template を​定義し、​それを​ Buffer 上に​簡単に​展開できる​プラグインです。 これを​使う​ことで、​例えば​ SvelteKit のroutes以下の​ファイルを​一気に​作成する​ことができます。

oil screenshot1

参考までに​自分の​設定ファイルを​以下に​置いて​おきます。

https://github.com/ryoppippi/dotfiles/tree/5112af76553f0eaf30b3c967f1294a7dca355dac/nvim/template/oil

ちなみに​この​テクニックは​ SvelteKit 以外の​場所でも​有用です。​ある​規則に​基づいて​複数の​ファイルを​作成する​ことは​よく​ある​ことでしょう。​(例えばindex.tsindex.test.ts等)。 また、​この​スクリーンキャプチャには​出ていませんが、​Copilot.vim に​よる​補完を​利用して、​いい​感じの​ファイル名を​生成して​もらう​ことすらできます。 可能性は​無限大でしょう。

まとめ

Neovim で​ SvelteKit を​開発する​ための​環境を​紹介しました。 最後の​ 2 つの​プラグインは​ SvelteKit に​限らず、​どんな​開発でも​有用なので​ぜひ​使ってみてください。

comment on bluesky / twitter
CC BY-NC-SA 4.0 2022-PRESENT © ryoppippi