---
title: Neovim 実践：境界条件の誤りを修正する
url: https://doc.liz6.com/ja/tools/nvim/05-project-workflow
locale: ja
area: tools
tags:
- Neovim
- 開発ツール
date: 2026-09-15
modified: 2026-09-15
description: Rust の小さな送料関数で、失敗テスト、探索、最小修正、整形確認、Git 差分確認を一巡する。
---

# Neovim 実践：境界条件の誤りを修正する

外部依存のない Rust プロジェクトで、失敗の発見から修正、検証、確認までを進める。条件分岐が読めればよく、エディタとプロジェクトツールの連携が目的である。

Cargo、Git、Neovim を用意する。LSP は探索を助けるが、基本編集とテストは独立して行える。

## 練習プロジェクトを作る

editor-lab が存在しない練習ディレクトリで実行する。

```bash
cargo new --lib --vcs git editor-lab
cd editor-lab
nvim src/lib.rs
```

学習用設定を使うなら最後を `NVIM_APPNAME=nvim-lab nvim src/lib.rs` にする。以後は editor-lab のルートで実行する。

要件は「注文額が 50 以上なら送料無料、それ未満なら 5」。`src/lib.rs` を次の全文で置き換える。境界の誤りを意図的に含んでいる。

```rust
pub fn shipping_fee(total: u32) -> u32 {
    if total > 50 {
        0
    } else {
        5
    }
}

#[cfg(test)]
mod tests {
    use super::shipping_fee;

    #[test]
    fn below_threshold() {
        assert_eq!(shipping_fee(49), 5);
    }

    #[test]
    fn at_threshold() {
        assert_eq!(shipping_fee(50), 0);
    }

    #[test]
    fn above_threshold() {
        assert_eq!(shipping_fee(51), 0);
    }
}
```

`:write` で保存する。金額は整数として、通貨精度の話をこの課題から分離する。

## 失敗内容を読む

別ペインで実行する。

```bash
cargo test
```

二つが成功し、at_threshold が失敗する。実際は 5、期待は 0。コンパイルと型検査は通るため、LSP が誤りを示すとは限らない。

要件と期待値を確認してから、呼び出しから関数へ移動する。LSP がなければ `/shipping_fee` を使う。`total > 50` が 50 自体を除いていることを見る。

失敗する状態を練習用のローカル基準として保存する。このリポジトリだけで実行する。

```bash
git add Cargo.toml Cargo.lock src/lib.rs .gitignore
git diff --cached
```

内容を確認してからコミットする。

```bash
git commit -m 'Add shipping fee boundary exercise'
```

遠隔 push は行わない。作者情報が未設定なら自分の情報を設定して続ける。

## 最小の修正

元の条件一行を置き換える断片：

```rust
if total >= 50 {
```

保存後、境界テストだけを実行する。

```bash
cargo test at_threshold
```

成功したら全体と整形を確認する。

```bash
cargo test
cargo fmt --check
```

三テストが成功し、整形差分がないことが期待値。整形検査が失敗したらプロジェクト規則を確認し、`cargo fmt` の結果も読む。

## エディタからテストへつなぐ

別の Zellij ペインでも Neovim の `:terminal` でもよい。端末モードから普通モードへは、既定では `Ctrl+\` に続けて `Ctrl+n` を押す。

実行場所と保存状態を確認する。Cargo はディスク上のファイルを読み、未保存 buffer は自動入力にならない。安定したら [CLI ツール](../cli-toolbox.md)の justfile で入口を共通化できる。

## 差分を読んで完了する

```bash
git diff -- src/lib.rs
git diff --check
git status --short
```

振る舞いの変更は `>` から `>=` のみになるはずである。全体整形、改行コード、別ファイルが変わった場合は理由を確認する。テスト成功は差分確認の代わりではない。

修正は別コミットにまとめられる。失敗基準と最小修正の関係が明確に残ることが重要である。

## デバッガで見るなら

この例はテストで十分追える。複雑な処理では条件にブレークポイントを置き、at_threshold の実行中に total が 50 でどの分岐へ入るかを見る。

DAP core と Rust の必要ツールを有効化したら、Rust extra の debuggables からテスト対象を選ぶ。候補がない場合は先に Cargo の構築を確認し、adapter、生成物、デバッグ情報を調べる。

型が正しくても要件に合わなかった理由、三つの境界テストの役割、修正一行の意味を説明できれば課題は完了である。
