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に載っている方法で試してみました。

Terminal window
nvim -V5/tmp/nvim-debug.log

が、中身を見ても分からず、Claudeにも見てもらっても特定できないねと言われた後、「macOSのクラッシュレポートを見る?」と提案されました。

### macOSのクラッシュレポートがあるか

「ターミナルの中での出来事だし、メモリがめっちゃ使われてた訳でもなさそう。だから 別にmacOS関係ないのでは?」と思いました。
でも念のため言われたコマンドを実行したら、 クラッシュレポートありました

提案されたコマンド
ls ~/Library/Logs/DiagnosticReports/ | grep -i nvim
実行結果
nvim-2026-02-20-084211.ips
nvim-2026-02-20-084215.ips
nvim-2026-02-20-084219.ips
nvim-2026-02-20-084231.ips
nvim-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関係のファイルを全部削除してみました。

Terminal window
rm -rf ~/.local/share/nvim/tree-sitter-*
rm -rf ~/.local/share/nvim/site/

次の起動のタイミングでインストールし、クラッシュしてた操作をしたらクラッシュしなくなりました。


以上、クラッシュしたときにやったことの備忘録でした。macOSのクラッシュレポートをちゃんと見たのは初めてで、 ターミナルの中で起こったことでも使える と分かって勉強になりました。