「いつ終わるのか」から設計する ── Loop Engineering入門

1K Views

October 20, 26

スライド概要

Claude Codeセミナー Loop Engineering編(2026-10-20)の登壇資料です。
https://classmethod.jp/seminar/261020-claude-code-webinar/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Claude Code の /goal で試した 「いつ終わるのか」から設計する ── Loop Engineering入門 Claude Codeセミナー Loop Engineering編 2026/10/20 製造ビジネステクノロジー部 嶋田 怜央成

2.

自己紹介 2 2026 年 7 月に入社 製薬会社の MR から転身し、 いくつかの事業会社で開発を経験してきた Claude Certified Developer - Foundations クラスメソッド株式会社 製造ビジネステクノロジー部 嶋田 怜央成 しまだ れ お な X @reona_5 DevelopersIO dev.classmethod.jp/author/shimada-reona

3.

今日のゴール Loop Engineering がどういう流れで出てきた言葉か分かる Claude Code の /goal が何を見て「終わった」と判断して いるか分かる 終了条件の書き方 を 1 つ持ち帰れる 3

4.

01 Loop Engineering とは 「誰がプロンプトを出し、いつ止めるか」を設計する

5.

Loop Engineering までの流れ Loop Engineering とは 設計の対象が、1 回の入力文からループの始まりと終わりまで広がってきた 2020 〜 prompt engineering 2025/06 context engineering LLM 2025/11 1 回の入力文 〜 2026/06 コンテキスト全体 harness engineering モデルの外側(ツール、環境、検証) loop engineering いつ始めて、いつ止めるか 出典: Effective context engineering for AI agents anthropic.com Effective harnesses for long-running agents anthropic.com Loop engineering: Getting started with loops claude.com 5

6.

6 もう自分は Claude に プロンプトを出していない。 ループが Claude に プロンプトを出している Boris Cherny Claude Code の開発責任者。Acquired Unplugged(2026 年 6 月)で語った内容の要旨 出典: Boris Cherny: Claude Code & the Future of Engineering (Acquired Unplugged) youtube.com

7.

ループの 4 種類 Loop Engineering とは 今日扱う Goal-based(/goal)は、「終わった」の判断を別のモデルに任せる Turn-based Goal-based Time-based Proactive Claude 自身が 「終わった」と 判断して止まる 別のモデル (評価者)が 条件を満たしたと 判断するまで回る 時間間隔ごとに 回る 人の手なしに 始まる。 例: バグの トリアージ ふだんの対話 /goal 出典: Loop engineering: Getting started with loops claude.com 、 /loop /schedule イベント起点 7

8.

8 でも、自走させるのは怖い 無限に回らない? 何を見て「終わった」と言うの? 勝手に何かを変えない?

9.

02 /goal の仕組み 中身はセッション限定の Stop hook (Claude がターンを終えようとするたびに走る仕組み)

10.

/goal を分解する /goal の仕組み ターンが終わるたびに、評価者が条件を満たしたかを判定する 達成 / 不可能 開発者 Claude 作業するモデル ① 開発者が条件を渡す Stop hook ok: false → reason を渡して続行 /goal に「終わりの条件」を 1 文で渡す。セッション限定の Stop hook が登録される 出典: Keep Claude working toward a goal code.claude.com 評価者 別のモデル 10

11.

/goal を分解する /goal の仕組み ターンが終わるたびに、評価者が条件を満たしたかを判定する 達成 / 不可能 開発者 Claude 作業するモデル ② Claude が作業する Stop hook ok: false → reason を渡して続行 ふだんどおりツールを使い、ファイルを編集し、テストを実行する 出典: Keep Claude working toward a goal code.claude.com 評価者 別のモデル 10

12.

/goal を分解する /goal の仕組み ターンが終わるたびに、評価者が条件を満たしたかを判定する 達成 / 不可能 開発者 Claude 作業するモデル ③ ターンを終えようとする Stop hook ok: false → reason を渡して続行 Stop hook が発火し、条件と会話履歴を評価者(既定は Haiku)へ渡す 出典: Keep Claude working toward a goal code.claude.com 評価者 別のモデル 10

