サーバーワークス Advent Calendar 2025 × イブイブ! アプリケーションサービス部の千葉です。
皆さんは普段どの エディタ / IDE を使っていますか?
VS Code?IntelliJ?それとも vim 派でしょうか?
私は長年 vim を愛用してきたのですが、今年ついに色気をだして Neovim(nvim) に移行しました。
なんとなく『チャラいvimなんだろ』って思い込みから距離を置いていたんですが、もう vim には戻れません。
VS Code や IntelliJ は素晴らしいエディタですが、私にとっては機能過多でした。
- GUIデバッガー
- サイドバーのファイルエクスプローラー
- Git の差分ビューア
- データベースクライアント
- Docker / リモート開発機能
- テストカバレッジ表示
これらの機能、皆さんは使っていますか?私はほとんど使いません。
ターミナルで git diff を打てば十分ですし、デバッグは logger や print で済ませてしまいたいと考えています。
そんなワケで、必要な機能だけを自分で選んで入れられる 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 を試してみてください。