制作の裏側 2026.08.06

AI実装の再現度はゲートでなく収束ループで決まる

AI実装の再現度はゲートでなく収束ループで決まる

AIにFigmaのデザインを実装させるとき、規約チェックやチェックリストを何枚重ねても、再現度が低い実装は相変わらず出てくる――そんな経験はないだろうか。

うちのチームでも同じことが起きていた。照合フロー(スクショを撮ってFigma基準と見比べ、直してまた見比べる一連の手順)を通した実装は再現度が高い。だが、そのフローを使わない小さな修正では、再現度が落ちる。lintを足しても、規約チェックを足しても、チェックリストを足しても、この傾向は変わらなかった。

この記事で分かること

  • 「照合artifact(工程の記録ファイル)の有無」と「あとから見つかる指摘件数」の実測相関
  • 品質ゲートを増やしても再現度が上がらなかった理由
  • 重い照合フローを避けて小修正が”素書き”に逃げる構造そのものへの対処法

背景:ゲートを増やしても、低い再現度は消えなかった

AIにFigmaを実装させる仕組みには、もともと品質ゲート(lint・命名規約チェック・完了前チェックリスト)を何段も用意していた。狙いは「悪い実装を通さないこと」。

ところが、実際に低い再現度が出るのは、ゲートをすり抜けた実装ではなかった。むしろ、フルの照合フローを一度も回さないまま「完了」と報告された実装だった。フルの照合フローはスクショ取得・基準比較・修正・再比較を繰り返すぶん重く、1〜2行の小さな修正のたびに回すには気が重い。その重さのせいで、小修正はフローを迂回して直接コードを触る”素書き”に流れていた。

結論:差は腕でなく、工程だった

チームの実装記録(工程ごとに残る記録ファイル一式)を横断して調べたところ、はっきりした差が出た。

  • 照合ループを最後まで回し切ったページ:スクショ比較→修正→再比較を4周繰り返して、指摘0件まで収束。工程の記録ファイルも一式そろっていた
  • 照合ループを一度も回さなかったページ:照合の記録ファイルが1件も存在しないまま「完了」と報告 → あとから見つかった指摘が21件(再チェックで見つけた分が7件、私の目視で見つけた分が14件)

同じチーム・同じ仕組みで作業していて、この差が出た。再現度を分けたのは実装者の腕前ではなく、照合ループを回したかどうかという工程の違いだった

しくみ:ゲートは関所、収束ループは基準との往復

ここで整理しておきたいのは、ゲートと収束ループの役割の違いだ。

役割 何をするか 再現度を上げるか
品質ゲート(lint・規約チェック・チェックリスト) 「悪いものを止める」判定だけをする 上げない。通過/不通過を仕分けるだけ
収束ループ(スクショ→基準比較→修正→再比較) 基準(Figma)と実装を実際に見比べて近づける 上げる。往復した回数だけ差が縮まる

関所(ゲート)をどれだけ厳しくしても、そこを通る実装の中身は変わらない。中身を基準に近づけるのは、基準と何度も往復する工程そのものだ。一度も基準画像と比較しなければ、いくら判定を重ねても再現度には近づかない。

実測でも、この違いがそのまま結果に出ていた。

項目 回し切ったページ 回さなかったページ
照合の往復回数 4周 0周(記録なし)
収束時の指摘件数 0件 ―(未計測)
完了報告後に見つかった指摘 21件(自己発見7+指摘14)
照合の記録ファイル一式 すべてあり すべてなし

もう一つの発見:指摘の大半は、そもそも静止画照合では捕まらない種類だった

あとから見つかった指摘を1件ずつ症状で分類すると、意外な傾向が出た。大半は「Figmaと見比べれば分かる静的なズレ」ではなく、動きや実データが絡む種類だった。

  • 特定の画面幅の帯だけで要素がはみ出す(中間幅の崩れ)
  • スクロール追従の挙動が途中で止まる/潜り込む
  • 仮データを本番相当のデータに差し替えたときだけ出る文字数オーバー
  • 特定のブラウザだけで折り返しが変わる(クロスブラウザ差)

これらは、静止画1枚をFigmaの基準と比べる自動照合では原理的に検出できない。実ブラウザで幅を動かしながら見て、初めて見つかる種類のものだ。

ここは正直に書いておきたい。「照合を回さなかったから指摘が出た」のは事実だが、「照合さえ回せば全部防げた」わけではない。ゲートや照合ツールを責める前に、そもそも何を検出できる設計になっているかを疑う必要がある、というのがもう一つの学びだった。

手順:重い照合フローの”軽い入口”を作る

構造上の原因ははっきりしていた。フルの照合フローが重いから、小修正が素書きに逃げる。逃げ先を塞ぐのではなく、逃げなくて済む軽い入口を用意することにした。

やったことは3つ。

  1. 適用範囲を客観基準で決める:新規ページ・新規セクション・DOM構造の大幅な組み直しはフルフローへ。それ以外の「既存実装への部分修正で、Figma基準がすでにある」ケースだけを軽量入口の対象にする。「今回は急ぎだから」で自己申告して範囲を広げるのは禁止にした
  2. 照合ループだけを切り出す:フルフローから、実装計画書のような重い前工程を省き、「スクショを撮る→基準と比べる→直す→また撮る」の往復だけを残した。往復の停止条件(最大周回数・変化がなくなったら止める)はフルフローと共通の値を流用し、軽量版のためだけの別基準は作らない
  3. 出口側の素通りも塞ぐ:照合の記録ファイルが無いのに「見た目は確認した」として通過扱いにできないよう、出口のチェック側にも歯止めを入れた。記録が無ければ、その項目は「未確認」と申告することが必須になる

軽い入口を作ったこと自体より、「使う気になる重さまで軽くした」ことが要点だった。重いフローを維持したまま「ちゃんと回せ」と言い続けても、忙しいときは素書きに逃げる。逃げ先の方を、回しても苦にならない設計に変えた。

コスト感・効果

  • 収束まで回したページ:往復4周・最終指摘0件・記録ファイル一式(実装計画・照合結果・自動チェック結果)が全部そろっていた
  • 回さなかったページ:記録ファイルが1件も無いまま完了報告 → 再チェックと目視指摘で合計21件
  • 症状別に見ると、指摘の大半(6分類中4分類)は静止画照合の検出範囲の外側(動的挙動・実データ・クロスブラウザ差)だった。照合ループを回すことと、検出範囲を広げることは別の対策として両方必要

まとめ

  • 品質ゲート(lint・規約チェック・チェックリスト)は「悪いものを止める」判定装置であって、再現度そのものを作らない
  • 再現度を作るのは、基準画像と実装を何度も見比べる収束ループ。今回は4周回して指摘0件まで収束させたページと、1周も回さず記録ゼロで「完了」報告したページで、あとから21件の指摘という差が出た
  • 差は実装者の腕前ではなく、照合ループを回したかどうかという工程の違いだった
  • 見つかった指摘の大半は、動きや実データが絡み静止画照合では原理的に検出できない種類だった。ゲートを責める前に、検出範囲の設計を疑う
  • 重いフローを維持したまま「ちゃんと回せ」と言い続けるのではなく、照合ループだけを切り出した軽い入口を作り、小修正が素書きへ逃げずに済む距離まで近づけた

AI実装のFigma再現度・照合フローの仕組み作りのご相談は、お問い合わせからどうぞ。

ホームページの「困った」、聞かせてください

お見積もりは無料です。内容が固まっていなくても大丈夫。