画像チェッカー
チェッカーは先頭バイトからファイル形式を判定する
判定結果がファイル名と異なるフォーマットを示した場合でも、読み取りに誤りはありません。このツールは、拡張子、ファイル名、ブラウザが報告するファイルの種類を参照しません。バイト列を開いてシグネチャを照合し、その後の処理はすべてその一致に基づいて行われます。
判定結果の読み取り方法
チェッカーは選択されたファイルを開き、先頭バイトを固定のシグネチャセットと比較します。比較処理は apps/web/lib/image/inspect.ts に直接記述されており、JPEG 分岐では if (startsWith(bytes, [0xff, 0xd8, 0xff])) return "jpeg"; となっています。ファイル名はこの比較に含まれておらず、ブラウザが報告するファイルの MIME タイプも含まれていません。
そのため、ファイル名を .jpg に変更しても、別のファイルとして報告されることがあります。BMP に .jpg という名前を付けても、JPEG とはみなされません。ファイル名は変更されていますが、先頭バイトは変更されておらず、先頭バイトは入力データ全体だからです。
このページの帰属情報: apps/web/lib/image/inspect.ts、apps/web/lib/image/evaluate.ts、apps/web/components/tools/etsy-image-checker.tsx、apps/web/components/tools/product-image-resizer.tsx。feat/expansion-wave-01-continuous 作業ツリーの 2026-08-18 を参照してください。
投票対象となるものとそうでないもの
販売者が重要視するであろう4つの要素と、フォーマット決定においてそれぞれが実際に持つ重み。
- ファイルの先頭バイト
- フォーマット判定の基準となる入力データ。他のデータは比較対象になりません。
- ファイル拡張子
- 重み付けなし。ファイル名が変更されたファイルはバイトデータに基づいて判定されるため、拡張子が間違っていても結果は変わりません。
- ブラウザが報告するMIMEタイプ
- フォーマット判定において重み付けなし。リーダーはブラウザの報告するファイルの種類を鵜呑みにしません。
- ファイルピッカーの受け入れ設定
- このツールは、オペレーティングシステムのダイアログが提示する形式をフィルタリングしますが、コンポーネントが判断する形式はフィルタリングしません。ドラッグ&ドロップやペーストによって、他の形式のファイルがツールに渡される可能性もあります。
6種類のシグネチャが認識されます。それ以外は不明です。
リーダーは、PNG、JPEG、GIF、WebP、HEIC、SVGに一致させることができます。これらはリーダーが認識するシグネチャです。
ファイルの先頭バイトがこれらのシグネチャのいずれにも一致しない場合、不明として報告されます。不明とは、一致しないことを示すものであり、診断結果ではありません。リーダーがフォーマットを特定できなかったことを示し、ファイル内の画像が破損していないかどうかについては何も示しません。
WebPファイルがこのチェッカーで失敗する理由
チェッカーは、独自のフォーマットリストを保持しています。apps/web/lib/image/evaluate.tsには、.jpg、.gif、.png、.svg、.heicが受け入れられるフォーマットとして指定され、その後、ファイルが読み込まれたフォーマットが示されます。WebPとして読み込まれたファイルはこのリストに含まれていないため、結果は失敗となります。
ピッカーは別の問題です。ピッカーはすべての画像タイプを受け入れるように設定されているため、WebPファイルがそもそも選択できるのです。選択は受け入れとは異なります。ファイルが読み込まれ、フォーマットが特定され、その後リストが適用されます。 WebP ファイルの場合、結果は毎回失敗となります。
このリストは、このツールが適用するルールであり、ツール自身のコードに記録されています。これは、現在どのマーケットプレイスでもアップロード時に受け入れられる形式を示すものではなく、このページでその疑問を解決するものではありません。
アニメーションGIFの判定方法と、誤判定が発生する可能性のある箇所
アニメーションと判定されたGIFは、apps/web/lib/image/evaluate.ts に「アニメーションGIFはサポートされていません」というタイトルのエラー結果を生成します。
判定は、ファイル内のグラフィック制御拡張ブロックの数を数えることで行われます。ブロックが1つ以上ある場合、ファイルはアニメーションとして扱われます。コード自体では、このカウントはヒューリスティックであると説明されています。
したがって、販売者にとって重要な方向において、このテストは誤った結果を示す可能性があります。通常とは異なる方法でエンコードされた単一フレームのGIFは、原則としてアニメーションとしてカウントされる可能性があります(inspect.ts:163)。静止画のエクスポートが繰り返しアニメーションとして検出される場合、この検出結果は動いている画像ではなく、ファイルの構造を記述していることになります。
2つのツール、2つの異なる扉
チェッカーとリサイズツールは同じリポジトリに格納されていますが、選択可能な項目について意見が一致しません。ピッカーの設定は各コンポーネントファイルで確認できます。
| ツール | ピッカーの機能 | コンポーネントにアクセスできるもの |
|---|---|---|
| 画像チェッカー (apps/web/components/tools/etsy-image-checker.tsx) | すべての画像タイプ | ピッカー、ドラッグ&ドロップ、ペーストで取得できるものすべてフォーマット名は、読み込まれたバイトに基づいて命名されます。 |
| 製品画像リサイズツール (apps/web/components/tools/product-image-resizer.tsx) | JPEG、PNG、WebP | その他のタイプは、ドラッグ&ドロップまたはペーストで操作できます。この設定は、オペレーティングシステムのダイアログのみをフィルタリングします。 |
このページで解決できない事項
これらはそれぞれ独立した質問であり、上記の記述ではいずれも回答されません。
- マーケットプレイスが現在アップロード時に受け入れる内容チェッカーは独自のコードに記録されたリストを適用しますが、そのリストの最新性は本画面からは確認できません。
- 画像に透明度が含まれているかどうか、そしてチェッカーがそれについてどのような報告をするか。これは別の検証項目であり、専用のページで設定されています。
- モバイルアプリが受け入れる画像ファイルの種類。この決定はアップロード開始前にデバイス上で行われ、下記の関連ページで設定されています。
- 保存された画像の署名付き表示アドレスの有効期間、および保存されたキーの拡張子が測定ではなく宣言される理由。これは別のメカニズムであり、下記の関連ページで説明されています。
- ショップバナーまたはリストスロットでファイルのサイズが測定される際の基準となる記録されたサイズ。保存される数値は下記の関連ガイドで説明されています。
- リサイズツールが出力する内容。出力形式と適用される圧縮方式は、このページで検証したコードとは別のモジュールで決定されます。
- 画像機能が利用できないブラウザで、これらのツールがどのように動作するか。これはここでは検証していません。
よくある質問
ファイル名は.jpgですが、チェッカーは別の形式として認識します。どちらが正しいのでしょうか?
判定結果はバイト列の内容を表していますが、ファイル名は何も説明していません。リーダーはファイルの先頭バイト列をapps/web/lib/image/inspect.tsにある固定シグネチャと比較し、拡張子やブラウザが報告するファイルの種類は参照しません。
ファイル名を.jpgに変更したのに、それでもエラーになりました。なぜでしょうか?
ファイル名を変更すると名前は変わりますが、先頭バイト列はそのままです。フォーマット判定の入力は先頭バイト列のみなので、同じ判定結果が返されます。ファイルを作成したプログラムから再度エクスポートしてください。
ピッカーでWebPファイルを選択できたのに、なぜ拒否されたのでしょうか?
ピッカーはすべての画像形式を受け入れるように設定されているため、WebP ファイルを選択することも可能です。apps/web/lib/image/evaluate.ts に記録されている形式リストには、.jpg、.gif、.png、.svg、.heic が含まれていますが、WebP はリストに含まれていないため、検出結果は不合格となります。このリストは、マーケットプレイスに関する記述ではなく、このツール独自のルールです。
チェッカーは、私の GIF がアニメーション化されていることをどのように認識するのですか?
ファイル内のグラフィックコントロール拡張ブロックの数をカウントします。ブロックが複数存在する場合、「アニメーション化された GIF はサポートされていません」というエラーが表示されます。このコードはカウントをヒューリスティックと呼んでおり、通常とは異なる方法でエンコードされた単一フレームのGIFもアニメーションとしてカウントされる可能性があります(inspect.ts:163)。
不明なフォーマットとはどういう意味ですか?
これは、開始バイトがリーダーが認識している6つのシグネチャ(PNG、JPEG、GIF、WebP、HEIC、SVG)のいずれにも一致しなかったことを意味します。これは一致したかどうかを示すものであり、ファイル内の画像が破損していないかどうかを示すものではありません。