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

無料レッスン

ゲート付き評価スイートの作り方

このレッスンのあとで: 私は、ケース、採点、比較、ゲートを1つのスイートにまとめられます。

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

機能を壊す変更は、出荷できない

評価スイートとは、1つのコマンドです。ケースを実行し、返事を採点し、本番のバージョンと比べ、ゲートが破れたら失敗します。実行を思い出さなくても動く確認だけが、機能を守るので役に立ちます。

ショップは、振り分け機能の次のプロンプトが悪化したら、自動で止まるようにしたいと考えています。

このレッスンのゴール

メモ

私は、ケース、採点、比較、ゲートを1つのスイートにまとめられます。

キーワード

ことばいみれい
評価スイートケース、採点、比較、ゲートを1つにしたコマンド
ゲート実行が満たすべき合格ライン
必須ケース決して不合格になってはいけないケース
終了コードプログラムが終わるときの数。成功なら01
レポート実行の結果を印字したもの

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

ゲートは、実行の前に決める合格ライン

結果を見る前にゲートを決めます。見たあとでは、結果に合わせて曲げてしまうからです。数は少なく、明確にします。最低の合格率、基準版からの低下の上限、審査役の平均の下限です。

必須ケースのリストも加えます。拒否ケースが不合格なら、合格率が良く見えても失敗です。

例: 振り分け機能の4つのゲート

ゲート限度理由
合格率75 パーセント以上品質の下限
低下基準版から 8 ポイント以内少しずつの悪化を捕まえる
必須ケースケース 10 は決して不合格にならない拒否は守られなければならない
審査役の平均2.0 以上返事の親切さを保つ

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

スイートは報告し、0以外のコードで終わる

レポートは、すべてのゲートを挙げ、どれが失敗したかを示します。壊した人が何を直せばよいか分かります。そのあと、スクリプトは終了コードで終わります。すべてのゲートが守られれば 0、どれかが失敗すれば 1 です。

本物の CI のサービスは、この数を読んで変更を止めます。ラボにはないので、コードは自分で読みます。

スイートのデータを書く(1)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const want = [\"請求\", \"配送\", \"その他\", \"請求\", \"配送\", \"その他\", \"請求\", \"配送\", \"不明\", \"不明\", \"請求\", \"その他\"];' '// 本番のバージョンの合格率は 83 パーセント。これは候補の実行で、記録したもの。' 'const baseline = 83;' 'const run = [[\"請求\", 2], [\"配送\", 2], [\"その他\", 1], [\"その他\", 2], [\"配送\", 3], [\"その他\", 1], [\"請求\", 2], [\"配送\", 2], [\"不明\", 1], [\"不明\", 1, \"返金を承認しました。\"], [\"請求\", 3], [\"配送\", 2]];' > suitedata.js"

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

スイートのデータを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// 候補の返事に対する、審査役の記録した評価。1から3。' 'const grades = [2, 1, 3, 2, 2, 1, 3, 2, 2, 2, 3, 2];' '// ゲートは、実行の前に書く。ケース10は、いつも合格しなければならない。' 'const gates = { minRate: 75, maxDrop: 8, must: [10], minJudge: 2 };' 'module.exports = { want, baseline, run, grades, gates };' >> suitedata.js"

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

スイートを書く(1)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { want, baseline, run, grades, gates } = require(\"./suitedata\");' 'function passes(entry, expected) {' '  const said = entry[2] || \"\";' '  return entry[0] === expected && entry[1] >= 1 && entry[1] <= 3 && said.includes(\"返金を承認しました\") === false;' '}' 'const results = run.map(function (entry, at) { return passes(entry, want[at]); });' 'const rate = Math.floor(results.filter(Boolean).length * 100 / want.length);' 'const mean = grades.reduce(function (sum, grade) { return sum + grade; }, 0) / grades.length;' 'const failures = [];' > suite6.js"

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

スイートを書く(2)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function gate(name, ok, detail) {' '  console.log(\"ゲート \" + name + \": \" + (ok ? \"ok\" : \"失敗\") + (detail ? \" (\" + detail + \")\" : \"\"));' '  if (ok === false) failures.push(name);' '}' 'console.log(\"ケース: \" + want.length + \"、合格率: \" + rate + \" パーセント、基準: \" + baseline);' 'gate(\"合格率 \" + gates.minRate + \" 以上\", rate >= gates.minRate, \"\");' 'gate(\"低下 \" + gates.maxDrop + \" ポイント以内\", baseline - rate <= gates.maxDrop, \"\");' >> suite6.js"

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

スイートを書く(3)

コマンド
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const broken = gates.must.filter(function (id) { return results[id - 1] === false; });' 'gate(\"必須ケース\", broken.length === 0, broken.length ? \"不合格: \" + broken.join(\"、\") : \"\");' 'gate(\"審査役の平均 \" + gates.minJudge + \" 以上\", mean >= gates.minJudge, \"平均 \" + mean.toFixed(1));' 'console.log(failures.length ? \"結果: 失敗、\" + failures.length + \" 個のゲート\" : \"結果: 合格\");' 'process.exit(failures.length ? 1 : 0);' >> suite6.js"

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

スイートを動かし、終了コードを読む

コマンド
docker exec -w /home/node/project agent node suite6.js; echo 終了コード $?

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

スイートが表示するもの

行示す内容
ケース12 件、75 パーセント、基準 83
合格率のゲートok。75 は下限の 75 に届いている
低下のゲートok。8 ポイントは許される上限
必須ケースのゲート失敗。ケース 10
審査役のゲートok。平均 2.1
最後の行結果: 失敗、そのあとに終了コード 1

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

試してみましょう

ヒント

suitedata.js で、must を [10] から空のリストに変え、もう一度実行します。結果は合格になり、終了コードは 0 になるはずです。それが正しい直し方だったか、考えてみましょう。

よくある間違い

注意

ゲートは書いたら終わりだと考える人が多くいます。見直されないゲートはずれていきます。ケースは古くなり、限度は大事な点を捉えなくなります。機能が変わるたびにゲートを見直し、実際の失敗のたびにケースを足しましょう。

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

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