Neovim に移行した話

記事タイトルとURLをコピーする

サーバーワークス Advent Calendar 2025 × イブイブ! アプリケーションサービス部の千葉です。

皆さんは普段どの エディタ / IDE を使っていますか?
VS Code?IntelliJ?それとも vim 派でしょうか?

私は長年 vim を愛用してきたのですが、今年ついに色気をだして Neovim(nvim) に移行しました。
なんとなく『チャラいvimなんだろ』って思い込みから距離を置いていたんですが、もう vim には戻れません。

VS Code や IntelliJ は素晴らしいエディタですが、私にとっては機能過多でした。

  • GUIデバッガー
  • サイドバーのファイルエクスプローラー
  • Git の差分ビューア
  • データベースクライアント
  • Docker / リモート開発機能
  • テストカバレッジ表示

これらの機能、皆さんは使っていますか?私はほとんど使いません。
ターミナルで git diff を打てば十分ですし、デバッグは loggerprint で済ませてしまいたいと考えています。

そんなワケで、必要な機能だけを自分で選んで入れられる Neovim のほうが性に合っていました。

この記事では、vim と Neovim の違いと、私が実際に使っているプラグイン構成を紹介します。

vim と Neovim の違い

まず「Neovim って vim と何が違うの?」という疑問に答えます。

項目 vim Neovim
設定ファイル .vimrc(VimScript) init.lua(Lua対応)
非同期処理 限定的 ネイティブ対応
プラグインエコシステム 成熟している Lua製が急増中
LSPサポート プラグイン依存 組み込み対応
起動速度 高速 さらに高速(遅延読み込みが容易)

一番大きな違いは Lua で設定が書ける ことです。VimScript に比べて可読性が高く、プラグインの設定も直感的に書けます。

私の Neovim 環境

日々の作業で使いもしないプラグインをゴチャゴチャ入れるのはキライなので構成は至ってシンプルです。
ってのと、画面分割はNeovim の機能ではなく tmux 側でやっています。

0. プラグインマネージャー: lazy.nvim

プラグイン管理には https://github.com/folke/lazy.nvim を使っています。

require("lazy").setup({
  spec = {
    { import = "plugins" },
  },
  checker = { enabled = true },  -- 自動アップデートチェック
})

~/.config/nvim/lua/plugins/ 配下にプラグインごとのファイルを置くだけで自動読み込みしてくれるのが便利です。

1. GitHub Copilot(copilot.vim / CopilotChat.nvim)

-- copilot.lua
return {
  { "github/copilot.vim", lazy = false },
}

Copilot なしではもうコードが書けない体になりました。
さらに CopilotChat.nvim を入れることで、エディタ内でチャットしながらコードの相談ができます。

-- copilot_chat.lua
return {
  {
    "CopilotC-Nvim/CopilotChat.nvim",
    dependencies = {
      { "zbirenbaum/copilot.lua" },
      { "nvim-lua/plenary.nvim" },
    },
    build = "make tiktoken",
  },
}

2. ALE(非同期リンター)

return {
  {
    'dense-analysis/ale',
    config = function()
      local g = vim.g

      g.ale_lint_on_save = 1
      g.ale_lint_on_text_changed = 'never'
      g.ale_lint_on_insert_leave = 0
      g.ale_ruby_rubocop_auto_correct_all = 0

      g.ale_linters = {
        ruby = { 'rubocop', 'ruby' },
        lua = { 'lua_language_server' },
        python = { 'flake8', 'pyright' },
        typescript = { 'eslint', 'tsserver' },
        typescriptreact = { 'eslint', 'tsserver' },
      }
    end
  }
}

保存時に ALE が設定された言語のリンターを実行し、診断結果を表示します(Ruby なら rubocop とか)。

3. noice.nvim(UI強化)

return {
  {
    "folke/noice.nvim",
    event = "VeryLazy",
    dependencies = {
      "MunifTanjim/nui.nvim",
      "rcarriga/nvim-notify",
    }
  }
}

コマンドラインや通知がモダンなUIに変わります。地味ですが体験が良くなります。

4. markdown-preview.nvim

return {
  {
    "iamcco/markdown-preview.nvim",
    cmd = { "MarkdownPreviewToggle", "MarkdownPreview" },
    ft = { "markdown" },
    build = function() vim.fn["mkdp#util#install"]() end,
  }
}

ブログを書くときに :MarkdownPreview でブラウザプレビューができます。

ex. 細かいけど便利な設定

-- カラースキーマ
vim.cmd('colorscheme slate')

-- 全角スペースを可視化(事故防止)
vim.cmd[[
  hi DoubleByteSpace term=underline ctermbg=blue guibg=darkgray
  match DoubleByteSpace / /
]]

-- 空白・タブを可視化
vim.wo.list = true
vim.wo.listchars = 'tab:»-,trail:-,extends:»,precedes:«,nbsp:%'

色々と試してきましたカラースキーマですが slate で落ち着きました。
特に全角スペースの可視化は、日本語環境で作業する人には必須だと思います。

まとめ

ポイント 内容
プラグインマネージャー lazy.nvim(遅延読み込みが優秀)
AI支援 Copilot + CopilotChat
リンター ALE(Ruby/Lua対応)
UI強化 noice.nvim
ドキュメント markdown-preview.nvim

vim から Neovim への移行は思ったよりスムーズでした。Lua で設定を書く最初のハードルさえ越えれば、プラグインの選択肢が一気に広がります。

vim に満足している方も、一度 Neovim を試してみてください。

千葉 哲也 (執筆記事の一覧)

アプリケーションサービス部

コーヒーゼリーが好きです。