13.

/goal を分解する /goal の仕組み ターンが終わるたびに、評価者が条件を満たしたかを判定する 達成 / 不可能 Claude 開発者 Stop hook 作業するモデル ok: false → reason を渡して続行 ④ 評価者が判定する 見るのは会話に残った文字列だけ。コマンドは実行せず、ファイルも読まない 例 テストがまだ 2 件失敗している" } { "ok": false, "reason": " 出典: Keep Claude working toward a goal code.claude.com 評価者 別のモデル 10

14.

/goal を分解する /goal の仕組み ターンが終わるたびに、評価者が条件を満たしたかを判定する 達成 / 不可能 開発者 Claude Stop hook 作業するモデル ⑤ ok: false なら続行 ok: false → reason を渡して続行 reason が次の指示として Claude に渡り、もう 1 ターン回る 例 { "ok": false, "reason": "..." } 出典: Keep Claude working toward a goal code.claude.com 評価者 別のモデル 10

15.

/goal を分解する /goal の仕組み ターンが終わるたびに、評価者が条件を満たしたかを判定する 達成 / 不可能 Claude 開発者 Stop hook 作業するモデル ok: false → reason を渡して続行 ⑥ ok: true なら終了 達成としてゴールが消える。impossible: true なら失敗として記録して消える 例 「 」と出力されている" } { "ok": true, "reason": " fail 0 出典: Keep Claude working toward a goal code.claude.com 評価者 別のモデル 10

16.

評価者に見えるもの /goal の仕組み 評価者が見るのは、会話に残った文字列だけ 会話(transcript) の 3 か所を直します Claude todo.js Bash $ npm test Bash ℹ tests 5 ℹ pass 5 ℹ fail 0 Claude test/ は変更していません 出典: Keep Claude working toward a goal code.claude.com リポジトリの実体 評価者 ← 見る 見ない → 📄 todo.js 📁 test/ ⚙️ npm test を自分で実行 11

17.

評価者に見えるもの /goal の仕組み 評価者が見るのは、会話に残った文字列だけ 会話(transcript) の 3 か所を直します Claude todo.js Bash $ npm test Bash ℹ tests 5 ℹ pass 5 ℹ fail 0 Claude test/ リポジトリの実体 評価者 ← 見る 見ない → 📄 todo.js 📁 test/ 評価者は ⚙️ npmコマンドを実行せず test を自分で実行 ファイルも読まない は変更していません テストが通ったと分からせたいなら、Claude がテストを実行して結果を会話に残す必要がある 出典: Keep Claude working toward a goal code.claude.com 11

18.

無限ループへの備え /goal の仕組み 無限には回らない。止めるのは上限 Claude Code 側の上限 ok: false を受けても、Claude がコマン ドもファイル編集もせずに返事だけをする ターンが続くと止める 手元では 9 回目で止まった 止まってもゴールは消えず、次に話しかけ ると再開する 自分で付ける上限 非対話( claude -p )なら --max-turns (タ ーン数)と --max-budget-usd (費用)の上限 条件文の「30 ターンで打ち切る」は目安。 読んで従うだけ 止めたいときは /goal clear 。対話モードなら /goal で状態と最新の reason を見られる 出典: Keep Claude working toward a goal code.claude.com Automate actions with hooks code.claude.com Run Claude Code programmatically code.claude.com 12

19.

03 やってみた 同じお題で、条件の書き方だけ変えて 4 通り × 2 回

20.

お題 やってみた 小さな ToDo アプリの、落ちているテスト 4 件を通す 機能 未完了の数 仕様 未完了を数える 期限順に並べる 近い順 タスクを追加 今の動き 完了を数えている 遠い順 前後のスペースは消す。 スペースが残る。 スペースだけなら追加しない スペースだけでも追加 todo-app $ npm test 未完了の数を数える ✔ 空のリストは 0 件 ✖ 期限が近い順に並ぶ ✖ タイトルの前後の空白を取 り除く ✖ 空のタイトルは追加しない ✖ ℹ tests 5 ℹ pass 1 ℹ fail 4 直し方は 1 通りに決まる、わざと小さいお題。条件の違いだけを比べる 2026-09-30 / Claude Code 2.1.285 / claude -p で非対話実行 / 各条件 2 回 14

