nvim-dapでpythonのスクリプトとテストコードをデバッグする

pythonのスクリプトやテストコードをnvim-dapを使ってデバッグする方法についてのメモです。

準備

下記のプラグインが必要。

また、下記pythonのライブラリが必要なので、事前にインストールしておきます。

  • debugpy

nvim-dap

言わずと知れたnvimのデバッグアダプタープロトコル。これ一つでどの言語でもデバッグできるインターフェースを提供してくれる強力なプラグインです。

nvim-dap-python

nvim-dapのPython用の拡張。nvim-dapのみでPythonのコードをデバッグすることもできますが、関数やクラス単位でデバッグを行うことができるようになります。

テストコードのデバッグには必須です。

nvim-treesitter

Tree-sitterという構文解析ライブラリがあります。nvim-treesitterはそれをnvimで提供するためのプラグイン。構文解析した結果を元にシンタックスハイライトの機能などが利用できるようになります。

nvim-dap-pythonがこのプラグインに依存しており、関数・クラス単位でデバッグを行う際に必須です。

設定

nvim-dapの設定は、init.luaまたはnvim-dap用の設定ファイルに下記を記述します。

1require("dap-python").setup("python")
2require("dap-python").test_runner = "pytest"

test_runnerはデフォルトでpytest.iniまたはmanage.pyを見てテストランナーを自動で判別しますが、それらのファイルがない場合はunittestをデフォルトとします。そのためpytestを使う場合は明示的に指定する必要があります。

下記はnvim-treesitterの設定。これもinit.luaなどに記述します。

1require("nvim-treesitter.configs").setup({
2	ensure_installed = { "go", "python" }, -- Nvimを起動したときに自動で:TSInstallが実行される
3	highlight = {
4		enable = true,
5		-- disable = { "go", "python" }, -- ハイライトをオフにしたい言語を指定する
6	},
7})

デバッグ操作

デバッグ操作はnvim-dapのコマンドで行います。詳細はnvim-dapのドキュメントを参照のこと。

Pythonのスクリプトを開いてデバッグを実行すると下図のようになります。

pythonのスクリプトをデバッグしている様子

テストコードのデバッグ

テストコードのデバッグは、テストコードを開き、実行したいテスト関数にカーソルを移動させます。その後lua require('dap-python').test_method()を実行すると、テストランナーが起動します。

pythonのテストコードをデバッグしている様子

まとめ

これでpythonのコーディングも捗りますね。デバッグを設定する過程でtreesitterというプラグインも導入することになりましたが、これも非常に便利です。