Neovim 実践:境界条件の誤りを修正する
このページの目次
外部依存のない Rust プロジェクトで、失敗の発見から修正、検証、確認までを進める。条件分岐が読めればよく、エディタとプロジェクトツールの連携が目的である。
Cargo、Git、Neovim を用意する。LSP は探索を助けるが、基本編集とテストは独立して行える。
練習プロジェクトを作る
editor-lab が存在しない練習ディレクトリで実行する。
学習用設定を使うなら最後を NVIM_APPNAME=nvim-lab nvim src/lib.rs にする。以後は editor-lab のルートで実行する。
要件は「注文額が 50 以上なら送料無料、それ未満なら 5」。src/lib.rs を次の全文で置き換える。境界の誤りを意図的に含んでいる。
:write で保存する。金額は整数として、通貨精度の話をこの課題から分離する。
失敗内容を読む
別ペインで実行する。
二つが成功し、at_threshold が失敗する。実際は 5、期待は 0。コンパイルと型検査は通るため、LSP が誤りを示すとは限らない。
要件と期待値を確認してから、呼び出しから関数へ移動する。LSP がなければ /shipping_fee を使う。total > 50 が 50 自体を除いていることを見る。
失敗する状態を練習用のローカル基準として保存する。このリポジトリだけで実行する。
内容を確認してからコミットする。
遠隔 push は行わない。作者情報が未設定なら自分の情報を設定して続ける。
最小の修正
元の条件一行を置き換える断片:
if total >= 50
保存後、境界テストだけを実行する。
成功したら全体と整形を確認する。
三テストが成功し、整形差分がないことが期待値。整形検査が失敗したらプロジェクト規則を確認し、cargo fmt の結果も読む。
エディタからテストへつなぐ
別の Zellij ペインでも Neovim の :terminal でもよい。端末モードから普通モードへは、既定では Ctrl+\ に続けて Ctrl+n を押す。
実行場所と保存状態を確認する。Cargo はディスク上のファイルを読み、未保存 buffer は自動入力にならない。安定したら CLI ツールの justfile で入口を共通化できる。
差分を読んで完了する
振る舞いの変更は > から >= のみになるはずである。全体整形、改行コード、別ファイルが変わった場合は理由を確認する。テスト成功は差分確認の代わりではない。
修正は別コミットにまとめられる。失敗基準と最小修正の関係が明確に残ることが重要である。
デバッガで見るなら
この例はテストで十分追える。複雑な処理では条件にブレークポイントを置き、at_threshold の実行中に total が 50 でどの分岐へ入るかを見る。
DAP core と Rust の必要ツールを有効化したら、Rust extra の debuggables からテスト対象を選ぶ。候補がない場合は先に Cargo の構築を確認し、adapter、生成物、デバッグ情報を調べる。
型が正しくても要件に合わなかった理由、三つの境界テストの役割、修正一行の意味を説明できれば課題は完了である。