コース一覧
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分

生成コードを読む

動くことと正しいことは別

AI が返したコードは、たいてい動きます。動くから正しい、とは限りません。

おこづかい帳の合計を出す関数を頼んだとします。返ってきたのが次のコードだったとします。

Python

def total(records):
    return sum(r["amount"] for r in records)

テストデータでは正しい数字が出ます。ではこれで採用してよいでしょうか。

読むときに見る3つ

生成コードを読むときは、次の3つを順に確かめます。

プレーンテキスト

意図   頼んだこととコードのやっていることが一致しているか
入力   おかしな入力が来たときどうなるか
副作用 頼んでいないことをしていないか

さきほどの total を、この3つで見てみます。意図は合っています。入力はどうでしょうか。records が空リストなら sum は 0 を返すので大丈夫です。では amount という鍵が無いレコードが混ざっていたら、KeyError で落ちます。返金のマイナス金額はそのまま引かれます。それが仕様なのか、たまたまそうなっているだけなのかは、コードを読んだだけでは分かりません。

「たまたまそうなっている」を「仕様として決まっている」に変えるのがレビューです。

1行ずつ説明させる

自分で読んで分からない箇所があったら、書いた本人に聞きます。相手は AI なので、いくらでも聞けます。

プレーンテキスト

悪い   このコード合ってる?
良い   total 関数を1行ずつ説明してください。
       records が空のとき、amount が無いとき、
       amount が負のときにそれぞれ何が返るかも書いてください。

「合ってる?」と聞くと、AI はたいてい「合っています」と答えます。AI に判定させるのではなく、事実を説明させて、判定は自分がします。

聞くべきは次のような形です。何が起きるかを言わせて、自分が良し悪しを決める、という分担にします。

プレーンテキスト

この関数に空のリストを渡すと何が返りますか。
この関数はファイルを書き換えますか。
この変更で、以前からある関数の戻り値は変わりますか。

副作用は差分の外にも出る

副作用とは、頼んだこと以外に起きる変化のことです。ファイルの上書き、グローバル変数の書き換え、渡したリストそのものの並べ替えなどが該当します。

Python

def sort_records(records):
    records.sort(key=lambda r: r["date"])
    return records

これは呼び出し元のリストまで並び替えます。呼んだ側が元の順序を使っていたら、そこが静かに壊れます。エラーは出ません。だから読んで気づくしかありません。

演習

kakeibo.py の total_amount を読んでください。いまは合計を返しますが、amount の鍵が無いレコードや、金額が数値でないレコードが来ると落ちます。落ちない形に直させてください。何を無視して何を数えるのかを、指示の中で決めてください。

完成条件

  • 触ってよいのは kakeibo.py だけです
  • amount が無いレコードと、amount が int でも float でもないレコードは合計に数えません
  • total_amount 関数の戻り値で採点します

依頼

kakeibo.py の total_amount を、amount が無いレコードや数値でないレコードが混ざっても落ちないようにしてください。数えないレコードの扱いを指示で決めてください。

  • ・触ってよいのは kakeibo.py だけです
  • ・amount が無いレコードと、amount が int でも float でもないレコードは合計に数えません
  • ・total_amount 関数の戻り値で採点します

いまのコード

kakeibo.py

def total_amount(records):
    """おこづかい帳のレコードの金額を合計する"""
    return sum(r["amount"] for r in records)

AI への指示

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

ヒント