ブログに戻る
比較テクノロジー

2026年 画像ホスト B2B 技術仕様 完全ガイド:調達前 15 項目チェックリスト

公開日20 min read
共有

画像ホスティングサービスの法人契約は、ランディングページのキャッチコピーで判断してはいけません。データベースの導入と同じレベルの技術検証が必要です。

社内でベンダー切り替えの評価を任されたとき、私は過去3年間の本番障害と予算超過をすべて洗い出し、チェックリストにまとめました。この資料は「CDN拠点が多い方が勝ち」という比較表ではありません。RFPに貼り付けて、ベンダーに「Yes / No / Partial」で逐一回答させるための表です。表面上は同じように見える画像ホスティングでも、アーキテクチャは大きく異なります。

無料で使えるサービスやコスト比較だけを知りたい方は、無料画像ホスティング比較やImgur代替サービスをご覧ください。本記事はエンジニアリングリード、SaaS調達担当者、DevOpsエンジニア向けです。

B2B選定が個人利用と根本的に異なる理由

個人ユーザーが気にするのは「アップロードできるか」「リンクを共有しやすいか」の2点です。

企業が気にするのは全く別の問題です。契約にSLAが明記されているか。APIがRate Limitに達したときの退化挙動はどうなるか。Egress費用がある月に突然2倍になることはないか。個人情報保護法の監査でEXIFデータの保持期間を聞かれたとき、答えられるか。

B2B画像ホスティング調達の本質は3つのものを買うことです:予測可能なコスト曲線、検証可能なシステム保証、統合可能なプロトコルインターフェース。以下の15項目はすべてこの3点を軸に構成しています。

本番で一度障害を経験して初めて理解しました。無料プランはデモには耐えられますが、本番トラフィックには耐えられません。

15項目のRFPチェックリスト(調達書類にコピー可能)

以下は私が実際のベンダー評価で使用している表です。各項目に検証方法があります。「対応していますか?」と質問するだけでは検証になりません。ベンダーは必ず「はい」と答えます。

# 仕様項目 検証方法 合格基準
1 S3 API互換性 s3api list-objects-v2 --prefix を実行 レスポンスがAWSと一致
2 Multipart Upload 500MBファイルをアップロード、中断後resume part retryをサポート
3 Pre-signed URL 15分有効のURLを生成し署名を検証 HMAC-SHA256、TTL設定可
4 Webhookイベント upload/deleteイベントをトリガー HMAC署名 + retry機構
5 Rate Limit ポリシー バーストテストを実行 429 + Retry-Afterヘッダー
6 SLA条項 MSA契約書を確認 ≥99.9%、service credit付き
7 AZ / マルチリージョン リージョンリストを要求 ≥2リージョン、クロスリージョン同期
8 Egress課金 料金表を要求 単価透明、ティア割引あり
9 画像処理パイプライン on-the-fly変換をテスト WebP/AVIF対応、URLパラメータ
10 CDNエッジノード グローバルpingテスト ≥50 PoP、AWS東京リージョン含む
11 EXIF / Metadata制御 GPS付き写真をアップロード 選択的strip対応
12 認証方式 APIドキュメントを確認 OAuth2 + APIキーローテーション対応
13 監査ログ ログ保持期間を確認 ≥90日、エクスポート可
14 コンプライアンス認証 SOC 2 / ISO 27001レポートを要求 最低1つ
15 データ所在地と削除 DPA条項を確認 リージョン指定可、ハード削除対応

Yes/Noだけでチェックしないでください。各項目についてドキュメントリンクまたは技術検証手順の添付を求めてください。添付がない項目は、実務上ほぼ間違いなく「計画中だが未実装」です。

コア仕様の実装詳細

チェックリストは骨格にすぎません。以下の項目は契約交渉時にベンダーが最も曖昧にしがちなポイントです。

S3互換性は一言では片付かない

