クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

AIの変更をレビューする

このレッスンのあとで: エージェントの変更を、頼みと見比べて読み、残す、直す、捨てるを決められる。

75分のレッスンコマンド8件AI コーディングエージェントのラボ:opencode でコードを説明・修正し、その結果を確かめる

頼んだのは1つだけ

コーディングエージェントに、関数を1つ足すよう頼みました。変更を見ると、関数は足されていました。ほかのファイルも変わっていました。

エージェントの変更は、まとめて届きます。残すか、直すか、捨てるか。頼みと見比べて決める読み方を学びます。

このレッスンのゴール

メモ

エージェントの変更を、頼みと見比べて読み、残す、直す、捨てるを決められる。

キーワード

ことばいみれい
差分変更の前と後の、違いを並べたものdiff -r before after
ハンク差分の中の、変わった1か所のまとまり
範囲外の変更頼んでいないファイルや行への変更
消えたテスト変更の前にあって、後にないテスト
決める残す、直す、捨てる、のどれかを選ぶこと

学生が入力するセルは、このプレビューでは空白です。

まず、頼みと大きさを比べる

変更を読む最初の問いは、頼んだこととの比べです。頼んだのは、休みの日を調べる関数 isClosed(day) を足すことでした。

触られたファイルを数えます。頼みに関係のないファイルがあれば、それが範囲外の変更です。変更の大きさも、頼みに見合うかを見ます。

ありうる頼み方

こんな頼み方があります。「shop.js に、isClosed(day) を足してください。day は 0 が日曜で、日曜だけ休みです。ほかのファイルと、ほかの関数は、変えないでください」

エージェントの返事は、毎回違います。返ってきた変更で、触れたファイルの一覧を最初に見ます。

変更の前と後を並べる

次の Run は、フォルダー demo-diff/ に、前の before/ と後の after/ を作ります。前は、価格の関数と、3つの確認です。後は、頼みどおり関数を足し、ほかにも変更があります。

どちらも手で書いたもので、エージェントの答えではありません。diff で、変更を読みます。

前の shop.js を書く

コマンド
docker exec -w /home/node/project agent sh -c "mkdir -p demo-diff/before && printf '%s\n' '// 売店の価格。' 'function price(yen, count) {' '  return yen * count;' '}' 'module.exports = { price };' > demo-diff/before/shop.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

前の check.js を書く

コマンド
docker exec -w /home/node/project agent sh -c "mkdir -p demo-diff/before && printf '%s\n' 'const shop = require(\"./shop.js\");' 'function check(name, ok) {' '  console.log((ok ? \"ok: \" : \"失敗: \") + name);' '}' 'check(\"1個\", shop.price(120, 1) === 120);' 'check(\"3個\", shop.price(120, 3) === 360);' 'check(\"0個\", shop.price(120, 0) === 0);' > demo-diff/before/check.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

後の shop.js を書く

コマンド
docker exec -w /home/node/project agent sh -c "mkdir -p demo-diff/after && printf '%s\n' '// 売店の価格と、休みの日。' 'function price(yen, count) {' '  return Math.round(yen * count / 10) * 10;' '}' 'function isClosed(day) {' '  return day === 0;' '}' 'module.exports = { price, isClosed };' > demo-diff/after/shop.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

後の check.js を書く

コマンド
docker exec -w /home/node/project agent sh -c "mkdir -p demo-diff/after && printf '%s\n' 'const shop = require(\"./shop.js\");' 'function check(name, ok) {' '  console.log((ok ? \"ok: \" : \"失敗: \") + name);' '}' 'check(\"1個\", shop.price(120, 1) === 120);' 'check(\"3個\", shop.price(120, 3) === 360);' 'check(\"日曜\", shop.isClosed(0) === true);' > demo-diff/after/check.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

後の settings.js を書く

コマンド
docker exec -w /home/node/project agent sh -c "mkdir -p demo-diff/after && printf '%s\n' '// 頼んでいない設定のファイル。' 'module.exports = { debug: true };' > demo-diff/after/settings.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

触れたファイルの一覧

コマンド
docker exec -w /home/node/project/demo-diff agent sh -c "env LC_ALL=C diff -rq before after; true"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

変更の中身を読む

コマンド
docker exec -w /home/node/project/demo-diff agent sh -c "env LC_ALL=C diff -r before after; true"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

1つずつのハンクを読む

差分は、ハンクごとに読みます。shop.js には3つあります。コメントの変更、price の計算の変更、関数の追加です。頼まれたのは、最後の1つだけです。

price は、10円単位に丸めるようになりました。頼んでいません。check.js では、「0個」の確認が1行消え、「日曜」の確認に替わっています。

2つのテストを動かす

コマンド
docker exec -w /home/node/project/demo-diff agent sh -c "node before/check.js; node after/check.js; grep -c ^check before/check.js after/check.js"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

テストが全部通れば、変更は安全だと思う人が多いです。消されたテストは、失敗できません。通るのは、残ったテストだけです。テストが通ったかではなく、テストが消えていないかも見ます。

残す、直す、捨てる

問題がなければ、残します。頼みに合っていても、範囲外の変更や大きすぎる変更があれば、直しを頼みます。テストが消えているときは、捨てます。

この例では、テストが消えたので、変更は捨てます。頼み直しは、isClosed だけを足す、としてやり直します。

例: 決め方

見つけたこと決める理由
頼みどおりで、ほかに変更がない残す頼みと合っている
範囲外のファイル、大きすぎる変更直す直せば使える
テストが消えた捨てる守りが外れている

学生が入力するセルは、このプレビューでは空白です。

さらに: 本物の変更で試す

今は、この考えを本物の変更で試すのに、よい時です。ラボのバグには触れません。代わりに、shop.js の写しで、新しい関数を1つ頼みます。

変更が届いたら、git diff を読みます。触れたファイル、消えた行、消えたテストを書き出し、残す、直す、捨てるを、理由と一緒に決めます。

このラボとソースについて: AI コーディングエージェントのラボ:opencode でコードを説明・修正し、その結果を確かめる

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。