挿絵消失を自動修復し、alt属性の内部文字列露出を防ぐ

  • #画像パイプライン
  • #自動修復
  • #alt属性
  • #静的サイト
挿絵消失を自動修復し、alt属性の内部文字列露出を防ぐ

今回やったこと

記事公開後の画像チェックに、本文の挿絵タグそのものが残っているかを確認する検査を追加した。従来のスモークテストは画像URLのリンク切れを見ていたが、手動作業などの巻き添えで画像タグが消えたケースでは、検査対象となるURL自体が存在しなくなる。その状態でも完了扱いになり、挿絵ゼロの記事が放置される盲点があった。

今回の変更では、画像オフロード処理に verify サブコマンドを追加した。完了済み記事の本文を読み、想定される画像が本文内に存在するかを照合する。画像URLが生きているかだけでなく、本文に画像要素があるかも見ることで、「画像は存在するが記事から参照されていない」という別種の欠落を検知できる。

欠落を検知してから直す流れ

自己修復の対象は、公開済みの記事を無条件に書き換えることではない。まず欠落を検知し、対象記事と画像アセットの対応を確認したうえで、必要な挿入を行う。すでに本文へ正しく挿入されている記事は変更しない。この判定ステップを挟むことで、正常な記事本文に対して不要な再挿入や上書き処理が走るのを防げる。

処理の考え方は次のとおりである。

記事の完了状態を確認

本文に画像要素があるか照合

欠落なら対応するアセットを確認

必要な場合だけ本文へ再挿入

この設計では、画像生成や画像オフロードの失敗と、本文からの参照消失を同じエラーとして扱わない。前者はアセット側の問題、後者は記事本文との結合の問題であり、復旧方法が異なるからだ。検査項目を分けておくと、後からログを見たときにも、どの層で欠落したのかを判断しやすい。

alt属性に内部文字列を出さない

同じ改修では、挿絵の alt 属性や title 属性に内部識別用の生文字列が出力される問題も直した。以前は見出しの識別に使う文字列、たとえば H2:... のような内部向け情報が、そのまま読者向けの属性へ流れ込む可能性があった。

alt は画像が表示されない場合や支援技術が内容を読む場合に使われる説明であり、処理系のデバッグ情報を置く欄ではない。そこで、内部識別子ではなく読者向けに用意した description を参照するようにした。内部で追跡する値と、外部へ出す説明を分離することで、機械処理に必要な情報を保ったまま表示上の露出を防げる。

検査・出力以前の盲点今回の扱い
画像URLURLのリンク切れを確認既存の確認を継続
本文の画像要素タグが消失していても検査をすり抜けて完了扱いになっていたverify で存在を照合
alt / title内部識別文字列が混入し得たdescription を使用

実装ステータスと運用上の境界

実装は完了している。ただし、自己修復は「何でも自動で直す」仕組みではない。対応するアセットがない場合や、本文の構造が想定外の場合は、検知結果を残して人手または別の画像処理へ渡す必要がある。自動修復の範囲を限定し、失敗を成功扱いにしないことが、無人運用では重要になる。

今回の変更で得られた教訓は、公開後の画像監視をURLの生死だけで設計しないことだ。記事、画像アセット、読者向け属性は別々の層にある。各層の存在と接続を個別に検査して初めて、画像が「ある」だけでなく「記事内で使われ、説明も適切である」状態を確認できる。

更新履歴

  • 2026-09-08: 初稿。画像オフロードの verify と description 利用の設計を整理。