「当社はS3互換です」は画像ホスティングベンダーが最も好んで使うフレーズです。しかしS3 APIには200以上のオペレーションがあり、検証すべきは実際に使用するサブセットです。

GetObjectとPutObjectは誰でもサポートしています。その先を確認します:

# multipartテスト
aws s3api create-multipart-upload --bucket test --key big.mp4 \
  --endpoint-url https://vendor.example.com

# versioningテスト
aws s3api put-bucket-versioning --bucket test \
  --versioning-configuration Status=Enabled

# lifecycleテスト
aws s3api put-bucket-lifecycle-configuration ...

実テストの結果、3項目すべてに合格するベンダーは6割未満です。特にbucket lifecycleとobject lockの欠如が多く、これらがないとコンプライアンス監査で問題になります。

Pre-signed URLのTTLと署名アルゴリズム

B2Bシナリオで最も一般的な認証方式です。エンドユーザーはあなたのcredentialを持っていないため、時間制限付きチケットを発行します。

仕組みはHMAC-SHA256です。method、path、expiry、headersをstring to signにパックし、secret keyで署名します。優れたベンダーは以下を提供します:

  • 可変TTL(1分から7日まで)
  • 送信元IP制限(aws:SourceIp条件)
  • HTTPメソッド制限
  • SigV4サポート(SigV2は非推奨。まだSigV2を使っているベンダーは即除外)

質の低いベンダーは「期限なしのpublic URL」を渡して「signed」と呼びます。Pre-signed URLをRFPに明記すべき理由はここにあります。

Webhook署名検証:私はここで痛い目に遭いました

Webhookはイベント駆動アーキテクチャの要です。アップロード完了、ウイルススキャン完了、トランスコード完了。それぞれイベントをプッシュすべきです。

しかしWebhookのセキュリティはベンダーが最も手を抜きがちな部分です。私が実際に遭遇したダメな実装:

  1. 署名なし、生のPOST
  2. 署名はあるがsecretがクエリ文字列に含まれている
  3. 署名はあるがMD5
  4. 署名はあるがタイムスタンプがなく、リプレイ攻撃が可能

適格なWebhookの要件:

  • HMAC-SHA256署名をX-Signatureヘッダーに格納
  • X-Timestampヘッダー付き、5分以上経過したリクエストは拒否
  • 失敗時の自動リトライ(指数バックオフ、最低3回)
  • Dead letter queueまたはreplay API

GoでのWebhook検証コード:

func verifyWebhook(body []byte, sig, ts, secret string) bool {
    if time.Since(parseTS(ts)) > 5*time.Minute {
        return false
    }
    mac := hmac.New(sha256.New, []byte(secret))
    mac.Write([]byte(ts + "." + string(body)))
    expected := hex.EncodeToString(mac.Sum(nil))
    return hmac.Equal([]byte(sig), []byte(expected))
}

タイムスタンプチェックがなければ、リプレイ攻撃でイベントシステム全体が突破されます。

Rate Limitの2層評価

Rate Limitには2つの次元があります:配分はいくらかと超過時に何が起きるかです。

配分は明快で、通常per-second / per-minuteがプランに記載されています。重要なのは超過時の挙動です:

挙動 適格性
503で即切断 不合格
429でRetry-Afterなし 半合格
429 + Retry-Afterヘッダー 合格
429 + Retry-After + quotaヘッダー 優秀

X-RateLimit-Remainingヘッダーがあれば、429を受ける前に自主的にスロットリングできるため加点ポイントです。

SLA条項の落とし穴

どのベンダーも99.9%を掲げます。99.9%は月間43.2分のダウンタイム、99.95%は21.6分、99.99%は4.3分です。

しかしSLAの真の価値はその数字ではなく、除外条項にあります。一行ずつ確認してください:

  • 計画メンテナンスはダウンタイムに含まれるか
  • リージョン単位の障害は含まれるか
  • DDoS攻撃中は含まれるか
  • 第三者依存(上流DNSなど)は含まれるか