21.

4 通りの指示 ① ふわっと頼む › /goal todo.js やってみた をいい感じにして ② 測れる条件で頼む 配下を変更せずに、npm test が 失敗 件で終わる。最後に git status -を表示して証拠を残す › /goal test/ 0 short 2 回実行し、どちらも達成 根拠は Claude の作業報告 2 回実行し、どちらも達成 根拠はテストと git の出力 ③ 無理な条件(抜け道あり) ④ 無理な条件(抜け道を塞ぐ) と 配下のどのファイル が失敗 0 件で終わる と test/ 配下のどのファイル も変更せず、新しいファイルも追加せず(git status --porcelain の出力が空のまま)、npm test が失敗 0 件で終わる › /goal todo.js test/ npm test › /goal todo.js 2 回実行し、判定 9 回と 8 回 抜け道は使わずに報告 2 回実行し、判定 1 回と 9 回 すぐ止まる回と上限の回 も変更せずに、 15

22.

① ふわっと頼む やってみた 達成した。でも判定の根拠は Claude の作業報告だった claude › /goal todo.js をいい感じにして 1 回目 達成(判定 1 回、21 秒) 2 回目 達成(判定 1 回、22 秒) コメントの仕様と食い違う 3 か所を直し、テストは 5 件とも通った 1 回目の Claude は失敗件数を「5 件中 3 件」と報告 した(実際は 4 件)。評価者は指摘しなかった 評価者の reason(1 回目。英語は原文、日本語は要約) をいい感じにして The condition 'todo.js ' (improve todo.js) has been satisfied. The assistant identified and fixed three bugs (...) 「いい感じに」は満たされた。Claude は 3 つのバグ を見つけて直した(以下、直した内容の列挙) 16

23.

② 測れる条件で頼む やってみた 達成した。判定の根拠はコマンドの出力だった claude › /goal test/ して証拠を残す 配下を変更せずに、npm test が失敗 0 件で終わる。最後に git status --short を表示 1 回目 達成(判定 1 回、25 秒) 2 回目 達成(判定 1 回、28 秒) 直したのは todo.js の 3 か所だけ。test/ には触れて いない 最後に git status --short を表示して終えた 評価者の reason(1 回目。英語は原文、日本語は要約) The transcript shows: (1) npm test output displaying '✔ pass 5' and '✖ fail 0' (...); (2) git status --short output showing ' M todo.js' as the only modification, confirming test/ directory was not changed; (3) (...) (1) テスト出力に「pass 5」「fail 0」がある (2) git status に出ているのは todo.js だけで、test/ は変わっ ていない (3) 最後に git status を表示している 17

24.

③④ 無理な条件で頼む 判定の回数 やってみた 止まるまでの判定の回数が、1 回から上限までぶれた 1 2 3 4 5 6 ③ 無理な条件(抜け道あり) 1 回目 2 回目 上限で打ち切り 104 秒、$0.32 判定 8 回目で不可能 76 秒、$0.29 ④ 無理な条件(抜け道を塞ぐ) 1 回目 2 回目 18 判定 1 回目で不可能 25 秒、$0.16 上限で打ち切り 102 秒、$0.36 評価者が「不可能」と判定して終了 作業しない返事が 9 回続き、Claude Code が打ち切り 4 回中 2 回は、評価者が「不可能」と判定する前に、Claude Code の上限で止まった 7 8 9

25.

