<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Loop Engineering on KnightLiブログ</title>
        <link>https://knightli.com/ja/tags/loop-engineering/</link>
        <description>Recent content in Loop Engineering on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Tue, 16 Jun 2026 22:17:02 +0800</lastBuildDate><atom:link href="https://knightli.com/ja/tags/loop-engineering/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>AI のコード生成はなぜまだ不安定なのか？Loop Engineering が次の解法になるかもしれない</title>
        <link>https://knightli.com/ja/2026/06/16/loop-engineering-ai-coding-kubernetes-control-loop/</link>
        <pubDate>Tue, 16 Jun 2026 22:17:02 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/06/16/loop-engineering-ai-coding-kubernetes-control-loop/</guid>
        <description>&lt;p&gt;OpenClaw の作者をきっかけに広がった「Loop Engineering」の議論は、表面的には AI Coding の新しいやり方を語っているように見えます。しかし実際には、Kubernetes コミュニティが十数年前にすでに歩いた道を再発見しているようにも見えます。継続的なフィードバック制御ループによって、システムを期待状態へ近づけ続ける、という考え方です。&lt;/p&gt;
&lt;p&gt;この 2 年間の AI コーディングツールの流れを並べると、移行の道筋はかなりはっきりしています。Prompt Engineering から Context Engineering へ、そして Loop Engineering へ。最初は、より良い prompt をどう書くかが注目されました。その後、Agent の性能を本当に左右するのは文脈、ツール、記憶、環境だと分かってきました。そしてさらに先では、問題はこう変わります。文脈が十分でも、Agent はまだ不安定です。ではどうするのか。&lt;/p&gt;
&lt;p&gt;答えは、モデルに一度で「正しく考えさせる」ことではありません。観察、行動、検証、修正のループに入れ、少しずつ収束させることです。&lt;/p&gt;
&lt;p&gt;これはまさに Kubernetes の基本的な世界観です。&lt;/p&gt;
&lt;h2 id=&#34;1-回の呼び出しから継続的なループへ&#34;&gt;1 回の呼び出しから継続的なループへ
&lt;/h2&gt;&lt;p&gt;現実のソフトウェア開発は、単発の推論ではありません。たいてい次のように進みます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;コードを読む。&lt;/li&gt;
&lt;li&gt;目標を理解する。&lt;/li&gt;
&lt;li&gt;実装を変更する。&lt;/li&gt;
&lt;li&gt;コンパイルまたはテストを実行する。&lt;/li&gt;
&lt;li&gt;ズレを見つける。&lt;/li&gt;
&lt;li&gt;さらに修正する。&lt;/li&gt;
&lt;li&gt;Review する。&lt;/li&gt;
&lt;li&gt;もう一度直す。&lt;/li&gt;
&lt;li&gt;許容できる状態に達するまで続ける。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これは「prompt -&amp;gt; answer」ではありません。「goal -&amp;gt; loop -&amp;gt; evaluation -&amp;gt; feedback」です。Loop Engineering の価値はここにあります。AI Coding を自動コード生成としてではなく、目標へ自動的に近づくプロセスとして捉えるのです。&lt;/p&gt;
&lt;p&gt;初期の実践の中には、すでにこの方向にかなり近いものがあります。たとえば、ループで Claude Code を繰り返し起動し、リポジトリ、計画ファイル、Git の状態から現状を読み直させ、小さなタスクを進める方法です。ここで重要な経験則があります。Agent は忘れますが、リポジトリは忘れません。会話履歴は信頼できず、ディスクに残った状態こそが次のループで依存できる事実です。&lt;/p&gt;
&lt;h2 id=&#34;kubernetes-はすでにこのパターンを証明している&#34;&gt;Kubernetes はすでにこのパターンを証明している
&lt;/h2&gt;&lt;p&gt;多くの人は Kubernetes をコンテナオーケストレーション基盤として理解しています。しかしより深い貢献は、制御理論をソフトウェア工学へ持ち込んだことです。&lt;/p&gt;
&lt;p&gt;Kubernetes controller が行うことは、次の 4 ステップにまとめられます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Desired State
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Observe
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Compare
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Act
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Repeat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;これは Reconciliation Loop です。Controller は実際の状態が期待状態と一致しているかを繰り返し確認します。一致していなければ調整を続けます。&lt;/p&gt;
&lt;p&gt;たとえば、次のように宣言します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;replicas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ここで Kubernetes に「1 個目の Pod を起動し、次に 2 個目、次に 3 個目」と命令しているわけではありません。宣言しているのは期待状態だけです。現在いくつのレプリカがあるのか、どの Pod が死んだのか、補充が必要かどうかは、controller がループの中で処理します。&lt;/p&gt;
&lt;p&gt;AI Coding も似た構造を形成しつつあります。Agent に対して、どのファイルを開き、どの関数を変更し、どのテストを追加するかを逐一命令するのではありません。代わりに目標を宣言します。この並行処理の問題を修正し、テストが通ることを確認せよ。Agent はリポジトリを観察し、コードを変更し、検証を実行し、フィードバックを読み、次のラウンドへ進みます。&lt;/p&gt;
&lt;p&gt;Prompt は Spec になりつつあります。&lt;/p&gt;
&lt;h2 id=&#34;loop-engineering-の構成要素&#34;&gt;Loop Engineering の構成要素
&lt;/h2&gt;&lt;p&gt;使える Loop Engineering システムには、通常いくつかの種類の要素が含まれます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自動トリガー: timer、cron、webhook、GitHub Actions によって、人間のボタン操作に依存しないループを作る。&lt;/li&gt;
&lt;li&gt;分離されたワークスペース: Git worktree などを使い、複数の Agent が互いに干渉せず並行作業できるようにする。&lt;/li&gt;
&lt;li&gt;プロジェクト知識: &lt;code&gt;SKILL.md&lt;/code&gt;、&lt;code&gt;AGENTS.md&lt;/code&gt;、仕様書、タスクファイルによって、経験を再利用可能な文脈として固定する。&lt;/li&gt;
&lt;li&gt;ツール接続: MCP、プラグイン、CI/CD、Issue システム、データベースを通じて、Agent が実環境を観察できるようにする。&lt;/li&gt;
&lt;li&gt;サブ Agent: maker、checker、reviewer を分け、モデルが自分で自分を採点する状況を避ける。&lt;/li&gt;
&lt;li&gt;外部状態: Markdown、Issue、Git commit、タスクボードで進捗を記録し、ループを停止、再起動、継続できるようにする。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらを合わせると、AI 時代の control plane のように見えます。モデルは実行器にすぎません。システムの能力を本当に決めるのは、ループの組み立て方、状態の保存方法、フィードバックが次のラウンドへ入る方法です。&lt;/p&gt;
&lt;h2 id=&#34;類似点よりも差異のほうが重要&#34;&gt;類似点よりも差異のほうが重要
&lt;/h2&gt;&lt;p&gt;Loop Engineering と Kubernetes controller は構造的に似ていますが、同じものではありません。最も重要な違いは、Kubernetes が相対的に決定的なシステムを制御するのに対し、LLM のループは確率的なシステムを制御することです。&lt;/p&gt;
&lt;p&gt;Kubernetes が Pod を作成するとき、その結果は通常、予測可能で、観測可能で、再試行可能です。一方、LLM に同じ「決済システムの並行処理問題を修正して」という指示を与えても、今日と明日で違う修正をするかもしれません。Claude と GPT がまったく別の解を出すこともあります。&lt;/p&gt;
&lt;p&gt;そこからいくつかの難題が生まれます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;実行器が不確定: 同じ入力が同じ出力を保証しない。&lt;/li&gt;
&lt;li&gt;収束を証明できない: ループが何度も変更を繰り返したり、その場で回り続けたり、すでに直したものを壊したりする可能性がある。&lt;/li&gt;
&lt;li&gt;完了判定が信頼できない: モデルが「完了」と言っても、本当に完了したとは限らない。&lt;/li&gt;
&lt;li&gt;目標が曖昧: 「決済システムを最適化する」とは、性能、安定性、セキュリティ、保守性のどれを指すのか。&lt;/li&gt;
&lt;li&gt;検証コストが高い: テストが通っても、性能劣化、セキュリティホール、アーキテクチャ上の負債がないとは限らない。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そのため AI Coding は Kubernetes Operator より難しいのです。reconcile だけでなく、より強い goal definition と evaluation system が必要です。&lt;/p&gt;
&lt;h2 id=&#34;maker-checker-は-admission-controller-に似ている&#34;&gt;Maker-Checker は Admission Controller に似ている
&lt;/h2&gt;&lt;p&gt;なぜ最近の Agent システムは maker と checker を分けるのでしょうか。理由は単純です。実行器を完全には信用できないからです。&lt;/p&gt;
&lt;p&gt;コードを書く Agent は自己確認してしまうことがあります。「修正済み」と言ってもテストを十分に走らせていないかもしれません。「より簡潔な方案」と言いながら、新しいリスクを入れているかもしれません。だから別の独立した役割が必要になります。テストを実行し、diff を確認し、セキュリティスキャンを行い、ログを読み、本当に目標を満たしているかを判断する役割です。&lt;/p&gt;
&lt;p&gt;これは Kubernetes の Admission Controller や Validating Webhook に近い工学的直感です。実行アクションをそのままシステムへ入れず、まずポリシー、検証、制約を通すべきだという考え方です。&lt;/p&gt;
&lt;p&gt;将来の Agent システムは、おそらくより多層化します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Maker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Checker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Reviewer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Policy Engine
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Human
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;これはワークフローを無意味に複雑にしているのではありません。確率的な実行器の外側に制御システムを補っているのです。&lt;/p&gt;
&lt;h2 id=&#34;本当の上限は-goal-と-evaluation-にある&#34;&gt;本当の上限は Goal と Evaluation にある
&lt;/h2&gt;&lt;p&gt;Loop Engineering の核心は、単にループを設計することではありません。より深く見ると、本当に解こうとしているのは Goal と Evaluation です。&lt;/p&gt;
&lt;p&gt;Kubernetes が安定して動くのは、Desired State が形式化されているからです。&lt;code&gt;replicas: 3&lt;/code&gt; の完了条件は非常に明確です。実際のレプリカ数が 3 であること。そこには美的判断も「だいたい完了」もありません。&lt;/p&gt;
&lt;p&gt;AI Coding の最大の問題は、まさにここにあります。多くの目標は曖昧です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「このシステムを最適化して。」&lt;/li&gt;
&lt;li&gt;「ユーザーモジュールをリファクタリングして。」&lt;/li&gt;
&lt;li&gt;「本番の安定性問題を修正して。」&lt;/li&gt;
&lt;li&gt;「このコードを保守しやすくして。」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの目標を、観測可能で、検証可能で、停止可能な条件に分解しなければ、ループは収束しにくくなります。Agent はいつ続けるべきか、いつ止めるべきかを判断できません。&lt;/p&gt;
&lt;p&gt;より合理的な書き方は、次のようなものに近づくはずです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;goal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;決済システムの並行処理問題を修正する&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metrics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;correctness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;unit_test_pass_rate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;100%&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;integration_test_pass_rate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;100%&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;performance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;latency_p99&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt; 100ms&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;throughput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;gt;= 1000 tps&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;safety&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;critical_vulnerability&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;data_race&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;evaluation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;layers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;unit_test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;integration_test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;e2e_test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;benchmark&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;static_analysis&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;security_scan&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;judge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;independent-checker&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;all_layers_pass&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;loop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;max_iterations&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strategy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;exponential_backoff&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;ここまで来ると、書いているものは prompt ではなく、Agent CRD に近くなります。本当に重要なフィールドも、Claude を選ぶか GPT を選ぶかではなく、&lt;code&gt;goal.metrics&lt;/code&gt; と &lt;code&gt;evaluation.layers&lt;/code&gt; です。&lt;/p&gt;
&lt;h2 id=&#34;ソフトウェアエンジニアは制御システムエンジニアに近づく&#34;&gt;ソフトウェアエンジニアは制御システムエンジニアに近づく
&lt;/h2&gt;&lt;p&gt;この変化は、必ずしも AI がエンジニアを直接置き換えるという意味ではありません。より起こりやすいのは、エンジニアの仕事の重心が移ることです。&lt;/p&gt;
&lt;p&gt;過去、エンジニアの主な仕事はコードを書くことでした。未来には、目標、検証、状態、フィードバックを設計する時間が増えるでしょう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;曖昧なビジネス意図を収束可能な目標へ翻訳する。&lt;/li&gt;
&lt;li&gt;多層の Evaluation Pipeline を設計する。&lt;/li&gt;
&lt;li&gt;Agent の記憶を会話からリポジトリ、タスクボード、永続化された状態へ移す。&lt;/li&gt;
&lt;li&gt;maker、checker、reviewer の境界を設計する。&lt;/li&gt;
&lt;li&gt;停止条件と失敗時の再試行戦略を定義する。&lt;/li&gt;
&lt;li&gt;何を人間が最終確認すべきかを判断する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prompt Engineer は次第に退場するかもしれません。prompt が無用になるからではなく、promptを書くこと自体がシステム化されるからです。より希少になる能力は、Goal Engineering と Evaluation Engineering でしょう。&lt;/p&gt;
&lt;h2 id=&#34;結論&#34;&gt;結論
&lt;/h2&gt;&lt;p&gt;Loop Engineering は、何もないところから突然現れた新概念ではありません。制御理論、状態機械、フィードバックシステム、Kubernetes controller、Operator Pattern が、AI Coding の時代に復活したものに近いです。&lt;/p&gt;
&lt;p&gt;この変化は 4 つの層に分けて理解できます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;構造の類似: Loop は Operator に似ている。&lt;/li&gt;
&lt;li&gt;実装の類似: Agent は Controller に似ている。&lt;/li&gt;
&lt;li&gt;本質の類似: Goal は Spec に似ており、Evaluation は Status に似ている。&lt;/li&gt;
&lt;li&gt;最も重要な層: AI Coding はコードを書く自動化ではなく、目標へ近づく自動化である。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;目標へ自動的に近づくすべてのシステムは、最終的に制御理論へ戻ります。目標は明確か、状態は観測可能か、フィードバックは正確か。&lt;/p&gt;
&lt;p&gt;だから、これから 10 年の AI Native ソフトウェア工学で最も研究すべき問いは、「どのモデルがより強いか」ではないかもしれません。むしろ、ソフトウェアが自分自身を変更し始めたとき、それを制約し、検証し、修正し、最終的に信頼してよいかを決める制御ループを、私たちはどう設計すべきか、という問いです。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