さらに重要なのはservice credit機構です。SLA未達時の返金額はいくらか。アカウントクレジットか現金か。クレジットは累積可能か有効期限付きか。

正直なところ、ほとんどのSLAは書面上は見栄えが良いです。実際に申請すると大半が除外条項でブロックされます。調達時はパーセンテージではなく、過去12ヶ月の実際のインシデント履歴をNDA下で要求してください。

Egress課金:コストのブラックホール

Egress(送信帯域幅)は画像ホスティングで最も予算が爆発しやすい項目です。ベンダーの定番手法:ストレージは安く、Egressは高く。

主要ベンダー間のEgress単価差は10倍以上になることがあります。Cloudflare R2は自社ネットワーク内でzero egressを実現し、Cloudinaryはクレジットモデル、imgixはリクエスト課金です。どれがお得かはトラフィックパターン次第です。

契約前に3点を確認してください:

  1. ティア階段割引はあるか。 通常10TB/月以上で大幅割引あり
  2. クロスリージョンの内部トラフィックはEgressに含まれるか
  3. CDNキャッシュヒットはEgressに含まれるか。 CDNキャッシュヒットも課金対象にするベンダーもあります

私はこの点で痛い目に遭いました。テスト環境では月200GBで問題なし。本番投入後に瞬時に8TBに達し、請求書の桁が1つ増えました。契約前に超過時の挙動を確認していなかったため、その月の全額を負担することになりました。

見落とされがちな3つの仕様

以下の3項目は一般的な「画像ホスティング比較」記事には登場しませんが、本番運用で実際に痛みを伴います。

EXIFとMetadataのコンプライアンス処理

EXIFにはGPS座標、カメラシリアル番号、撮影日時が含まれています。公開画像ホスティングにアップロードすると、デフォルトでこれらのメタデータがすべて付随します。

B2Bシナリオで確認すべき点:

  • EXIFフィールドの選択的除去は可能か(GPSのみ除去、著作権情報は保持)
  • IPTC / XMP metadataの操作に対応しているか
  • Metadata処理はアップロード時かon-the-flyか

個人情報保護法ではGPS座標は個人情報に該当します。処理を誤ると、法令順守リスクがそのまま自社に転嫁されます。日本の場合、AWS東京リージョン(ap-northeast-1)にデータを保持できるかどうかも重要な検討事項です。

OAuth2とAPIキーのハイブリッド認証

レガシーな画像ホスティングはAPIキーのみ提供します。現代のB2B要件にはハイブリッドが必要です:

  • システム間連携:APIキー + IPアローリスト
  • ユーザー向けSPA:OAuth2 PKCEフロー
  • 一時アクセス:Pre-signed URL

永続的なAPIキーを1つ渡して「スコープは自分で管理してください」というベンダーは、セキュリティリスクを顧客に押し付けています。適格なソリューションはscoped token、自動ローテーション、revocation APIをサポートすべきです。

ハード削除とデータ保持

GDPRの「忘れられる権利」は30日以内の実行が求められます。多くの画像ホスティングは「削除します」と言いますが、実態はソフト削除です。オブジェクトはS3、CDNキャッシュ、バックアップテープに残ったままです。

調達時に必ず確認:

  1. 削除はDPA(Data Processing Agreement)に明記されているか
  2. バックアップサイクルに対応する削除メカニズムがあるか
  3. 削除証明を発行できるか

実際に対応した事例があります。クライアントがGDPR削除リクエストを受け取りましたが、ベンダーのコールドストレージバックアップが365日保持で変更不可でした。法務のやり取りに3ヶ月を要しました。

CDNエッジノードと実際のレイテンシ

PoP数は水増しされがちです。「300+ PoP」を謳うベンダーでも、280が欧米で、アジア太平洋は5拠点という場合があります。

