テストとコード品質

なぜテストコードを書くのか? 面倒でも書く本当の理由

「これ、いつ全部書くの…?」機能を1つ作るだけでも時間がないのに、テストコードまでと言われると正直ため息が出ます。

読了 3 分
なぜテストコードを書くのか? 面倒でも書く本当の理由のカバー画像

「これ、いつ全部書くの…?」機能を1つ作るだけでも時間がないのに、テストコードまでと言われると正直ため息が出ます。

結論から言うと、テストコードを書く本当の理由は「未来の自分を守るため」です。今10分多く使うことで、3か月後の深夜に発生する障害を防ぎます。

テストコードはなぜ必要?

最大の理由は、コードを修正するのが怖くなくなることです。

コードは一度書いて終わりではありません。何度も修正し、機能を追加していきます。

テストがないと、1行直すたびに不安になります。「これを直したら、別の場所で壊れない?」

テストがあれば、修正後に1回実行するだけで確認できます。緑なら安心、赤ならどこが壊れたかすぐ分かります。

修正して1回実行。緑でなければすぐ原因を確認
修正して1回実行。緑でなければすぐ原因を確認

これを「回帰テスト」と呼びます。以前は動いていたものが再び壊れるのを見つけてくれる、ということです。


面倒でもテストコードを書く本当の理由

正直、テストコードは最初は損のように感じます。目に見える機能が増えるわけではないからです。

しかし、プロジェクトが大きくなると話は変わります。

機能が30個、50個と増えると、手作業ですべて確認するのは不可能です。1つ直すたびに全部クリックするわけにはいきません。

このときテストがあれば、コマンド1行で数十個を数秒で検証できます。

2つ目の理由は、テストコードがそのまま「ドキュメント」になることです。

よく書かれたテストコードを見れば、この関数がどの入力に対してどんな結果を返すか一目で分かります。

コメントは古くなると嘘をつきますが、テストは実行されるので嘘をつけません。

簡単な例を見てみましょう。割引額を計算する関数のテストです。

// 11万円に 10% 割引 → 9千円になるはず
@Test func 割引_10率を_適用する() {
    let result = applyDiscount(10000, rate: 0.1)
    #expect(result == 9000)
}

このテストを見るだけで、applyDiscountが何をする関数かすぐ理解できます。

ターミナルにPASSと表示された瞬間の安心感は、体験してみないと分かりません
ターミナルにPASSと表示された瞬間の安心感は、体験してみないと分かりません

テストコードはどう始める?

最初からすべてをテストしようとすると疲れて諦めてしまいます。

私は次のように始めることをおすすめします。

  1. お金の計算やログインなど、壊れると大変な重要ロジックから
  2. 条件分岐が多く、混乱しやすい関数
  3. 一度バグが発生した場所(再発防止用)

逆に、単純な画面コードや頻繁に変わる部分は後回しで構いません。

すべてを100%テストすることが目標ではなく、コストに見合う効果を考えることが重要です。

私はこの3つの優先順位から、1つずつテストを追加していきました
私はこの3つの優先順位から、1つずつテストを追加していきました

よくある質問

Q. テストを書くと開発が遅くなりませんか?

A. 最初は遅くなります。ただ、プロジェクトの中盤以降はむしろ速くなります。バグを見つけて修正する時間が大幅に減るからです。

Q. テストカバレッジは何%がよいですか?

A. 数字にこだわる必要はありません。70~80%で十分で、重要なロジックがカバーされているかのほうが大切です。


テストコードは実力を見せるためではなく、未来の自分と仲間のための安全装置です。

今日書いた関数を1つ選び、テストを1つだけ追加してみてください。その小さな緑の表示がくれる安心感を味わえば、なぜ皆がテストを書けと言うのか実感できます。

あわせて読みたい