Skip to content

Tutorial 3 Your First Agent Task ja

James Morris edited this page Jul 29, 2026 · 1 revision

チュートリアル3 · はじめてのエージェントタスク

ゴール: エージェントに指示して、CLIに新しいコマンドを最初から最後まで 追加すること。ここでは lockedin endorse を作ります。まったく面識のない相手を、 本人が持っていそうにないスキルで推薦(endorse)するコマンドです。実にこのCLIらしい。

ここがチュートリアルの中心です。実際のループ——仕様 → テスト → 実装 → ゲートが緑 → レビュー——を練習します。

← 前へ: チュートリアル2 コードのしくみ · 次へ: チュートリアル4 プロンプトとレビュー


ステップ0 — 「完成」の定義を決める

プロンプトを書く前に、まず自分の言葉で仕様を書きます。曖昧な依頼からは曖昧なコードしか 出てきません。相手が人間でも、エージェントでも同じです。

endorse は5〜7行を出力する。各行は、ランダムに選んだ人物(既存の NAMES プールを再利用)を、ランダムに選んだバズワードのスキル(新しいプール)で 推薦する内容とする。最後は風刺の効いた一言で締める。lockedin endorse として 実行でき、セッション内では /endorse として使え、help にも表示されること。 乱数はすべてシード付きの pick/shuffle ヘルパーを使い、出力が決定的であること。 npm test は緑のままで、不変条件を1つ以上固定する新しいテストを追加すること。

この段落こそが、エージェントに渡すものです。第2章で学んだ制約(シード付き乱数、 テストゲート、不変条件を書く習慣)が、きちんと明記されている点に注目してください。

ステップ1 — まずコードではなく、計画を出させる

最初は計画を聞くところから。ファイルが1つも変わらないうちに、まずい方針を 止められる貴重なタイミングです。

「LockedIn CLIに endorse コマンドを追加したいです。仕様はこちらです: [paste your spec]。コードを書く前に、どのファイルをどう変更するつもりか、 方針を教えてください。承認してから進めたいです。connect のような既存コマンドの パターンに従ってください。」

良い計画には、次の要素が入っているはずです。src/lockedin.js に新しい SKILLS プールと renderEndorse() を追加し、dispatch()handleSlash() に接続し、 renderHelp() に1行足し、追加したものを module.exports に載せ、両方のテスト ファイルにテストを書く。もしシード付き乱数のルールやテストが抜けていたら、 この時点で指摘してください。

ステップ2 — テストファースト

実装より先にテストを書かせます。テストファーストは、仕様を実行可能な形に変え、 エージェントに近道をさせないための仕掛けです。

「いいですね。まずは失敗するテストだけを追加してください。renderEndorse() が 既知のスキル名を含み、推薦が5件以上あるテキストを返すというユニットテストと、 lockedin endorse が終了コード0で推薦を出力するという cli.test.js のテストです。 シードは固定してください。renderEndorse の実装はまだしないでください。 まずテストが落ちるところを見たいです。」

実行して、正しい理由で(=関数がまだ存在しないから)落ちることを確認します。

npm test

ステップ3 — 実装させる

ここでようやく実装にGOを出します。

「では、そのテストが通るように実装してください。connect のパターンに従います。 バズワード系スキルを約25個入れた SKILLS プール、文字列を返す renderEndorse() を追加し、dispatchhandleSlash に接続し、help に1行足して、追加したものを エクスポートしてください。乱数は pick/shuffle のみを使ってください。」

エージェントの成果物は、ファイルの他の部分とよく似た見た目になるはずです。 たとえば SKILLS プールとレンダラーはこんな形です。

const SKILLS = [
  'ソートリーダーシップ', 'シナジー', 'ストーリーテリング', 'バイブス',
  '戦略的昼寝', 'ステークホルダー調整', '徹底的な率直さ', /* ...全部で約25個... */
];

function renderEndorse() {
  const people = shuffle(NAMES).slice(0, 5 + Math.floor(rand() * 3)); // 5〜7
  const skills = shuffle(SKILLS);
  const out = [''];
  people.forEach((n, i) =>
    out.push('  ✔ ' + n + ' を「' + skills[i % skills.length] + '」で推薦しました'));
  out.push('', '  確認できないスキルについて、見知らぬ6人を推薦しました。1時間以内に相手もあなたを推薦します。');
  return out.join('\n');
}

……これに加えて、dispatch()handleSlash() に1行ずつ、renderHelp() に1行、 そして module.exportsSKILLS, renderEndorse が追加されます。

ステップ4 — ゲート

npm test

緑になりましたか? おめでとうございます。エージェントと一緒に、テストファーストで 機能を1つ出荷しました。緑にならない? それは普通のことです。第4章の 立て直しループへ進み、何がどう失敗したのかを正確にエージェントへ伝えましょう。

そのあとは、実物を自分の目で見ます(テストは文字列を確認するだけなので、 見る工程は人間の仕事です)。

node bin/lockedin.js endorse
LOCKEDIN_SEED=1 node bin/lockedin.js endorse   # 再現可能

ステップ5 — 受け入れる前にレビューする

読んでいない差分を受け入れてはいけません。特に次の観点で目を通します。

  • 既存パターンに従っているか? 新しいコマンドは connect を写したような形に なっているはずです。依存の追加なし、src/ の中に console.log なし。
  • シード付き乱数だけを使っているか? 差分から Math.random を検索します。 1件も出てこないのが正解です。
  • 触るべきでない場所を触っていないか? 変更は追加が中心であるべきで、 無関係な行が動いていたら要注意です。
  • 新しいテストは意味があるか? 将来その機能を壊したときに、ちゃんと落ちる テストであるべきです。true を検証するだけのテストでは意味がありません。

気になる点があれば修正を依頼します(第4章)。問題なければ、これで完了です。


✅ エージェントと試してみよう

まずは上のループを、実際に最後まで回してみてください。そのうえで、 発展課題としてエージェントに拡張を頼んでみましょう。

  • endorse が名前を任意の引数として受け取れるようにしてください。 lockedin endorse Ada なら Ada を名指しで推薦します。テストも追加し、 ゲートは緑のまま維持してください。」

これで機能を1つ、通しで作り上げました。最後の章では、この一連の流れを なめらかに回すコツ——リードエンジニアとしてのプロンプトとレビュー——を扱います。

次へ: チュートリアル4 プロンプトとレビュー

📘 LockedIn CLI wiki

Tutorial

Reference


Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.

Clone this wiki locally