Neovimの構成診断コマンド:checkhealthの使い方
プラグインを追加した後や、環境を新しくした後に「なんとなく動きが怪しい」と感じることがあります。原因を1つずつ手探りで確認するより先に、まず:checkhealthを実行すると、設定の何が問題かを一括で洗い出せます。
目次(10項目)
:checkhealthとは
Neovimに標準搭載されている診断コマンドで、実行すると一連のチェック項目を順番にテストし、結果をレポート形式のバッファに表示します。
:checkhealth
問題が見つかった箇所には、原因や対処方法へのヒントも一緒に表示されます。似た名前の:healthcheckというコマンドは存在しないので、打ち間違えに注意が必要です。
何をチェックしてくれるのか
デフォルトの標準チェック項目に加えて、導入しているプラグイン側が対応していれば、そのプラグイン固有の状態も表示されます。代表的な確認項目は次のとおりです。
- Neovim本体のバージョンとビルド情報
- Python3・Ruby・Node.jsなど外部プロバイダの認識状況
- クリップボード連携(クリップボードツールの検出状態)
- 設定ファイルの読み込みエラーの有無
- 導入しているプラグインのヘルスチェック結果
実体はruntime/lua/vim/healthを中心とした診断用のフレームワークで、設定ファイルの内容次第で確認できる項目が変わります。プラグイン側がhealth.lua(旧仕様ではhealth#プラグイン名#check())を実装していれば、そのプラグイン専用のチェック結果も一覧に加わります。
特定のプラグインだけをチェックする
プラグインの数が多いと結果が長くなり、目的の項目を探しづらくなります。引数にプラグイン名を渡すと、そのプラグインのチェックだけに絞り込めます。
:checkhealth lazy
:checkhealth mason
:checkhealth vim.lsp
:checkhealth vim.lspを実行すると原因の切り分けが早くなります。
Vim(非Neovim)で同等の確認をしたい場合
:checkhealthはNeovim固有のコマンドで、Vim/gVimには実装がありません。同等の確認をしたい場合は、rhysd/vim-healthcheckのようなプラグインで近い機能を補えます。ただし、外部言語のプログラミング言語環境チェックまでは対応していない点に注意が必要です。
結果に赤字(ERROR)が出たときの読み方
結果は基本的にOK・WARNING・ERRORの3段階で表示されます。ERRORの緊急度は、その機能を実際に使っているかどうかで変わります。
| ERRORの出た機能 | 優先度 |
|---|---|
| 実際には使っていないプロバイダやツール | 緊急対応は不要な場合がほとんど |
| 普段使っている機能(Python連携やクリップボードなど) | 設定ファイルのパス指定や外部ツールの導入状況を優先して見直す |
環境を移行した直後にクリップボードが効かなくなったことがありましたが、:checkhealthを実行したらクリップボードプロバイダが見つかっていないことがすぐに分かりました。原因を勘で探すより、先にこのコマンドを叩く習慣をつけたほうが結果的に早く解決できると感じています。
警告を減らす方向で考える
すべてをOKにする必要はありません。使っていない機能の警告は残しておいても実害がなく、むしろ無効化しておくほうが起動が速くなります。
let g:loaded_python3_provider = 0
let g:loaded_ruby_provider = 0
let g:loaded_perl_provider = 0
let g:loaded_node_provider = 0
この4行を書くと、対応する項目は「無効化されている」と表示されるようになり、警告が消えます。使うことになったら該当する行を外せば元に戻ります。探索そのものが走らなくなるので、起動時間にも効きます。
結果を人に渡す
不具合を報告するとき、環境の情報として :checkhealth の結果を求められることがあります。表示されているのは普通のバッファなので、そのまま保存できます。
:checkhealth
:w /tmp/health.txt
:checkhealth vim.lsp " 特定の項目だけ
Neovim 0.10以降、標準の項目は vim.health のように名前空間が付いた形になっています。:checkhealth のあとに Tab を押せば、その環境で実行できる項目の一覧が補完で出ます。
切り分けの順番
動きが怪しいときは、:checkhealth の次に確かめる順番を決めておくと早く済みます。まず設定を読まずに起動して再現するかを見て、再現しなければ自分の設定が原因です。
nvim --clean " 設定を読まずに起動
:scriptnames " 何が読み込まれているか
:verbose set <オプション>? " どこで設定されたか
nvim --startuptime /tmp/s.log " どこで時間を使っているか
この4つで、環境の問題・プラグインの問題・自分の設定の問題を切り分けられます。読み込み順の調べ方はscriptnamesの記事にまとめています。
まとめ
:checkhealthはNeovimの設定・環境まわりの不調を切り分ける最初の一手として使えます。プラグイン名を指定すれば特定領域だけに絞り込めるので、環境構築後や不調を感じたときは習慣的に実行すると安心です。Pythonの項目で警告が出たときの対処は実行パスの設定に、設定ファイルそのものが読まれていない疑いがあるときは:scriptnamesのほうが切り分けに向いています。