Neovimのプラグイン管理マネージャをPacker.nvimからLazy.nvimに移行したので、手順をステップ・バイ・ステップで共有します。
目次
- 移行の目的
- Packer使用時のディレクトリ構造
- Neovim自体の設定ファイルの移動
- Lazy.nvimのインストール
- 個別プラグイン設定の移行
- まとめ
移行の目的
最大の理由は、Packer.nvimのレポジトリが現在メンテナンスされていないことです。Packer自身のレポジトリでもLazy.nvimへの移行を推奨していることから、今後の安定性のために移行を決めました。また、Lazy.nvimは遅延読み込みが強力で、起動速度の向上も期待できます。
Packer使用時のディレクトリ構造
移行前(Packer使用時)のディレクトリ構造は以下の通りです。
# Plaintext
# ~/.config/nvim
.
├── init.lua
├── lua
│ └── user
│ ├── cmp.lua
│ ├── colorscheme.lua
│ ├── keymaps.lua
│ ├── lsp.lua
│ ├── options.lua
│ └── plugins.lua
└── plugin
└── packer_compiled.lua
init.lua で lua/user ディレクトリ内の各ファイルを require し、lua/user/plugins.lua 内でPackerの設定やプラグインの追加を行っていました。
Neovim自体の設定ファイルの移動
設定の整理を兼ねて、Neovim自体の設定ファイルを格納する config ディレクトリを作成し、ファイルを移動します。
# Bash
mkdir -p lua/config
git mv lua/user/options.lua lua/config/
git mv lua/user/keymaps.lua lua/config/
Lazy.nvimのインストール
Lazy.nvimの設定ファイル ~/.config/nvim/lua/config/lazy.lua を新規作成します。ここでは、Lazy.nvim自体の自動インストールと基本設定を記述します。
-- Lua
-- ~/.config/nvim/lua/config/lazy.lua
-- lazy.nvim自体の自動インストール処理
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
-- Leaderキーの設定(lazy.nvimのセットアップ前に設定するのが必須)
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
-- lazy.nvimの設定
require("lazy").setup({
spec = {
-- lua/plugins ディレクトリ配下の設定を自動でインポート
{ import = "plugins" },
},
install = { colorscheme = { "habamax" } },
checker = { enabled = true }, -- アップデートの自動チェック
})
次に、init.lua を書き換えて、新しい設定ファイルを読み込むようにします。Packer関連の読み込みはすべて削除します。
# Diff
-require 'user.options'
-require 'user.keymaps'
-require 'user.plugins'
-require 'user.colorscheme'
-require 'user.cmp'
-require 'user.lsp'
+require 'config.options'
+require 'config.keymaps'
+require 'config.lazy'
Packer関連ファイルの削除
不要になったPackerのキャッシュファイルを削除します。
# Bash
# コンパイル済み設定ファイルの削除
rm ~/.config/nvim/plugin/packer_compiled.lua
# 旧プラグイン実体の削除(必要に応じてバックアップを取ってください)
rm -rf ~/.local/share/nvim/site/pack/
個別プラグイン設定の移行
Lazy.nvimでは、lua/plugins/ ディレクトリの中に、プラグインごとの設定ファイルを作成するのが一般的です。
移行の例:tokyonight.lua
Packerで use 'folke/tokyonight.nvim' と記述していたものを、以下のように移行します。
-- Lua
-- ~/.config/nvim/lua/plugins/tokyonight.lua
return {
"folke/tokyonight.nvim",
-- カラースキームは起動時に読み込みたいのでfalse
lazy = false,
-- 確実に最初に読み込まれるように優先度を上げる
priority = 1000,
config = function()
vim.cmd([[colorscheme tokyonight-night]])
end,
}
プラグイン移行のポイント
- ファイル単位で定義:
lua/plugins/以下の各ファイルは、プラグインの設定テーブルをreturnする必要があります。 - configとopts:
configキーは、プラグイン読み込み時に実行する処理を記述します。optsキーを使うと、自動的にrequire('プラグイン名').setup(opts)が実行されるため、コードを簡略化できます。
プラグイン設定は、「【Neovim】 lazy.nvimのインストール・設定方法」という別記事で詳しく解説しています。
全てのプラグイン(cmp, lspconfig等)の移行が完了したら、古い設定ディレクトリを削除します。
# Bash
git rm -r lua/user/
まとめ
移行後の最終的なディレクトリ構造は以下のようになります。
# Plaintext
# ~/.config/nvim
.
├── init.lua
├── lazy-lock.json
└── lua
├── config
│ ├── keymaps.lua
│ ├── lazy.lua
│ └── options.lua
└── plugins
├── cmp.lua
├── lspconfig.lua
└── tokyonight.lua
Packer.nvimからLazy.nvimへ移行することで、メンテナンスの不安が解消されるだけでなく、設定の分割管理が容易になり、起動速度も劇的に改善されました。もしまだ移行されていない方は、ぜひこの機会にトライしてみてください!
