Neovim 起動速度「100msの壁」を突破せよ:プロファイリングから導く究極のエンジニアリング
「Neovimの起動が遅い」。この不満は、開発者の思考フローを分断する最大の阻害要因だ。ターミナルを開き、コマンドを打ち、瞬時にコードへアクセスする。この一連の動作に0.5秒以上のラグが生じているなら、それはツールがあなたを待たせているのではなく、あなたがツールの設計思想に無頓着である証拠だ。
本稿では、Neovimの起動時間を100ms以下に抑え込み、脳の回転速度とエディタの追従性を完全に同期させるための「プロファイリング」と「最適化」の真髄を伝授する。
—
1. 敵を知る:`:profile` によるボトルネックの可視化
漠然と「プラグインが多いから遅い」と決めつけるのは素人だ。Neovimには、起動プロセスにおける各関数の実行時間をミリ秒単位で計測する強力なプロファイリング機能が内蔵されている。
以下のコマンドをターミナルで実行し、起動時のパフォーマンスを可視化せよ。
–startuptime を指定して起動し、ログをファイルに出力する
nvim –startuptime /tmp/nvim-startup.log -c ‘q’
生成された `/tmp/nvim-startup.log` を開くと、どのファイルがロードされ、どれだけの時間を消費したかが一行ずつ記録されている。特に注目すべきは、`lua` ファイルの読み込み時間だ。ここで上位を占めているプラグインこそが、あなたの「思考のラグ」の正体である。
—
2. 賢者の戦術:Lazy.nvim による「オンデマンド・ローディング」
現代のNeovim環境において、`lazy.nvim` は単なるパッケージマネージャではない。これは「実行時に必要なコードのみをメモリにロードする」ための戦略的リソース管理ツールだ。
「とりあえず全部読み込む」という設定は今すぐ捨てろ。以下のように、イベント(`event`)やコマンド(`cmd`)をトリガーにして読み込むのが大前提だ。
— lazy.nvim の定義例
{
“nvim-telescope/telescope.nvim”,
— cmd: 指定したコマンドが打たれた瞬間に初めて読み込む
cmd = “Telescope”,
— keys: 指定したキーが押された瞬間に読み込む(これは非常に強力)
keys = {
{“
},
config = function()
require(“telescope”).setup({…})
end,
}
なぜこれが効くのか
静的解析やLSPの起動、UIの描画は、あなたがその機能を使うまでメモリ上には存在させる必要がない。この「遅延読み込み」を徹底することで、起動時のフットプリントを最小化し、エディタを開いた瞬間のレスポンスを劇的に向上させる。
—
3. 実務を加速させる「神プラグイン」選定と設計思想
プラグインは「機能」ではなく「生産性向上ツール」として選別せよ。私がチーム開発で必ず導入を推奨する、アーキテクチャ的に美しいプラグインは以下の3つだ。
1. [mini.nvim](https://github.com/echasnovski/mini.nvim):
- 巨大なプラグインをいくつも入れるのではなく、モジュール単位で必要な機能だけを摘める。依存関係が少なく、爆速。
2. [conform.nvim](https://github.com/stevearc/conform.nvim):
- 非同期でフォーマットを実行する。保存時にメインスレッドをブロックさせない設計は、モダンな開発環境において必須だ。
3. [fidget.nvim](https://github.com/j-hui/fidget.nvim):
- LSPの進捗状況をステータスラインで可視化する。バックグラウンドで何が起きているかを知ることは、不必要な待機時間を減らす心理的安全策になる。
—
4. チーム開発における「設定共有化」のベストプラクティス
個人のエディタ設定が聖域化すると、チーム内でのナレッジ共有が断絶する。設定ファイルは `init.lua` 一枚に押し込まず、モジュール化して管理せよ。
推奨ディレクトリ構成
~/.config/nvim/
├── init.lua # メインエントリーポイント(読み込みの順序を制御)
├── lua/
│ ├── config/
│ │ ├── lazy.lua # プラグイン管理の定義
│ │ └── options.lua # 汎用設定(インデント、検索等)
│ └── plugins/ # 機能ごとに分割した設定ファイル群
│ ├── lsp.lua
│ └── telescope.lua
チーム運用ルール:
- ハードコードの禁止: ローカルの絶対パスは環境変数か `vim.fn.expand` で動的に解決する。
- プラグインロックファイルの徹底: `lazy-lock.json` をGit管理下に置き、全員が同じバージョンのプラグインを使用する。これにより「動く/動かない」の環境差異をゼロにする。
—
5. 最後に:職人は道具を疑う
100ms以下の起動を実現することは、単なる自己満足ではない。それは、あなたの集中力を守るための防壁だ。
起動時間が遅いエディタを使っているとき、あなたは無意識のうちに「エディタが立ち上がるまでの数秒間」を無駄にし、その間に思考が逸れる。プロフェッショナルであれば、ツールが自分の脳の拡張としてシームレスに機能するようにチューニングせよ。
まずは今すぐ、`nvim –startuptime` を叩け。そこから、あなたの最強のIDE構築が始まる。