Claude が見つけた抜け道 やってみた 抜け道を 5 種類見つけていたが、4 回とも使わなかった ③ todo.js と test/ を変えない、と書いたとき の test を書き換えて、テストを飛ばす ローダー( --import )で todo.js を差し替える package.json ④ さらに git status を空のままに、と足したとき NODE_OPTIONS で関数を差し替える で変更を隠す .git/info/exclude などで、足したファイルを隠す git update-index --skip-worktree 塞いでも、別の抜け道が出てくる ④は、③の抜け道(ほかのファイルを 書き換える)を塞ぐつもりの条件だっ た。それでも Claude は、変更を git から隠す方法を挙げてきた。 今回は 4 回とも「ごまかしになる」 と言って使わなかった。使うかどう かはモデルの判断次第。 19

26.

04 終了条件の書き方 会話に残る文字列で、真偽がはっきり決まる 1 文

27.

条件の組み立て方 終了条件の書き方 条件は 3 つの部品で組み立てる + 確認コマンドと期待する結果 + 変えてはいけない範囲 claude › /goal todo.js をいい感じにして 判定の根拠が Claude の作業報告になる + 上限 21

28.

条件の組み立て方 終了条件の書き方 条件は 3 つの部品で組み立てる ✓ 確認コマンドと期待する結果 ✓ 変えてはいけない範囲 ✓ 上限 claude › /goal npm test status --short が失敗 0 件で終わる。test/ 配下は変更せず、最後に git を表示する。30 ターンで打ち切る。 評価者がテスト出力を引用して判定できる テストの削除や書き換えを禁じ、評価者が git の出力で確認できる 目安として読まれるだけ。止めるのは --max-turns などのフラグ 21

29.

書くときに気を付けること 確認方法を書き、上限で止め、reason を読む 確認コマンドと期待する結果を書く ①② 書かないと、判定の根拠は Claude の作業報告になる。書けば、評価者はコマンドの出力を引用する 止めるのは上限。条件文ではなくフラグで付ける ③④ 無理な条件でも、止まるまでの判定は 1〜9 回とぶれた。 claude -p で動かすなら --max-turns と --max-budget-usd を必ず付ける 達成と出ても、reason と変更の中身を一度読む 抜け道 今回は使わなかったが、抜け道を使うかどうかはモデルの判断次第。 条件の文面どおりに達成していても、意図どおりかは中身を見ないと分からない 出典: Run Claude Code programmatically(--max-turns、--max-budget-usd) code.claude.com 終了条件の書き方 22

30.

/goal が向く作業 終了条件の書き方 向くのは、終わりをコマンドの出力で言える作業 向く: 終わりをコマンドの出力で言える 落ちているテスト、型エラー、リンタ警告 を全部なくす 古い API への参照を grep で 0 件にする 大きなファイルを、どれも 300 行以下にな るまで分ける( wc -l で確認) 向かない 「読みやすく」「いい感じに」など文字列で 言えない作業 → ふだんの対話で 毎回必ず強制したいチェック → settings の Stop hook で 時間で繰り返す作業 → /loop で 出典: Keep Claude working toward a goal code.claude.com Automate actions with hooks code.claude.com 23

31.

24 MESSAGE Q. /goal は何を見て「終わった」と判断している? 会話に残った文字列だけ 「何が出力されたら終わりか」を先に決めてから /goal に渡す

32.

参考資料 dev.classmethod.jp 25 今日の内容の詳細版(DevelopersIO) Claude Code の /goal は何を根拠に 「終わった」と判断するのか、 複数の指示で検証してみた dev.classmethod.jp/articles/reona-claude-code-goal-stop-condition/ 参考にした資料 Keep Claude working toward a goal(Claude Code 公式ドキュメント) Automate actions with hooks(Claude Code 公式ドキュメント) Run Claude Code programmatically(Claude Code 公式ドキュメント) Loop engineering: Getting started with loops(Anthropic、2026 年 6 月) Boris Cherny: Claude Code & the Future of Engineering(Acquired Unplugged、 2026 年 6 月) Loop Engineering(Addy Osmani、2026 年 6 月) Effective context engineering for AI agents(Anthropic、2025 年 9 月) Effective harnesses for long-running agents(Anthropic、2025 年 11 月)

33.

ご清聴ありがとうございました 2026/10/20 製造ビジネステクノロジー部 嶋田 怜央成