Lazy.nvim とは
Lazy.nvim は Neovim 用のプラグインマネージャーです。 2022年に登場し、現在最も広く使われている選択肢となっています。 名前の通り「遅延読み込み(Lazy Loading)」を核心機能として持ち、 起動時間を最小限に保ちながら多数のプラグインを管理できます。
なぜ Lazy.nvim か
以前は Packer.nvim や vim-plug が主流でしたが、Lazy.nvim にはいくつかの優れた点があります。
- 美しい UI で現在のプラグイン状態を視覚的に確認できる
- プラグインのキャッシュ・遅延読み込みを自動で最適化
- 設定ファイルを複数ファイルに分割しやすい構造
- プラグインのロック(バージョン固定)に対応
- GitHub の最新コミットから素直にインストール
- Packer.nvim は開発が終了しており、Lazy.nvim が後継的存在
nvim --version で確認してください。
本講座では 0.9 以上を推奨しています。
インストール手順
Lazy.nvim はプラグインマネージャー自身をブートストラップする仕組みになっています。
init.lua の先頭に以下のコードを追加するだけで、
初回起動時に自動的に Lazy.nvim がダウンロードされます。
-- Lazy.nvim のブートストラップ設定 local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not (vim.uv or vim.loop).fs_stat(lazypath) then -- 初回起動時のみ Lazy.nvim をダウンロード vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath, }) end -- runtimepath に Lazy.nvim を追加 vim.opt.rtp:prepend(lazypath) -- Lazy.nvim のセットアップ(プラグイン一覧を渡す) require("lazy").setup({ -- ここにプラグインを追加していく })
この設定を書いたら、Neovim を起動してください。 初回は自動的に Lazy.nvim が GitHub からダウンロードされ、インストールが始まります。
プラグインを追加する
プラグインは require("lazy").setup({}) の中に追加します。
最もシンプルな形式は、GitHub の "ユーザー名/リポジトリ名" を文字列で指定するだけです。
基本的なプラグイン追加
require("lazy").setup({ -- 文字列だけで指定(最もシンプル) "nvim-lua/plenary.nvim", -- テーブルで詳細設定 { "folke/which-key.nvim", event = "VeryLazy", -- 遅延読み込みのトリガー opts = {}, -- プラグインの設定オプション }, -- カラースキームの例 { "catppuccin/nvim", name = "catppuccin", priority = 1000, -- 高い優先度(他より先にロード) config = function() vim.cmd.colorscheme("catppuccin") end, }, -- ファイラー(nvim-tree)の例 { "nvim-tree/nvim-tree.lua", dependencies = { "nvim-tree/nvim-web-devicons", -- アイコン(依存関係) }, config = function() require("nvim-tree").setup() end, }, })
設定ファイルを分割する(推奨構造)
プラグインが増えてきたら、lua/plugins/ ディレクトリに分割するのが定石です。
Lazy.nvim はこのディレクトリを自動的にスキャンします。
require("lazy").setup("plugins") -- lua/plugins/ 以下のすべての .lua ファイルを自動読み込み
:Lazy UI の使い方
Neovim 内で :Lazy と入力すると、美しい管理画面が開きます。
この UI でプラグインのインストール・更新・削除・状態確認が行えます。
UI 内のキー操作
| キー | 動作 |
|---|---|
| I | 未インストールのプラグインをインストール |
| U | すべてのプラグインをアップデート |
| X | 不要なプラグインを削除(Clean) |
| S | プラグインを同期(install + clean + update) |
| L | 変更ログ(changelog)を表示 |
| R | 選択したプラグインを再インストール |
| Enter | プラグインの詳細(README等)を表示 |
| q / Esc | Lazy UI を閉じる |
Lazy Loading の概念
Lazy Loading(遅延読み込み) とは、プラグインを「必要になるまで読み込まない」技術です。 すべてのプラグインを起動時に読み込むと、Neovim の起動が遅くなります。 Lazy.nvim はさまざまなトリガーで読み込みタイミングを制御できます。
{
"folke/which-key.nvim",
-- イベントトリガー:特定のイベントが発生したとき
event = "VeryLazy", -- 起動後に遅延ロード
-- event = "BufReadPre", -- ファイルを開く直前
-- event = "InsertEnter", -- Insert モードに入ったとき
-- コマンドトリガー:特定のコマンドが実行されたとき
-- cmd = { "NvimTreeToggle" },
-- キーマップトリガー:キーを押したとき
-- keys = { "<leader>ff" },
-- ファイルタイプトリガー
-- ft = { "lua", "python" },
},
:Lazy profile で
各プラグインのロード時間を計測し、重いものに遅延読み込みを適用しましょう。
よく使うコマンド一覧
| コマンド | 説明 |
|---|---|
| :Lazy | Lazy.nvim の管理 UI を開く |
| :Lazy install | 未インストールのプラグインをインストール |
| :Lazy update | すべてのプラグインをアップデート |
| :Lazy sync | インストール+クリーン+アップデートを一括実行 |
| :Lazy clean | 設定から削除されたプラグインのファイルを消去 |
| :Lazy check | プラグインのアップデートがあるか確認(ダウンロードなし) |
| :Lazy log | 各プラグインの最近の変更ログを表示 |
| :Lazy profile | 起動時の各プラグインの読み込み時間をプロファイル |
| :Lazy restore | lazy-lock.json の状態にプラグインを戻す(バージョン固定) |
| :Lazy health | Lazy.nvim 自体のヘルスチェック |
lazy-lock.json について
Lazy.nvim は各プラグインの現在のコミット hash を lazy-lock.json に記録します。
このファイルを Git 管理することで、他のマシンでも全く同じバージョンのプラグインを再現できます。
チーム開発や複数マシン環境での設定共有に非常に便利です。
init.lua からプラグインの記述を消しただけでは、ディスク上のファイルは残ったままです。
:Lazy clean を実行することで、不要なプラグインのファイルを削除できます。