tech#github-copilot#loop-engineering#human-in-the-loop#coding-agent#development-workflow

Human-in-the-loop と Loop Engineering を組み合わせる Memolog の AI 開発

公開 👁
Human-in-the-loop と Loop Engineering を組み合わせる Memolog の AI 開発

Memolog の開発では、最初から詳細な仕様と完了条件を決めて、その通りに GitHub Copilot(以下、Copilot)へ実装させているわけではありません。

「こんな機能があるとよさそう」「この体験をもう少し良くしたい」と会話を始め、まず 80 点くらいの形を作ってもらいます。実際に触り、違えば直します。ただし、想像とは違っても、できたものの方が良ければ採用します。

これまで自分は、この反復全体を Loop Engineering と捉えていました。しかし、Addy Osmani による Loop Engineering の説明や、その内容を日本語で紹介した「入門から実践 -「ループエンジニアリング」」と照らすと、それでは人と AI が対話するループと、AI を自律的に動かす仕組みを混同していました。

この記事ではあらためて、Memolog の進め方を 外側の Human-in-the-loop と、内側の Loop Engineering という二重ループとして整理します。

目次

先に結論

Memolog の開発は、1 種類のループだけで進んでいるわけではありません。

Memolog では、次の流れを基本にしています。

人と AI が曖昧なアイデアを会話する

AI が 80 点くらいの形にする

実際に見たり触ったりする

人が採用、修正、見送りを判断する

採用したゴールまで AI が実装と検証を繰り返す

人が確認して公開し、観測を次の改善へ戻す

この進め方では、完成条件を最初からすべて固定しません。セキュリティ、データ保護、既存機能の維持など、外せない条件は先に決めます。一方で、UI、文章、操作感、見せ方は、試作品を見てから決める余地を残します。

この整理では、Human-in-the-loop と Loop Engineering は競合する方法ではありません。人が目的と責任を持ち、その内側で AI が検証可能な作業を自走するという関係です。

3 つの言葉を分けて考える

今回の見直しでは、Human-in-the-loop、Human-on-the-loop、Loop Engineering を次のように分けます。これらに一つの統一規格があるという意味ではなく、Memolog の実践を説明するための整理です。

言葉人の関わり方Memolog での例
Human-in-the-loop人がワークフローの途中に入り、入力、評価、承認を行う試作品を触り、採用、修正、見送りを決める
Human-on-the-loopAI の自律実行を人が監督し、必要なときに介入する自動チェックや CI の結果を監視し、例外時に止める
Loop Engineering人が逐次指示する代わりに、AI が目標へ向けて発見、実行、検証、再試行する仕組みを設計する実装後にテストを実行し、失敗原因を直して再テストする

Memolog の開発全体を Human-on-the-loop と呼ばないのは、人が例外時だけ介入する監督者ではないからです。試作品を見て考えを変え、好みを言葉にし、次に作るものを決めるところまで人がループへ参加します。一方、内側の実装ループが動いている間は、人が逐次指示せず結果を監督するため、Human-on-the-loop に近い場面もあります。

Microsoft Agent Framework の公式ドキュメントでも、エージェントが操作前に人の承認を求め、承認または拒否を受けて処理を続ける形を Human-in-the-loop と説明しています。

一方、Addy Osmani は Loop Engineering を、人がエージェントへ逐次プロンプトする役割から離れ、その代わりにエージェントを動かすシステムを設計することだと説明しています。目的を与えた後、AI が完了条件を満たすまで反復することが中心です。

この定義に従うと、人と Copilot の会話を繰り返すだけでは Loop Engineering とは言えません。Memolog では、会話による探索を Human-in-the-loop、その中で実装と検証を自走させる仕組みを Loop Engineering と捉えます。

Memolog の二重ループ

外側で人と AI が正解を発見し、内側で AI が実装、検証、修正を自律的に繰り返す二重ループ外側:Human-in-the-loop人と AI で、作るものと判断基準を発見する人が意図を伝えるAI が試作する人が判断する内側:Loop Engineering決めたゴールまで、仕組みが実装と検証を回す実装する自動検証する修正して再試行する人が確認して公開する外側で人と AI が正解を発見し、内側で AI が実装、検証、修正を自律的に繰り返す二重ループ外側:Human-in-the-loop
人と AI で、作るものと判断基準を発見する
人が意図を伝えるAI が試作する人が判断する内側:Loop Engineering
決めたゴールまで、仕組みが実装と検証を回す
実装する自動検証する修正して再試行する人が確認して公開する
Memolog では、人と AI が外側で正解を発見し、決めた正解へ近づく実装と検証を内側のループで回す

外側と内側では、ループを回す主体が違います。

ループ主体ゴール停止条件
外側の発見ループ人と AI欲しいものと判断基準を見つける人が採用、修正、見送りを決める
内側の実装ループAI と自動チェック採用したゴールを実装するテストなどの完了条件を満たす、または停止条件に達する

