コース一覧
Claude Code入門
生成コードを読む

Claude Code入門

AIコーディングエージェント「Claude Code」への指示の出し方、生成コードの読み方とレビュー、テストと安全確認、バグ修正から機能追加までの実践ワークフローを、毎レッスン実際にエージェントと開発しながら学びます。入門で自分が書いたおこづかい帳を、AIと一緒に機能拡張していきます。

1
Claude Codeとは
01. AIエージェントとは5分
02. 起動と最初の対話5分
03. はじめての指示5分
04. 動きのしくみ5分
05. つくる:最初の一巡6分
06. 第1章クイズ5分
2
基本操作
01. コードについて質問する5分
02. 修正を依頼する5分
03. 差分を読む6分
04. 動かして確かめる5分
05. 元に戻す5分
06. つくる:操作の一巡6分
07. 第2章クイズ5分
3
良い指示の出し方
01. 要件の伝え方5分
02. 受け入れ条件6分
03. タスクを分割する6分
04. 計画させてから実行6分
05. CLAUDE.mdを書く6分
06. つくる:指示の型6分
07. 第3章クイズ5分
4
レビューと安全
01. 生成コードを読む6分
02. 自分で試験する6分
03. テストを書かせる6分
04. 危険な操作の見極め6分
05. 修正の往復6分
06. つくる:レビュー一巡7分
07. 第4章クイズ5分
5
実践ワークフロー
01. バグ修正を任せる6分
02. 機能追加を任せる6分
03. リファクタを任せる6分
04. ドキュメントを書かせる6分
05. 知らないコードを解説させる6分
06. つくる:ワークフロー実践7分
07. 第5章クイズ5分
6
総合制作
01. 大型機能を共同実装8分
02. 総レビュー7分
03. 任せる/書くの境界6分
04. 自由拡張8分
05. 完成と次のステップ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 に依頼するにはが必要です

ヒント