vim-dadbod-uiとauto-saveの競合が発生した話
本記事はVim駅伝の2026-02-16の投稿です。
前回の記事はglmlmさんによる単一ウィンドウで扱うNeovim用デバッグUI (nvim-dap-view)でした。
はじめに
年末頃、エンジニアになってから約3年半使い続けてきた JetBrains 製品を卒業しました。
ストレージ逼迫がきっかけでIDEからNeovimに移行した話
scriptlab.jp
つまり、IntelliJ、PhpStormなど を Neovim に移行したということです。
今回は、DataGrip の代替として導入した vim-dadbod-ui が auto-save.nvim と競合し困った話をします。
内容自体は軽めですが、実務の設計などにも活かせる良い学びになったので記事にしました。
本題に入る前に、nvim を使い始めて1ヶ月の所感を少し…
1月はなかなか馴染めずに、「nvim やめて IDE に戻った方が良いのでは」と思ったりもしました。
そのまま何も考えず使い続けていると、2月に入る頃には不思議と慣れていました。今は普通に作業できているどころか、アプリ間の移動が減ったことで開発フローが整理され、仕事が効率化されているなと感じ始めています。
結果として、IDE をやめた判断は悪くなかったと思います。
auto-save 導入後に起きたこと
スペース + du でDBUIを開いて、SQLを書こうとすると…
- 1文字打つたびにエラーが出まくる
- 書いてる途中なのにクエリが勝手に実行される
- エラーメッセージで画面が埋まって何も入力できない
5 Whys で原因を探る
Why 1: なぜエラーが出まくるの?
書きかけのSQL(文法的に正しくない)が勝手に実行されているから
Why 2: なぜ勝手に実行されるの?
vim-dadbod-uiは「ファイルを保存したらSQLを実行する」という仕様だから。そしてauto-save.nvim が1文字打つたびに保存している
Why 3: なぜauto-save.nvim はvim-dadbod-ui のファイルも保存するの?
auto-save.nvim の設定で、vim-dadbod-uiのバッファを除外していなかったから
Why 4: なぜ除外していなかったの?
auto-save.nvimを入れたとき、vim-dadbod-uiとの相性問題を考慮していなかったから
Why 5: なぜ考慮していなかったの?
「自動保存」と「保存したら実行」という2つの機能が組み合わさったときの副作用を想像できていなかった
根本原因
2つのプラグインの設計が衝突していることが根本原因かなと思います。
設計が衝突していることもそうですが、副作用を考慮できなかったことも根本原因かと…
解決方法
vim-dadbod-uiの自動実行機能を無効化することで解決しました。
nvim/lua/plugins/database.luaのvim-dadbod-ui設定に以下を追加します。
vim.g.db_ui_execute_on_save = false
この設定により、保存してもクエリは自動実行されなくなります。クエリを実行したいときは、保存することで実行します。
参照
終わりに
今回の問題そのものは、設定を1行追加するだけで解決できました。
ただ、問題の本質はそこじゃないかなと思っています。
単なるプラグインの設定ミスというより、「何かの機能を足すときに副作用を想像できていなかった」ことが本質だったと感じています。
「あれやりたいなぁ。んじゃ追加すっか」ではなく「その機能を追加したとき副作用は何だろうか」まで考える必要があることを学びました。
実務の設計でも同じく良い機能同士が、必ずしも良い結果を生むとは限らないことを覚えておきます。
たとえば「もっと美味しくなるはず」と思って妻の料理(美味しい)にマヨネーズ(美味しい)を足してしまうようなものです。(副作用を想像するだけで肝が冷えますわ)
次回は自分の設定ファイルを棚卸してみた、なんて記事を書こうかなと思っています。最後まで読んでくれてありがとうございました。
コメントを残す