外側では、人の違和感や好みが重要です。内側では、ビルド、テスト、Lint、Playwright、API 応答など、機械が観測できる条件が重要です。

すべてを自動化することが目的ではありません。まだ正解が分からない仕事は人と探索し、正解を決めた後の反復可能な仕事を AI と仕組みに渡すことが目的です。

外側で正解を発見し、内側で正解へ近づく

外側の発見ループ

まだ欲しいものが明確ではない段階で回すループです。

会話 → 試作 → 体験 → 違和感や好みを言葉にする → 再試作

ここでは、最初の要望への一致率だけで評価しません。「思っていたものとは違うけれど、こちらの方が良い」という結果も成功です。成果物が人の考えを更新する材料になります。

これは Human-in-the-loop です。人は最後の承認だけでなく、成果物を材料に考え、次の方向を決める参加者です。

内側の実装・検証ループ

外側で方向を決めた後は、Copilot が実装と検証を進めます。

実装 → テスト → 失敗原因を読む → 修正 → 再テスト

この間、人がテスト失敗のたびに次の指示を書く必要はありません。AI が結果を読み、原因を特定し、修正して再実行します。全チェックの成功、試行回数の上限、同じ失敗の繰り返しなど、観測可能な停止条件も先に置きます。

ここが Memolog における Loop Engineering です。探索中のすべてを固定するのではなく、外側では柔らかく発見し、採用後は内側のループで必要な部分だけ固くすることを意識しています。

最初から 100 点を定義しない

自分は、実装前に詳細な完了条件を作るのが得意ではありません。また、できたものを見てから考えが変わることもよくあります。

そのため、最初は 80 点くらい合えばよいと考えています。

ただし、すべてを曖昧にするわけではありません。条件を次の 2 種類に分けます。

条件先に決めること
外せない条件セキュリティ、データ破壊の防止、既存機能、費用の上限、公開の承認
探索できる条件UI、文章、操作感、見せ方、細かな仕様

たとえば、モーダルを追加するときに「使いやすくて自然なモーダル」を最初から厳密に定義するのは難しいです。一方で、開閉できること、モバイルで崩れないこと、閉じた後に操作を続けられることは確認できます。

まず動くものを作り、実際に触って好みや違和感を返します。そこで採用した操作を Playwright のテストへ残せば、探索の自由と回帰防止を両立できます。

Memolog で回している 6 つのループ

実際の作業を振り返ると、Memolog では複数のループがつながっています。

ループ位置づけ目的Memolog での例
発見外側欲しいものを見つけるUI や記事の方向を会話と試作から決める
実装内側アイデアを動く形にするCopilot がコード、設定、記事を変更する
検証内側壊れていないか確かめるビルド、Playwright、API、構造化データを確認する
品質外側と内側採用したものをより良くする差分レビュー、モバイル確認、英語の独立レビューを行う
デリバリー内側から人の判断へ本番へ届けるGitHub Actions、Azure へのデプロイ、本番画面を確認する
運用次の外側へ公開後から学ぶApplication Insights、GitHub Issue、実際の利用から改善する

これらは必ず一方向に進むわけではありません。検証で問題が見つかれば実装へ戻り、本番を見て新しいアイデアが生まれれば発見へ戻ります。

以前の記事「Memolog を作る上で、自分と GitHub Copilot はどう役割分担したか」では、調査、設計、実装、テスト、本番確認、記録を Copilot と往復してきた経緯を紹介しました。今回の二重ループは、その役割分担のどこに人が入り、どこを AI が自走するかを捉え直したものです。

1on1 を本線にしている理由

1on1 と Loop Engineering は対立しません。外側の発見ループは 1on1 で進め、ゴールが決まった後の内側だけを Copilot に自走させることができます。また、Loop Engineering に複数の AI エージェントが必須というわけでもありません。重要なのはエージェントの人数ではなく、AI が完了条件まで反復できる仕組みです。

Memolog は 1 人で管理している比較的小規模なリポジトリです。普段の作業は、自分と 1 つの Copilot セッションによる 1on1 を中心にしています。

小規模なリポジトリでは、別々の作業でも同じページ、共通コンポーネント、ワークフローに変更が集まりやすくなります。複数のエージェントを並行して動かすと、文脈の引き継ぎや判断の衝突に加え、差分の比較、重複した変更の選別、マージ順の調整が必要です。Memolog では、この統合コストが並列化の効果を上回りやすいことも、1on1 を本線にしている理由です。

一方で、自分では品質を判断しにくい英訳には、独立したサブエージェントを使っています。

