◉ANTIGRAVITY LABEN
記事一覧/Tips & 活用術
✦ Tips & 活用術/2026-10-15中級

画像が壊れて見えたのは、確かめ方のせいでした。iframe 検証を疑う順番と、実ページの currentSrc

別タブの iframe に実ページを差し込んで画像を点検し、「読み込まれていない」と誤診した失敗の記録です。非表示の枠では描画幅 0 のまま naturalWidth が 0 になり、遅延読み込みは未開始のまま残ります。手元で再現した数値と、実ページで currentSrc と描画幅を見る検査スクリプト、置換を正規表現で機械的に行ったときの落とし穴まで書き残します。

画像検証遅延読み込みsrcsetPlaywright3個人開発106Antigravity383

✦ プレミアム記事

自分のサイトの画像まわりを点検していた夜のことです。確かめたかったのは、スマホ幅とPC幅の両方で、各ページの画像がきちんと出ているかどうかでした。

ページを一つずつ開いて見ていくと手間がかかるので、点検用の別タブを一枚作り、そこに本番ページを iframe で差し込んで、幅を 375px と 1280px に切り替えながら画像の状態を読む形にしました。ところが、結果の一覧には「読み込まれていない画像」が何枚も並びました。

直さなければ、と焦ってしまったのです。しかし、実ページを自分の目で開いてみると、画像はすべて出ておりました。壊れていたのは画像ではなく、私の確かめ方のほうでした。

ここでは、そのとき何が起きていたのかを手元で再現して測った数値とともに、確かめ直すときの順番を書き残します。

最初にお伝えしたいのは、疑う順番です

画像が出ていないように見えたとき、私はまず画像のURLやサーバーを疑っておりました。いまは、疑う順番を逆にしています。

  1. 確かめている場所が、画像の読み込みを始められる状態にあるか
  2. 読み込みが始まったあとの状態を読んでいるか
  3. それでも空なら、そこで初めて画像そのものを疑う

誤診の大半は、一つ目と二つ目で起きます。つまり、画像は壊れていないのに、読み込みが始まっていない場所か、始まる前の瞬間を測っていたのです。

再現した環境と、先に結果の表

再現には、自分のマシンで Playwright の Chromium(ヘッドレス)を使いました。内容は、400px 幅で表示する画像を二枚と、存在しないファイルを指す画像を一枚置いた、ごく小さなページです。一枚目は loading="lazy" を付けて、ページの下のほう(約 6,000px 下)に置きました。二枚目は srcset と sizes を付けた通常の画像です。

確かめた場所遅延読み込みの画像通常の画像(srcset)
実ページを直接開く(幅 1280px)スクロール前: complete=false、currentSrc が空。スクロール後: 読み込み済みcurrentSrc は 800 幅の候補、naturalWidth は 800
見えている iframe(幅 375px)complete=false、currentSrc が空のままcurrentSrc は 400 幅の候補、naturalWidth は 374
display:none の iframecomplete=false、描画幅 0complete=true なのに naturalWidth が 0、描画幅も 0

数えてみると、再現ページの画像 3 枚のうち、最初の読み取りで正常と判定できたのは 1 枚(33%)だけでした。スクロールのあとには 2 枚(67%)に増え、残りの 1 枚(33%)は存在しないファイルを指す本当に壊れた画像です。つまり、最初の読み取りで正常でなかった 2 枚のうち、1 枚は読み込みが始まっていなかっただけだったのだと気づきました。

この表で、私が誤診した理由はほぼ説明がつきます。非表示の枠では、読み込みが終わった通常の画像ですら naturalWidth が 0 になります。complete は true なのに、です。単純に「naturalWidth が 0 なら壊れている」と書いた判定は、ここで総崩れになります。

もう一つ、naturalWidth について気づいたことがあります。幅 375px の枠で srcset から 400px 幅の画像が選ばれたとき、ファイルの実寸は 400px なのに naturalWidth は 374 でした。srcset の幅記述子を使うと、naturalWidth は画素数そのものではなく、選ばれた倍率で割った値になるためです。実寸と一致しないからといって、画像が縮んでいるわけではありません。

✦

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

この記事の続きを読む

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

この記事で得られること
✦画像が「壊れている」と判定する前に、描画幅・読み込み状態・currentSrc の三つを読んで、壊れているのか、まだ始まっていないのか、枠のせいで測れていないのかを切り分けられるようになります
✦エージェントに「画像が表示されているか確認して」と頼む前に、確認の置き場所と合格条件を指示文に書き込めるようになり、誤診を信じて直さなくてよい箇所を直しに行く時間を省けるようになります
✦CSS の数値を機械的に置換する前に、メディアクエリの閾値まで巻き込む失敗を見抜く検査を走らせられるようになり、レイアウトが静かに崩れてから原因を探す手戻りを防げるようになります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

✦ Tips & 活用術2026-04-27
Antigravity で CHANGELOG.md を git ログから半自動で書く — 個人開発でも意思決定の履歴を残す
半年前の自分の判断が思い出せない — 個人開発でよくある問題です。Antigravity に git log を読ませて CHANGELOG.md のドラフトを作る半自動ワークフローを、実際のスクリプト付きで紹介します。
✦ Tips & 活用術2026-10-09
長いメモを貼る前に、頼みごとを5行へ畳む — 手戻りが減った依頼文の整え方
打ち合わせメモをそのままエージェントに貼ると、返ってくる結果がぼんやりします。目的・材料・範囲・完成形・確認の5行に畳む手順と、5行そろっているかを確かめる小さなスクリプトをお伝えします。
✦ Tips & 活用術2026-09-22
会話の記録を、エクスポートボタンに預けきらない — 押しても反応しない日の三つの経路
Antigravity のチャットエクスポートが無反応のときに、会話の記録を手元へ残す三つの経路をお伝えします。押せていないのか押しても動いていないのかを分ける手順、会話ファイルの居場所を自分の環境で当てる一手、残すものを先に決める運用までを扱います。