Lazy.nvim とは

Lazy.nvim は Neovim 用のプラグインマネージャーです。 2022年に登場し、現在最も広く使われている選択肢となっています。 名前の通り「遅延読み込み(Lazy Loading)」を核心機能として持ち、 起動時間を最小限に保ちながら多数のプラグインを管理できます。

なぜ Lazy.nvim か

以前は Packer.nvimvim-plug が主流でしたが、Lazy.nvim にはいくつかの優れた点があります。

ℹ️
Neovim 0.8 以上が必要 Lazy.nvim は Neovim 0.8.0 以降を必要とします。nvim --version で確認してください。 本講座では 0.9 以上を推奨しています。

インストール手順

Lazy.nvim はプラグインマネージャー自身をブートストラップする仕組みになっています。 init.lua の先頭に以下のコードを追加するだけで、 初回起動時に自動的に Lazy.nvim がダウンロードされます。

lua ~/.config/nvim/init.lua
-- 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 からダウンロードされ、インストールが始まります。

Terminal
$ nvim
Cloning into '/Users/yourname/.local/share/nvim/lazy/lazy.nvim'...
remote: Enumerating objects: 3421, done.
✓ lazy.nvim is installed

プラグインを追加する

プラグインは require("lazy").setup({}) の中に追加します。 最もシンプルな形式は、GitHub の "ユーザー名/リポジトリ名" を文字列で指定するだけです。

基本的なプラグイン追加

lua ~/.config/nvim/init.lua
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 はこのディレクトリを自動的にスキャンします。

lua ~/.config/nvim/init.lua — 分割版
require("lazy").setup("plugins")
-- lua/plugins/ 以下のすべての .lua ファイルを自動読み込み
ディレクトリ構造
~/.config/nvim/
├── init.lua
└── lua/
└── plugins/
├── colorscheme.lua ← カラースキーム
├── editor.lua ← エディタ系プラグイン
├── lsp.lua ← LSP設定
└── ui.lua ← UI系プラグイン

:Lazy UI の使い方

Neovim 内で :Lazy と入力すると、美しい管理画面が開きます。 この UI でプラグインのインストール・更新・削除・状態確認が行えます。

Lazy.nvim の管理UI
Neovim — :Lazy UI イメージ
lazy.nvim ──────────────────────────────────
Total: 24 plugins | Loaded: 18 | Not Loaded: 6
 
✓ catppuccin/nvim loaded 12.3ms
✓ nvim-tree/nvim-tree.lua loaded 8.1ms
✓ folke/which-key.nvim lazy
✓ nvim-telescope/... loaded 45.2ms
 
Press I to install, U to update, X to clean

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 はさまざまなトリガーで読み込みタイミングを制御できます。

lua Lazy Loading の例
{
  "folke/which-key.nvim",

  -- イベントトリガー:特定のイベントが発生したとき
  event = "VeryLazy",           -- 起動後に遅延ロード
  -- event = "BufReadPre",        -- ファイルを開く直前
  -- event = "InsertEnter",       -- Insert モードに入ったとき

  -- コマンドトリガー:特定のコマンドが実行されたとき
  -- cmd = { "NvimTreeToggle" },

  -- キーマップトリガー:キーを押したとき
  -- keys = { "<leader>ff" },

  -- ファイルタイプトリガー
  -- ft = { "lua", "python" },
},
💡
最初はあまり気にしなくて OK 最初のうちはすべてのプラグインを普通に読み込んでも問題ありません。 起動が遅くなってきたと感じたら、: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 管理することで、他のマシンでも全く同じバージョンのプラグインを再現できます。 チーム開発や複数マシン環境での設定共有に非常に便利です。

⚠️
プラグイン削除後は :Lazy clean を忘れずに init.lua からプラグインの記述を消しただけでは、ディスク上のファイルは残ったままです。 :Lazy clean を実行することで、不要なプラグインのファイルを削除できます。