自分とメインの Copilot が日本語記事を作り、独立したサブエージェントが英訳をレビューし、メインの Copilot が指摘を反映した後、自分が公開を判断する流れ自分 + メインの Copilot
日本語の意図と記事全体を作る
独立したサブエージェント
英語の自然さと JA / EN の意味を確認する
メインの Copilot
指摘を日本語の意図と照合して反映する
自分
公開するか最終判断する
自分とメインの Copilot が日本語記事を作り、独立したサブエージェントが英訳をレビューし、メインの Copilot が指摘を反映した後、自分が公開を判断する流れ自分 + メインの Copilot
日本語の意図と記事全体を作る
独立したサブエージェント
英語の自然さと JA / EN の意味を確認する
メインの Copilot
指摘を日本語の意図と照合して反映する
自分
公開するか最終判断する
普段は 1on1 で進め、独立した視点が必要な英訳だけサブエージェントを加える

英語文書のレビューでは、「自分の文章らしさ」を残しながら、翻訳調の表現を減らすために、次の 6 点を意識するとよいというフィードバックも得ました。

これは単語を機械的に置き換えるルールではありません。主張や語り口を残したまま、英語の読者が意味を追いやすい構造へ書き直すための観点です。

この仕組みは「日本語を自然な英文へ翻訳する Memolog の取り組み」で詳しく紹介しています。

普段は自分と Copilot の 1on1 で進め、独立した視点が必要な場所だけサブエージェントを加えます。サブエージェントは最終決定者ではなく、自分とメインの Copilot だけでは得にくい判断材料を提供する役割です。

ブログ執筆にもループがある

Human-in-the-loop による探索は、コードだけが対象ではありません。この記事も、最初に全構成を決めてから書き始めたわけではありません。

この記事では、まずチャットで AI との開発の進め方を話し、質問と回答を繰り返しました。その過程で、次の考えが言葉になりました。

記事を書くときの流れも、外側と内側に分けられます。

位置づけループやること
外側発掘質問と回答で、経験、感情、主張を取り出す
外側構成見出しと順番を提案し、足す、削る、並べ替える
外側執筆下書きを読み、自分らしくない箇所や強調したい点を直す
内側事実確認日付、製品名、リンク、実際の実装と照合する
外側読者確認初見の読者に前提と結論が伝わるか見直す
内側から人の判断へ公開ビルド、JA / EN、表示、リンク、メタデータを確認する

自分の中に完成した答えがあり、AI がそれを書き写しているのではありません。対話と下書きを使って、自分が何を伝えたいのかも発見しています

観測可能なチェックポイントをどう置くか

チェックポイントの役割も、外側と内側で異なります。外側では、何が見えたら人が次の判断をできるかを考えます。内側では、AI が次の反復へ進む条件と、止まる条件は何かを決めます。

作業を始めるとき、次の 4 つを Copilot と一緒に考えます。

  1. 途中で何を見れば、方向を修正できるか
  2. 壊れたとき、何を見れば気づけるか
  3. 自動チェックで繰り返し確認できる部分はどこか
  4. 最後に自分が触って判断すべき部分はどこか

Memolog では、チェックポイントを次のように置くことが多いです。

タイミング観測するもの確認方法
試作後画面、文章、構成、操作感自分で見て触る
実装後ビルド、テスト、Lint、Playwright、API 応答自動チェックを実行し、Copilot が結果を読む
レビュー時差分、回帰、セキュリティ、英語の自然さ自分と Copilot で確認し、英訳は独立したサブエージェントがレビューする
デプロイ後GitHub Actions、本番 URL、代表的な操作Copilot が状態を確認し、自分も本番を触る
運用中テレメトリ、Issue、利用時の違和感自動収集した情報を Copilot と自分で読む

ここでいう自動チェックは、ビルド、テスト、Lint、Playwright、CI、テレメトリなど、人が毎回同じ手順を繰り返さなくても結果を返せる仕組みです。

独立したサブエージェントは、自動チェックとは別です。Memolog では主に、自分では自然さを判断しにくい英訳の編集とレビューを担当します。サブエージェントの指摘は判断材料であり、記事へ反映して公開するかは自分が決めます。

外側の観測結果は、合格と不合格だけではありません。

どれも次の行動を決められるため、有効なチェックポイントです。

ループを安全に続けるための境界

反復を速くしても、AI にすべての判断と権限を渡すわけではありません。Memolog では、次の境界を残しています。

Issue は、最初から仕様を完全に固定するためだけのものではありません。何を試したのか、どこで考えが変わったのか、何を確認して採用したのかを残す場所でもあります。

Loop Engineering の自律性は、無制限に動かすことではありません。どこで自動的に止まり、どこで Human-in-the-loop へ制御を返すかまで含めて設計することが重要です。

まとめ

Memolog の AI 開発は、Human-in-the-loop と Loop Engineering の二重ループで進みます。

自分が最初から正解を定義できなくても、Human-in-the-loop で成果物を見ながら正解を発見できます。正解を決めた後は、Loop Engineering によって AI が実装と検証を繰り返せます。

人がずっと手を動かすわけでも、AI にすべてを任せるわけでもありません。人が正解と責任を持ち、AI が決めた正解へ近づく反復を担う。それが、今の Memolog に合っている二重ループです。