1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIに作らせたフォームUI、途中で止めてから再開できるか

1
Posted at

フォームのエラー表示をAIに直してもらうと、正常系の画面は案外すぐ整う。一方で、送信に失敗した直後の表示や再送信ボタンは、差分を見ないと抜け落ちたことに気づきにくい。そこで完成を待たず、途中で一度止めて画面の状態と変更ファイルを確かめたい。

最近のコーディングエージェントには、実行中の追加入力や割り込みを扱うものもある。ただし、止め方はクライアントや実行モード次第。「中断したから作業前の状態に戻った」とは考えないほうがいい。ここではReact/TypeScriptのフォーム変更を例に、停止、差分点検、再開を一つの作業手順にする。以下は説明用の例で、特定のリポジトリやエージェントで検証済みの結果ではない。

まず、AIに渡す仕事を小さくする

たとえばお問い合わせフォームの送信失敗時に、エラーメッセージが狭い画面でも読めて、入力内容を残したまま再送信できるようにする。対象のパスや検査コマンドは、実際のリポジトリを確認してから埋める。

対象: お問い合わせフォームと対応するテスト(実際のパスを記入)
確認する状態: 初期表示、入力エラー、送信失敗後の再送信
画面: 狭い幅でもエラー文が読めること。キーボードだけで再送信できること
変更しない: 認証API、デプロイ設定、新規依存
事前承認: 外部通信、依存追加、ロックファイル変更
渡さない: 本番トークン、実顧客データ
停止条件: 対象外ファイルの変更、想定外の通信・依存追加、状態の取りこぼし
完了条件: 差分レビュー、既存の型・テスト、手動の画面確認

このカードはプロンプトとして使える。ただし「変更しない」と書くだけではアクセス制御にはならない。実行環境で制限できる操作は別途制限し、承認が必要な操作は止めて人が判断する。最初から画面全体の作り直しを頼むより、直す状態を限定したほうが停止時の差分も読みやすい。

想定外の変更が見えたら、先に差分を見る

エラー文を直している途中で新しいパッケージが入った、あるいは失敗状態の表示が消えた。そういう時は、利用中のツールで追加入力を送るか、進行中の操作を止める。割り込みがどこまで効くかは製品・モードごとに確かめる必要がある。すでに完了した書き込みやコマンドの結果は、そのまま残りうる。

停止後は、まず作業ツリーを確認する。コミット済みの変更も含めて比較できるよう、作業ツリーを隔離し、開始コミットを控えておくと追いやすい。以下は同じシェルで作業を続ける例。別のシェルで点検するなら、控えたコミットIDをBASEに設定し直す。

# 作業開始前。変更が残っているなら、先に所有者と扱いを決める
git status --short
BASE=$(git rev-parse HEAD)
printf '%s\n' "$BASE"   # このIDを控える

# エージェントを止めた後。同じシェルで点検する
git status --short
git diff --check "$BASE"    # 空白などの差分エラーを確認
git diff --stat "$BASE"     # 変更範囲をつかむ
git diff "$BASE"            # 追跡対象の差分本文を読む

git diffに未追跡ファイルの中身は出ない。git status --shortで??が見えたら、そのファイルも別に開いて確認する。停止前に作られたファイルを、確認せず一括で削除・採用しない。git diff --checkも型検査や画面確認の代わりにはならない。

再開メモは「次の一手」が読めればいい

長い会話ログをそのまま再投入するより、停止時点の判断を短く残すほうが迷いにくい。既存の設計メモがある場合も、今回の仕様やレビュー結果と食い違えば、人が決め直す。

開始: BASE(コミットID)
現在: フォームのエラー表示を変更。未追跡ファイルの有無は別途確認
判断: 送信失敗後も入力値を保持し、再送信を許す
保留: 狭い幅での表示、キーボード操作、既存テストは未確認
次の操作: 失敗状態の画面だけを確認し、必要ならそこだけ直す

ここでいう「生成UI」が、AIにReactの画面コードを書かせる意味なのか、実行時にAIがコンポーネントを選んで描画する意味なのかも分けておきたい。後者なら、モデルに任せるコンポーネントの範囲とレンダリングの境界が追加の設計対象になる。使えるSDKや実装パターンを調べる際は、Generative UIのライブラリ・SDKと実装例のようなリソース集も入口になる。ただし、そのページはエージェントの停止やロールバックを保証するものではない。自分の画面で使う部品と権限は、リポジトリ側で決める。

完了判定はコード、画面、記録を混ぜない

再開後に「テストが通った」で終わらせると、エラー文の折り返しやフォーカス移動が残る。実際のpackage.jsonのscriptsを先に見て、存在する型チェック・テスト・lintを選ぶ。存在しないnpm run typecheckを記事の手順として固定しない。

# Node.jsプロジェクトのルートで、使える検査名を確認する例
node -p 'JSON.stringify(require("./package.json").scripts, null, 2)'
# 表示されたscriptsから該当する検査だけを実行し、結果を記録する

画面側では、初期表示、入力エラー、送信失敗、再送信の順に確認する。狭い幅でエラー文が欠けないか。Tabで操作できるか。再送信中の二重送信を防げているか。APIを叩くテストなら本番ではなくテスト用の失敗応答で再現する。見ていない状態には「未確認」と書く。

利用量のダッシュボードも品質判定とは分ける。GitHubは2026年10月、一部のCopilot SDK移行後のIDEでagent activityが正しく帰属されない問題を案内している。これはその計測経路の話であって、すべてのエージェントの利用量が欠けるという話ではない。PRの記録には使ったIDE・版と実行モードを添え、画面の合否は別に残す。

僕ならレビューの最後に、変更ファイルの一覧、止めた理由、まだ見ていない画面、再開時の次の操作を一度だけ読み返す。止めても続きを他の人に説明できるなら、そのPRはだいぶ扱いやすい。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?