- CORSの登場で「Ajaxの問題」はほぼ解決しました
- かつての最大の壁 ― 同一オリジン制約
- そこで使われたのがJSONP
- CORSとは何か
- CORSで何が変わったのか
- jQueryの役割の変化
- まだ残る誤解
- 注意点:CORSはクライアント側では設定できない
- なぜjQueryは急速に使われなくなったのか
- まとめ
CORSの登場で「Ajaxの問題」はほぼ解決しました
結論から言います。
CORS(Cross-Origin Resource Sharing)が登場したことで、jQueryが担っていた大きな役割の一つは不要になりました。
それは「別ドメイン通信の回避」です。
かつてのWeb開発では、外部APIと通信すること自体が難題でした。
jQueryはこの問題を解決するために使われていましたが、CORSが標準仕様になったことで、ブラウザ単体で同じことができるようになりました。
かつての最大の壁 ― 同一オリジン制約
ブラウザには同一オリジン制約があります。
簡単に言うと、
- 自分のサイト以外にはAjax通信できない
というルールです。
例えば
のページから
へ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アプリケーションを成立させるための必須ツールでした。
現在は、互換性を保つための選択肢の一つになりました。
技術が古くなったのではなく、
問題が解決された結果として役割が変わったと言えます。