コース一覧
Claude Code入門:良い指示とレビュー
テストを書かせる

Claude Code入門:良い指示とレビュー

Claude Codeへの指示とレビューの基本を学び、作業内容を確認するコースです。

1
良い指示の出し方
01. 要件の伝え方5分
02. 受け入れ条件6分
03. タスクを分割する6分
04. 計画させてから実行6分
05. CLAUDE.mdを書く6分
06. つくる:指示の型6分
07. 第3章クイズ5分
2
レビューと安全
01. 生成コードを読む6分
02. 自分で試験する6分
03. テストを書かせる6分
04. 危険な操作の見極め6分
05. 修正の往復6分
06. つくる:レビュー一巡7分
07. 第4章クイズ5分

テストを書かせる

手で試すのは1回しか効かない

前の回で、境界値を自分で叩きました。あれは強力ですが弱点があります。次にコードを変えたとき、もう一度全部やり直さないといけません。

人間は3回目でやらなくなります。だから機械にやらせます。それが自動テストです。

自動テストは、期待する値をコードとして書き残したものです。おこづかい帳の合計なら、次のような形になります。

Python

def test_total():
    assert total_amount([{"amount": 300}, {"amount": 200}]) == 500

def test_total_empty():
    assert total_amount([]) == 0

一度書けば、以後は実行するだけで全部の確認が終わります。

テストを頼むときに書くこと

「テストを書いて」だけで頼むと、AI はふつうの入力のテストを3つ書いて終わりにしがちです。まん中しか通らないテストは、無いのとあまり変わりません。

頼むときは、どの場合を確かめてほしいのかを列挙します。

プレーンテキスト

悪い   total_amount のテストを書いて
良い   total_amount のテストを書いてください。
       次の場合をそれぞれ確かめてください。
       ふつうの2件、空リスト、amount が無いレコードが混ざる場合、
       金額が負の場合。

前の回で自分が叩いた境界値が、そのまま列挙する項目になります。手で試した内容をテストに移すと考えてください。

テスト自体も生成物である

ここが落とし穴です。AI が書いたテストが全部通ったとき、意味は2つに割れます。

プレーンテキスト

可能性A   コードが正しい
可能性B   コードの現在の挙動に合わせてテストが書かれた

B は実際に起こります。実装を読んで、その実装が返す値をそのまま期待値にしたテストです。これは何も検証していません。バグごと固定しているだけです。

見分け方は簡単です。期待値を自分で読んで、仕様と合っているかを確かめます。先ほどの例なら、空リストのとき 0 を期待しているか、それとも None を期待しているか。仕様として自分が決めた値と違うなら、直すのはテストではなくコードです。

落ちるところから始める

テストを信用する一番速い方法は、一度落としてみることです。

プレーンテキスト

1  テストを書かせる
2  実行して全部通ることを見る
3  コードをわざと1行壊す
4  テストが落ちることを確かめる
5  戻す

3で壊しても全部通るなら、そのテストは何も見ていません。この確認は10秒で終わります。

演習

kakeibo.py の count_over は、しきい値以上の支出の件数を数える関数です。いまは境界の扱いが間違っていて、ちょうどしきい値と同じ金額を数えません。境界を含む形に直させてください。しきい値ちょうどをどう扱うかを、必ず指示に書いてください。

完成条件

  • 触ってよいのは kakeibo.py だけです
  • しきい値と同じ金額は数えます
  • count_over 関数の戻り値で採点します

依頼

kakeibo.py の count_over を、しきい値ちょうどの金額も数えるように直してください。境界の扱いを指示に明記してください。

  • ・触ってよいのは kakeibo.py だけです
  • ・しきい値と同じ金額は数えます
  • ・count_over 関数の戻り値で採点します

いまのコード

kakeibo.py

def count_over(amounts, threshold):
    """しきい値をこえる支出の件数を数える"""
    count = 0
    for a in amounts:
        if a > threshold:
            count += 1
    return count

AI への指示

残り 3 回
AI に依頼するにはが必要です

ヒント