ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-07-13中級

画像の一括最適化をエージェントに任せる前に置く、見た目の劣化を止めるゲート

壁紙アプリの数百枚のアセットをエージェントに一括再エンコードさせたら、数枚だけ色がくすんでいました。サイズ削減率だけでは劣化を見抜けません。SSIM・ΔE・ファイルサイズの3軸でマージ前に不良変換を弾くゲートの設計と、Pillow と scikit-image で動く判定スクリプトをまとめます。

antigravity432app-dev47imageautomation50quality-gate2

プレミアム記事

ある夜、手元の壁紙アプリのアセットを整理していました。ホーム画面に並べる約320枚のプレビュー用 PNG を、エージェントに WebP へ一括変換させたのです。翌朝ログを見ると、総容量は 41MB から 17MB へ。文句のつけようがない削減率でした。

けれど実機で確かめると、深い藍色の夜空を描いた数枚だけ、わずかに灰色がかっていました。並べて比べなければ気づかないほどの差です。エージェントは「サイズが減った」ことを成功として報告し、私はその報告を信じてマージ寸前まで進めていました。

胸の奥がひやりとしました。もし気づかずに公開していたら、いちばん見せたかった作品の色が、静かに損なわれていたことになります。

ここでまとめたいのは、画像の一括最適化をエージェントに委ねる際に、「見た目の劣化」を数値で捉えてマージ前に止めるゲートの設計です。個人開発で壁紙アプリを何本も運営してきた私自身が、色そのものが商品である現場で組んだ実装と、実運用で決めたしきい値の目安を共有いたします。

なぜ「サイズが減った=成功」で止めてはいけないのか

画像最適化のツールは、たいてい削減率を誇らしげに報告します。エージェントも同じで、「320枚を変換し、平均59%削減しました」と返してきます。この数字は嘘ではありません。ただ、削減率は「どれだけ捨てたか」を語るだけで、「何を捨てたか」を語りません

損失の多くは目に見えません。JPEG や WebP の非可逆圧縮は、量子化テーブルの選び方しだいで、なめらかなグラデーションに帯状のムラ(バンディング)を生みます。減色を伴う変換では、微妙な色の階調が丸められます。カラープロファイルが剥がれれば、同じ数値の画素が別の色として表示されます。

これらはいずれも「ファイルとしては正常」で、破損チェックをすり抜けます。人間のレビューにも限界があります。320枚を1枚ずつ原本と並べて見比べる作業は、集中力が保つ枚数を超えています。実際、私が見落としかけたのも、そういう地味な劣化でした。

だからこそ、劣化を機械が測れる数値に置き換え、しきい値を割ったものだけを人間に差し戻す仕組みが要ります。エージェントに最適化そのものは任せてよいのです。任せてはいけないのは、合否の最終判断です。

見た目の劣化を数値で捉える — 3つの軸

私は次の3軸で判定しています。1つでは足りず、3つで補い合う関係です。

測るもの捉えられる劣化
SSIM(構造的類似性)輝度・コントラスト・構造の一致バンディング、ディテールの潰れ、輪郭のにじみ
ΔE(色差)知覚的な色のずれ(CIELAB 上の距離)色相の転び、彩度の低下、プロファイル剥がれ
ファイルサイズ最適化の効果効きすぎ(過圧縮)と効かなさ(無変換)の両方

SSIM は 1.0 が完全一致で、値が下がるほど構造が崩れています。ピクセル単位の差分(MSE)と違い、人間が「同じに見えるか」に近い形で構造の違いを捉えます。バンディングやディテールの潰れに敏感なのが利点です。

一方、SSIM は色相の転びには鈍い性質があります。輝度が保たれていれば、青が少し緑に寄っても SSIM はあまり動きません。壁紙アプリでは色こそが命ですから、ここを ΔE で補います。ΔE は CIELAB 空間での色の距離で、**おおむね 1.0 が「訓練された目でようやく分かる差」、2〜3 が「並べれば分かる差」**とされます。

3つ目のファイルサイズは、劣化そのものではなく最適化の健全性を見ます。削減率が極端に高いときは過圧縮を疑い、逆にほとんど減っていないときは変換が効いていない(=わざわざ品質リスクを負う意味がない)と判断します。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
サイズ削減率だけでは見抜けない画質劣化を、SSIM・ΔE・ファイルサイズの3軸で止める判定ゲートの設計
Pillow と scikit-image だけで動く、CI に組み込める画質判定スクリプトの実装
壁紙アプリの実運用で決めた、変換方式別のしきい値の目安と運用の勘所
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-07-03
ダウンロードサイズの逆行に提出直前で気づかないために — AAB/IPA のサイズ予算をエージェントの週次ゲートで守る
メディエーションSDKやアセットの追加で静かに膨らむダウンロードサイズに、bundletool と App Thinning レポートを使ったサイズ台帳・予算ゲート・増分の内訳特定で歯止めをかける設計をまとめます。
アプリ開発2026-07-09
エージェントが直した .proto がバイナリ互換を壊す前に — buf breaking で wire 互換を門番する
エージェントに .proto を編集させると、テキストとしては正しくても wire 互換を静かに壊すことがあります。フィールド番号の再利用と型変更をどう機械で止めるか、buf breaking と reserved を組み合わせたゲートを動くコードで示します。
アプリ開発2026-07-02
依存パッケージの更新を月イチの苦行にしない — エージェントに任せる週次アップデートのリスク分類と検証ゲート
溜まった依存更新をまとめて当てて壊す運用から、semverとパッケージ種別のリスク分類で週次に消化する運用へ。Antigravityエージェントに渡すプレイブックと検証ゲートの実装をまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →