WindowsでNeovimをPython開発環境として構築する手順
WindowsでNeovimをPython開発に使いたいが、何を入れればいいのか情報が古くて迷う、という声をよく聞きます。数年前まで定番だったdein.vimやdeoplete.nvimは開発が停滞し、現在の主流はlazy.nvim・mason.nvim・LSPクライアントを組み合わせた構成に移っています。ここでは、2026年時点で無理なく組める構成を土台から解説します。
目次(11項目)
今回組む構成
| 役割 | プラグイン/ツール |
|---|---|
| プラグインマネージャー | lazy.nvim |
| LSP/フォーマッタ/リンタ管理 | mason.nvim |
| LSPクライアント | nvim-lspconfig(basedpyright + ruff) |
| 補完 | blink.cmp |
| 構文ハイライト | nvim-treesitter |
| ファジーファインダー | telescope.nvim |
| ファイルツリー | neo-tree.nvim |
| Git連携 | vim-fugitive + gitsigns.nvim |
| ステータスライン | lualine.nvim |
これらはいずれも活発にメンテナンスされており、既にkickstart.nvimやLazyVimのような配布設定のベースにも使われています。ゼロから理解しておけば、既存の配布設定を読み解くときにも役立ちます。
1. NeovimとPythonをインストールする
まずはNeovim本体とPythonを、いずれもwingetでインストールします。
winget install -e --id Neovim.Neovim
winget install -e --id Python.Python.3.12
インストール後、ターミナルを開き直してからバージョンを確認します。
nvim --version
python --version
Neovim単体のインストール手順の詳細はこちらの記事を参照してください。
2. Python連携用のパッケージを用意する
Neovim用のPython連携パッケージをインストールし、設定ファイルにパスを指定します。
pip install pynvim
-- init.lua
vim.g.python3_host_prog = 'C:\\Python312\\python.exe'
パスの確認方法や、connectionがうまくいかないときの切り分け方はPython実行パスの設定・確認方法の記事で詳しく解説しています。
3. lazy.nvimを導入する
プラグインマネージャーのlazy.nvimは、init.luaの先頭でブートストラップするだけで導入できます。
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
'git', 'clone', '--filter=blob:none',
'https://github.com/folke/lazy.nvim.git',
'--branch=stable', lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require('lazy').setup('plugins')
require('lazy').setup('plugins')は、lua/plugins/ディレクトリ配下のLuaファイルをまとめてプラグイン定義として読み込む書き方です。プラグインごとにファイルを分けておくと、後から見返しやすくなります。
4. mason.nvimでLSP・フォーマッタ・リンタを導入する
mason.nvimは、LSPサーバーやフォーマッタ・リンタをNeovimの外に手動インストールする手間を省いてくれるパッケージマネージャーです。Python向けには次を入れます。
-- lua/plugins/lsp.lua
return {
{
'williamboman/mason.nvim',
config = true,
},
{
'williamboman/mason-lspconfig.nvim',
dependencies = { 'neovim/nvim-lspconfig' },
opts = {
ensure_installed = { 'basedpyright', 'ruff' },
},
},
}
プラグイン読み込み後、:Masonを実行すればGUI風の画面からインストール状況を確認できます。basedpyrightは型チェック・定義ジャンプなどのLSP機能、ruffはリンタ兼フォーマッタとして高速に動くツールで、いずれも現在のPython開発で広く使われています。
5. 補完にblink.cmpを設定する
-- lua/plugins/completion.lua
return {
{
'saghen/blink.cmp',
dependencies = 'rafamadriz/friendly-snippets',
version = '*',
opts = {
keymap = { preset = 'default' },
sources = { default = { 'lsp', 'path', 'snippets', 'buffer' } },
},
},
}
数年前の定番だったdeoplete.nvimやcoc.nvimと比べて依存関係が少なく、設定もシンプルにまとまりやすくなります。
6. treesitter・telescope・neo-tree・Git連携を追加する
-- lua/plugins/editor.lua
return {
{ 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate', opts = { ensure_installed = { 'python', 'lua', 'vim' }, highlight = { enable = true } } },
{ 'nvim-telescope/telescope.nvim', dependencies = 'nvim-lua/plenary.nvim' },
{ 'nvim-neo-tree/neo-tree.nvim', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-tree/nvim-web-devicons', 'MunifTanjim/nui.nvim' } },
{ 'tpope/vim-fugitive' },
{ 'lewis6991/gitsigns.nvim', opts = {} },
{ 'nvim-lualine/lualine.nvim', opts = {} },
}
| 旧プラグイン | 役割 | 今回導入する後継 |
|---|---|---|
| denite.nvim | 検索 | telescope.nvim |
| defx.nvim | ファイラー | neo-tree.nvim |
| vim-gitgutter | Git差分表示 | gitsigns.nvim |
| lightline.vim | ステータスライン | lualine.nvim |
旧構成からの移行であれば、この対応関係で読み替えると理解しやすくなります。
7. 保存時に自動フォーマットする
ruffをフォーマッタとしても使う場合、保存時に自動整形する設定を加えておくと快適になります。
-- lua/plugins/format.lua
return {
{
'stevearc/conform.nvim',
opts = {
formatters_by_ft = { python = { 'ruff_format' } },
format_on_save = { timeout_ms = 500, lsp_fallback = true },
},
},
}
動作確認
ここまで設定したら、Neovimを起動して次を確認します。
:checkhealthでエラーが出ていないか(確認方法の詳細)- Pythonファイルを開いて補完・定義ジャンプ(gd)が効くか
- 保存時にruff_formatが走るか
以前はdein.vim + deoplete.nvim + jedi-vimの組み合わせで数十個のプラグインを管理していましたが、lazy.nvim + mason.nvim構成に組み直したところ、プラグイン数が半分近くまで減り、起動も体感で速くなりました。ruffが登場してからはflake8やblackを個別に管理する必要がなくなったのも大きな変化でした。
まとめ
WindowsでNeovimをPython開発環境にするなら、lazy.nvim + mason.nvim + nvim-lspconfig(basedpyright/ruff)+ blink.cmpが2026年時点で無理のない構成です。数年前の情報を参考にする場合は、プラグインが今もメンテナンスされているかを確認してから採用すると安全です。