Neovimクラッシュして焦った——macOSのクラッシュレポートも見よう
README.mdを開いたらNeovimが落ちました 。
直前にプラグインアップデート時にBreaking Changesは確認していましたが、「確認漏れか……?」と焦りました。
原因はプラグインではなく macOS に起因するものでした。この記事では他のクラッシュするパターンでも役に立つように、いろいろ備忘録として残します。
## 調査でやること
先に、クラッシュしたときにやっておくことまとめです。思いついたら随時追記します。
- クラッシュするタイミングの把握
- プラグイン無しで操作してみる
- プラグイン二分探索
- プラグイン更新履歴の確認(例:
:Lazy log) nvim -V5 /tmp/nvim-debug.logのようにしてログを見る:checkhealth実行してみる- Issue漁る
- macOSのクラッシュレポートも見る
## 何が起きたのか
冒頭にも書きましたが、もう少し詳しめに書いておきます。
- クラッシュ例
nvim README.mdは起動後すぐに落ちたnvimで起動後、FizzyFinderを開こうとしたら落ちたnvimで起動後、:でコマンドラインモードにすると落ちた
- クラッシュしなかった動作
nvim --noplugin -u NONE README.md
バージョンは次のとおり。
- Neovim: 0.11.6
- macOS: 15.6.1
## 状況
直前にlazy.nvimで プラグインを大量にアップデート していたため、アップデートが原因ではと推測しました。ちなみにlazy.nvimではアップデート時にBreaking Changesのコミットがあれば分かりやすく表示してくれます。
## 試したこと
試したことを書いておきます。
「Breaking Changesの読み落としか?」と思いましたが、クラッシュしたときにはどのプラグインがBreaking Changes入ってたか覚えてませんでした。
※このブログを書いている途中に「もしかして」と思って調べたところ、lazy.nvimのプラグインでは:Lazy logでアップデートのログが見られます。ここから直近の更新を漁れそうです。今回は気づきませんでした。
### プラグイン二分探索
というわけで最初にやったのはプラグインの二分探索です。筆者は次のようにimportを使って記述しているため、 コメントアウトするだけでプラグインを無効化 できます。
require("lazy").setup({ spec = { { import = "plugins.nightfox" }, { import = "plugins.bufferline" }, -- { import = "plugins.dial" }, -- { import = "plugins.lsp.index" }, },})設定方法は別の記事lazy.nvimの使い方から起動を爆速にする方法までを解説に書いています。
やってみたところ、怪しいのはtreesitterのようです。
### 本当にtreesitterか、ログを漁ってみる
Claudeにログ取りつつ起動できないか聞いてみて、:help -Vに載っている方法で試してみました。
nvim -V5/tmp/nvim-debug.logが、中身を見ても分からず、Claudeにも見てもらっても特定できないねと言われた後、「macOSのクラッシュレポートを見る?」と提案されました。
### macOSのクラッシュレポートがあるか
「ターミナルの中での出来事だし、メモリがめっちゃ使われてた訳でもなさそう。だから 別にmacOS関係ないのでは?」と思いました。
でも念のため言われたコマンドを実行したら、 クラッシュレポートありました 。
ls ~/Library/Logs/DiagnosticReports/ | grep -i nvimnvim-2026-02-20-084211.ipsnvim-2026-02-20-084215.ipsnvim-2026-02-20-084219.ipsnvim-2026-02-20-084231.ipsnvim-2026-02-20-092112.ips...### クラッシュレポートの中身を見る
中身を見た所、SIGKILLがありました。コード署名の不整合らしいです。
"exception" : {"codes":"0x0000000000000032, 0x0000000106534000","rawCodes":[50,4401086464],"type":"EXC_BAD_ACCESS","signal":"SIGKILL (Code Signature Invalid)","subtype":"UNKNOWN_0x32 at 0x0000000106534000"},具体的にどのファイルなのかまでは分かりませんでしたが、.soのファイルがいくつかありました。
168: "path" : "\/Users\/USER\/*\/luasnip-jsregexp.so",169: "name" : "luasnip-jsregexp.so"177: "path" : "\/Users\/USER\/*\/json.so",178: "name" : "json.so"195: "path" : "\/Users\/USER\/*\/vim.so",196: "name" : "vim.so"204: "path" : "\/Users\/USER\/*\/toml.so",205: "name" : "toml.so"213: "path" : "\/Users\/USER\/*\/regex.so",214: "name" : "regex.so"222: "path" : "\/Users\/USER\/*\/typescript.so",223: "name" : "typescript.so"### 対応
以前.soのファイルをtreesitter関係で見たのと前述のとおり怪しかったので、treesitter関係のファイルを全部削除してみました。
rm -rf ~/.local/share/nvim/tree-sitter-*rm -rf ~/.local/share/nvim/site/次の起動のタイミングでインストールし、クラッシュしてた操作をしたらクラッシュしなくなりました。
以上、クラッシュしたときにやったことの備忘録でした。macOSのクラッシュレポートをちゃんと見たのは初めてで、 ターミナルの中で起こったことでも使える と分かって勉強になりました。