検証方法は単純です。ベンダーのanycast IPを取得し、各リージョンのVPS(東京、シンガポール、フランクフルト、サンパウロ、バージニア)からmtrでRTTを測定します。80ms以上は許容範囲外です。

アジア太平洋のユーザーのCDNが米国西海岸に折り返す場合、150ms以上が確定します。フロントエンドの画像読み込み体感は明確に悪化します。B2B SaaS、特にECとメディア領域では、コンバージョン率に直接影響します。

lpic.ccのポジション

正直に申し上げます:lpic.ccは現時点でB2Bエンタープライズ向けソリューションではありません。

個人開発者、ブロガー、フォーラム共有向けに、無料アップロード、パスワード保護、30日保持を提供しています。バックエンドはCloudflare R2 + 自社APIで構築しており、本記事で触れたいくつかの技術(Pre-signed URL、Webhook、EXIF処理)をアーキテクチャに組み込んでいます。ただし、エンタープライズSLA、SOC 2認証、DPAは提供していません。

プロダクションレベルの画像ホスティングを評価中のエンジニアリングリードの方は、このチェックリストをCloudinary、imgix、Cloudflare Images、ImageKitの評価に活用してください。個人や小規模チーム向けの軽量ソリューションをお探しなら、lpic.ccをお試しください。無料でアップロードして、ご自身のユースケースに合うかご確認いただけます。

よくある質問

Q1:小規模チームでもエンタープライズ級の画像ホスティングは必要ですか?

必ずしもそうではありません。MAU1万以下、月間トラフィック500GB未満なら、Cloudflare R2 + Workersで自前の層を構築すれば月$5以下に抑えられます。エンタープライズソリューションの価値はSLA、コンプライアンス、サポートSLAにあり、小規模チームには不要な場合もあります。ただし、B2B顧客にサービスを提供し、顧客契約にDPA要件がある場合は選択肢がありません。

Q2:S3互換性は本当に重要ですか?

非常に重要です。S3 APIは事実上の標準であり、互換性があればSDK、Terraform provider、バックアップツールなど成熟したエコシステムを活用できます。互換性がなければベンダー独自のAPIに囲い込まれ、将来の移行コストが極めて高くなります。典型的なベンダーロックインの指標です。

Q3:WebhookとPollingの違いは何ですか?

PollingはN秒ごとに「完了しましたか?」と問い合わせる方式です。Webhookは完了時にベンダーが通知をプッシュします。違いはレイテンシ(秒単位 vs ミリ秒単位)とコスト(APIコール配分の消費 vs ゼロコスト)にあります。アップロード完了、トランスコード完了、ウイルススキャンなどのイベントでは、Webhookなしにリアルタイムのユーザー体験は実現できません。

Q4:SLA 99.9%と99.99%の差は本当に大きいですか?

数値上は月43分 vs 4分です。影響度はビジネス次第です。ECサイトのチェックアウトフローの商品画像であれば、1分のダウンタイムが収益損失に直結します。社内マニュアルの画像であれば、99.9%どころか99%でも問題ありません。SLA要件は実際のビジネスインパクトと一致させ、盲目的に高い数値を追いかけないことが重要です。

Q5:Cloudflare R2のzero egressなら無条件で選ぶべきですか?

そうではありません。R2のzero egressはCloudflareネットワーク内(Workers経由またはCDN経由)に限定されます。他クラウドからR2のデータを取得する場合は課金されます。またR2のClass Aオペレーション(書き込み系)の単価は安くありません。書き込みが多く読み取りが少ないワークロードでは、R2が必ずしもコスト効率が良いとは限りません。read/write比率を基にトータルコストを計算してください。

参考資料

#画像ホスティング API#S3互換#SLA#CDN#Webhook#企業調達#DevOps#Signed URL
H

著者

Harvey Zhang

共同創業者・CTO

バックエンドエンジニア出身。システムアーキテクチャの観点から画像ホスティングサービスの技術実装を深く解説します。