なぜEdgeはUser-Agentに「Safari」を入れるのか?

20年前のブラウザ戦争が残した奇妙な遺産



サーバーログを覗くと、こんな文字列に出会ったことがあるでしょう。

Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/101.0.4951.64
Safari/537.36
Edg/101.0.1210.47

「EdgeなのにSafari?」 「ChromeなのにMozilla?」

1つのブラウザが同時に4つのブラウザを装っているように見えるのはなぜ?

これは単なる文字列の冗談ではなく、ウェブ史上最も激しいブラウザ戦争の化石です。 そしてその影響は2025年にもサーバーログに残っているのです。

この記事で見ていくこと:

  • すべてのブラウザがまだMozilla/5.0で始まる理由
  • ChromiumベースのEdgeがなぜSafariを取り入れているのか
  • そしてこの混乱が標準により廃止されるまでの過程

1. すべてはNetscape vs IEの戦争から始まった

1990年代後半、ブラウザ市場はほぼ2人のプレイヤーでした。

  • Netscape Navigator
  • Internet Explorer

当時のNetscapeのUser-Agentはこうでした。

Mozilla/4.0 (compatible; ...)

ここで問題が始まります。

ウェブ開発者はこう考えてしまいました。

「Mozilla(=Netscape)ブラウザなら最新機能を使ってもいい。残りは古いバージョン用コードを表示しよう。」

つまり、ブラウザ機能分岐=User-Agent文字列の検査になってしまったのです。

// 1990年代(?)式の擬似コード
if (ua.includes("Mozilla")) {
  // Netscape / モダンブラウザ用「かっこいい」機能
} else {
  // 古いバージョン
}

すると他のブラウザが怒り出しました。

「私たちもNetscape級なのに、なぜ差別を受けるのか?」

そこで皆がUAの先頭にMozillaを付け始めました。このMozillaは実際には:

「私はNetscape級です。低く扱わないでください。」

という意味合いの互換性マークでした。

「Mozilla」の由来:ゴジラパロディ

  • 「Mosaic + Godzilla」→「Mozilla」という語がよく知られています。
  • 感情的には「ゴジラのように強力なブラウザ」というパロディ感です。

しかし実際には単に:

「Netscape系、またはNetscapeほど使えるブラウザ」

というマーケティング的・歴史的ラベルに近いです。

その結果、今日までほぼすべてのブラウザがこうしてUAを始めます。

Mozilla/5.0 (Windows NT 10.0; Win64; x64; ...)

ブラウザがMozillaだからではなく、 「私もNetscape級だから古い扱いをしないで」という歴史的理由です。


2. WebKit, Gecko, Trident… エンジン戦争でまた混乱



2000年代初頭、ブラウザエンジンの構成はこう分かれました。

  • IE → Trident
  • Firefox → Gecko
  • Safari → WebKit

ウェブ開発者は再びUA文字列を使ってブラウザを分けました。

const ua = navigator.userAgent;

if (ua.includes("Safari")) {
  // Safari / WebKit用コード
}
if (ua.includes("Gecko")) {
  // Firefox用コード
}
if (ua.includes("Trident")) {
  // IE専用コード(涙...)
}

ここまでで既に悪いパターンです。 ブラウザエンジン名ブランド名が混ざり、分岐ロジックが複雑化します。

Chrome登場 → 「誰だ?」事件

Chromeが初登場したときの問題は単純でした。

ウェブサイトがChromeを知らないので UA検査でSafariコードフローに送られてしまう。

そこでChromeは選択した戦略は:

「それならSafariを装う

最終的にChromeはこう自己紹介します。

Mozilla/5.0 (...)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/xx.xx.xx
Safari/537.36

この文字列の実際の意味は大まかにこうです。

  • Mozilla/5.0 → 「私もNetscape級ブラウザです」
  • AppleWebKit/537.36 → 「レンダリングエンジンはWebKit系です」
  • (KHTML, like Gecko) → 「Gecko(Firefox)と似て動作できます」
  • Safari/537.36 → 「Safariのように見せる必要があります」
  • Chrome/xx → 「実際のブラウザはChromeです」

つまり、

「私はMozillaでもあり、WebKitでもあり、Geckoのように動作し、Safariのように見せ、実際はChromeだ」

という4重の偽装ブラウザが誕生しました。


3. Edgeの登場:正体と生存の妥協

さてMicrosoftの番です。 初期のEdgeは独自エンジン(EdgeHTML)を使っていましたが、最終的にChromiumベースのEdgeへ移行しました。

