CORS登場で変わったjQueryの役割とは

CORSの登場で「Ajaxの問題」はほぼ解決しました

結論から言います。
CORS(Cross-Origin Resource Sharing)が登場したことで、jQueryが担っていた大きな役割の一つは不要になりました。

それは「別ドメイン通信の回避」です。

かつてのWeb開発では、外部APIと通信すること自体が難題でした。
jQueryはこの問題を解決するために使われていましたが、CORSが標準仕様になったことで、ブラウザ単体で同じことができるようになりました。

かつての最大の壁 ― 同一オリジン制約

ブラウザには同一オリジン制約があります。

簡単に言うと、

  • 自分のサイト以外にはAjax通信できない

というルールです。

例えば

https://example.com

のページから

https://api.weather.com

へXMLHttpRequestを送ると、ブラウザがブロックします。

これはセキュリティのためです。
もし自由に通信できると、ログイン中の別サイトへ勝手にリクエストを送り、情報を取得できてしまいます。

しかし、現実のWebアプリは外部APIに依存します。

  • 地図API
  • SNSログイン
  • 決済API
  • 天気API

この矛盾が、かつてのWeb開発の最大の障害でした。

そこで使われたのがJSONP

この制約を回避するために使われたのがJSONPです。
JSONPはAjaxではなく、scriptタグ読み込みを利用した方法でした。

jQueryはJSONPを簡単に扱える唯一の実用的な手段でした。

$.ajax({
  url: "https://api.example.com/user",
  dataType: "jsonp"
});

開発者は通常の通信のように書けますが、内部ではscriptタグが生成されていました。

つまりjQueryは

通信ライブラリ
ではなく
制限回避ライブラリ

としての側面を持っていました。

CORSとは何か

CORSはブラウザとサーバが協力して通信を許可する仕組みです。

サーバがレスポンスヘッダに次を追加します。

Access-Control-Allow-Origin: https://example.com

するとブラウザは「許可された通信」と判断し、別ドメインでもXMLHttpRequestやfetchを通します。

つまり回避ではなく、正式な許可です。

CORSで何が変わったのか

これにより、次が可能になりました。

fetch("https://api.example.com/user")
  .then(r=>r.json())
  .then(console.log);

かつては不可能だった「外部APIの直接呼び出し」が、標準機能で実現しました。

結果としてJSONPは不要になります。

jQueryの役割の変化

CORS以前のjQueryの役割:

  • ブラウザ差異吸収
  • 非同期処理の整理
  • JSONPによる外部通信

CORS以後:

  • DOM操作補助
  • 古いブラウザ対応

つまり、通信の中心的存在ではなくなりました。

特に大きいのは、JSONPを使う理由が消えたことです。
外部API通信のためにjQueryを導入する必要がなくなりました。

まだ残る誤解

「jQueryの方がAjaxに強い」という話を聞くことがあります。
現在ではほぼ当てはまりません。

fetchはブラウザ標準であり、

  • Promise対応
  • ストリーム対応
  • Service Worker連携

など、むしろ機能は多くなっています。

jQuery.ajaxが特別だったのは、ブラウザが未成熟だった時代の話です。

注意点:CORSはクライアント側では設定できない

ここは重要です。

CORSはJavaScriptから有効化できません。
サーバ側の設定です。

よくある誤解:

「jQueryならCORSを回避できる」

できません。
CORSが無効なサーバには、jQueryでもfetchでも通信できません。

開発中にChromeの拡張やローカル設定で動いても、本番では失敗する原因になります。

なぜjQueryは急速に使われなくなったのか

理由は単純です。

jQueryの価値の多くは「ブラウザの不足」を補うことでした。

  • DOM操作の差異
  • イベントの違い
  • Ajaxの制限

これらが標準化されると、必要性が減ります。

CORSはその象徴的な出来事でした。
外部通信という最も重要な機能が、ブラウザ標準で可能になったからです。

まとめ

CORSの登場により、Web開発は「回避策の時代」から「標準仕様の時代」へ移りました。

jQueryは役に立たなくなったのではありません。
ブラウザがjQueryの役割を引き継いだのです。

かつてjQueryは、Webアプリケーションを成立させるための必須ツールでした。
現在は、互換性を保つための選択肢の一つになりました。

技術が古くなったのではなく、
問題が解決された結果として役割が変わったと言えます。