この時Microsoftが最もよく知っていた事実は:

「ウェブサイトコードには『User-Agentベースの分岐』が すでに数十万箇所に埋め込まれています。」

もしEdgeがこうしたら?

User-Agent: Edge/101.0.0.0

現実で起こること:

  • 多くのウェブサイトがブラウザを認識できない
  • if (ua.includes("Chrome")) などのレガシー分岐に当たらない
  • 「サポートしていないブラウザです」などのエラーメッセージが表示
  • 機能制限、崩れたレイアウト、奇妙なポリフィル…

つまり、技術的には正直ですが互換性の地獄に陥ります。

そこで出てきたEdgeの戦略

「正体はEdgeだが、見た目はChrome + Safari系である」

だから私たちが見るUAはこうです。

Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/101.0.4951.64
Safari/537.36
Edg/101.0.1210.47

解釈すると:

  • Mozilla → 「私もモダンブラウザ」
  • AppleWebKit → 「WebKit系としてレンダリング」
  • Chrome → 「私はChromiumベース」
  • Safari → 「Safariのように見せる」
  • Edg → 「しかしブランドはEdge」

つまり、この長い文字列はEdgeの自己紹介ではなく、 「ウェブのレガシーコードと妥協するために作られた、生存型偽装カード」に近いです。


4. User-Agent文字列解釈章:この一行に込められた30年の歴史

整理しましょう。 先ほど見たUAから主要トークンを抜き出すと:

文字列 実際の意味(意訳)
Mozilla/5.0 「私はNetscape級のモダンブラウザです。古い扱いはやめてください。」
AppleWebKit/537.36 「SafariのようにレンダリングするWebKit系です。」
KHTML, like Gecko 「Gecko(Firefox)と似て動作可能です。」
Safari/537.36 「本物のSafariではありませんが、Safariのように見せる必要があります。」
Chrome/101.0... 「エンジンはChromium(Chrome)ベースです。」
Edg/101.0... 「ブランド・正体はEdgeです。残りは生存型偽装です。」

この一行の文字列に:

  • Netscape vs IEブラウザ戦争
  • Gecko vs WebKit vs Tridentエンジン戦争
  • Chromeの市場支配過程
  • Edgeの生存戦略と現実妥協

まで、30年近いブラウザ史の層が重なっています


5. そして今、User-Agentは「歴史的ゴミの山」になっている

問題は、今日の基準ではこのUser-Agentシステムがほぼ壊れた設計である点です。

  • ブラウザが互いを真似して偽装 → 信頼度0
  • 過去のレガシーコードとの妥協で文字列が膨大化
  • デバイス/OS情報が過剰に露出 → プライバシー問題
  • UAパースでブラウザ/機能を正確に判断できない

そこでW3CとブラウザベンダーはUA文字列を徐々に廃止し、 User-Agent Client Hintsという新しい方式へ移行しています。

Client Hints: 「今度は正直に言おう」

今後はこうしたヘッダーが主役になります。

Sec-CH-UA
Sec-CH-UA-Platform
Sec-CH-UA-Mobile

大まかな動作はこうです。

  1. サーバーが応答ヘッダーで「あなたのブラウザ情報を正確に教えてくれませんか?」と要求
  2. ブラウザは必要な情報だけ選択的に、構造化された形で送信
  3. それで偽装文字列を解釈する必要がなくなる

メリットは:

  • ブラウザが「私はSafariを装うChromeベースEdgeだ」などの 三重・四重偽装劇を演じる必要がない
  • サーバーは必要な情報だけ要求できるので、個人情報漏洩も減る
  • 文字列パースではなく構造化データを使う → コードも単純化

つまり、ブラウザが正直になれるようにウェブ標準が再設計されています。


6. まとめ — サーバーログにある「奇妙な一行」を見る新しい視点

再び最初のその一行を見てみましょう。

Mozilla/5.0 ... Safari/537.36 ... Edg/101

これは単なる文字列の組み合わせではありません。

  • ブラウザ戦争と権力競争
  • レガシーコードとの妥協
  • 市場シェアを巡る偽装と戦略
  • そして標準が遅れて整理している状況

これらすべてが圧縮された小さな歴史記録です。

そして面白いのは、

この歴史的嵐の残骸が 2025年にも、サーバーログで毎日捕捉されているという事実です。

次にサーバーログを見て Mozilla/5.0 ... Safari ... Edg/... という奇妙な組み合わせに出会ったら、 「わ、また一つの化石が通り過ぎた」と笑ってみてもいいでしょう。 🙂

image