結論: Cookie(クッキー)とは、Webサイトがブラウザ(ChromeやSafariなど)に一時的に保存させる「小さなメモ書き」のようなデータです。
あなたがWebサイトを訪れたとき、サーバー側から「この情報を覚えておいて」と渡されるのがCookieです。次に同じサイトを訪れた際、ブラウザはそのメモ(Cookie)をサーバーに自動的に提示します。これにより、サイト側は「あ、さっきの利用者さんだ」とあなたを識別できる仕組みになっています。
もしCookieがこの世から消えてしまったら、Amazonで買い物をしようとしても、ページを移動するたびにログアウトされ、カートの中身は常に空っぽ……という、非常に不便なインターネット体験を強いられることになります。
この記事では、Cookieの基本的な仕組みから、混同されやすいキャッシュとの違い、開発者が知っておくべきセキュリティ設定、そして昨今騒がれている「Cookie規制」の正体まで、実務に役立つ知識を網羅的に解説します。
なぜCookieが必要なのか?「ステートレス」という壁
Webの基本プロトコルであるHTTP(Hypertext Transfer Protocol)には、「ステートレス(状態を持たない)」という性質があります。
これは、「1回のやり取り(リクエストとレスポンス)が終わると、サーバーは前のやり取りをすべて忘れる」という仕組みです。一見効率的に思えますが、これでは「ログイン状態」を維持することができません。
- ログインページでID/パスワードを送信。
- サーバーが「正解!」と判定し、マイページを表示。
- 別のリンク(設定画面など)をクリック。
- サーバー「……あなたは誰ですか?(前のやり取りを忘れている)」
この問題を解決するために登場したのがCookieです。ログインに成功したとき、サーバーはブラウザに「次からはこのチケットを見せてね」とCookieを渡します。以降、ブラウザはリクエストのたびにそのチケットを勝手に添付して送信するため、ログイン状態が途切れないのです。
Yachi「なぜわざわざブラウザに保存させるのか?」と不思議に思うかもしれませんが、サーバー側ですべてのユーザーの状態を記憶し続けるのは、リソースの面でもスケーラビリティの面でも限界があります。ブラウザ側に「自分の身分証」を持たせる方が、Web全体の仕組みとしてはスマートだったというわけです。
Cookieの仕組み:裏側で行われているやり取り
Cookieのやり取りは、目に見えないHTTPヘッダーの中で行われています。
1. サーバーからブラウザへ(Set-Cookie)
ユーザーがサイトにアクセスした際、サーバーはレスポンスのヘッダーに Set-Cookie という項目を含めます。
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: user_id=12345; Max-Age=3600; HttpOnly
この指示を受け取ったブラウザは、自分のPCやスマホ内の特定の場所に user_id=12345 というデータを保存します。
2. ブラウザからサーバーへ(Cookie)
次に同じサイトのページを読み込むとき、ブラウザは保存していたデータを Cookie ヘッダーに入れて自動的に送信します。
GET /mypage HTTP/1.1
Host: example.com
Cookie: user_id=12345
これにより、サーバー側はプログラム(PHP, Python, Node.jsなど)の中で user_id を受け取り、「このリクエストはユーザー12345さんからのものだ」と判別できるのです。
具体的にどんな場面で使われている?
Cookieは、主に以下の3つの用途で利用されています。
1. セッション管理(ログイン維持など)
最も一般的な用途です。
- ログイン情報の保持
- ショッピングサイトのカート内容の保持
- フォームの入力内容を一時的に保持
2. パーソナライズ
ユーザーの設定を記憶します。
- ダークモード/ライトモードの切り替え設定
- 言語設定(日本語/英語など)
- 「次回から表示しない」というポップアップの既読判定
3. トラッキング(行動追跡)
ユーザーがどのページを見たか、どの広告をクリックしたかなどの履歴を記録します。主に広告配信やアクセス解析に利用されます。これが後述する「Cookie規制」の主な対象となっている部分です。
混同しやすい「キャッシュ」や「Web Storage」との違い
Cookieとよく似た言葉に「キャッシュ」があります。また、開発者がデータを保存する手法として「Web Storage」も存在します。これらは全く別物です。
Cookie vs キャッシュ
| 項目 | Cookie | キャッシュ |
|---|---|---|
| 目的 | ユーザーの識別・状態の保持 | ページの表示速度を上げる |
| 保存内容 | 小さなテキストデータ(IDなど) | 画像、HTML、CSSなどのファイル |
| 通信 | 毎回サーバーに送られる | サーバーに送られず、ブラウザが再利用する |
Cookie vs Web Storage (LocalStorage / SessionStorage)
HTML5から登場した「Web Storage」は、Cookieの「データ容量が小さい(約4KBまで)」という欠点を補うために作られました。
- LocalStorage: ブラウザを閉じても消えない。Cookieと違い、サーバーには自動送信されない。
- SessionStorage: タブを閉じると消える。
- Cookie: サーバーとの通信に必須。
Yachi「データをブラウザに保存したいだけ」ならLocalStorageの方が便利ですが、サーバー側で「今誰がアクセスしているか」を知る必要があるなら、依然としてCookie一択です。用途によって使い分けが必要です。

Cookieの種類:ファーストパーティとサードパーティ
昨今のプライバシー問題を理解する上で、この2つの違いを把握しておくことは不可欠です。
ファーストパーティCookie
今見ているドメイン(サイト)が発行するCookieです。
例えば、amazon.co.jp を見ているときに amazon.co.jp が発行するCookie。これはログイン維持などに必要なため、基本的には「善」とされ、規制の対象外となることが多いです。
サードパーティCookie
今見ているドメイン以外の第三者が発行するCookieです。 例えば、ニュースサイトを見ているのに、そのサイトに埋め込まれた「広告配信サーバー」が発行するCookie。
これがあると、Aサイトで見た靴の広告が、全く関係ないBサイトでも追いかけてくる、といった「リターゲティング広告」が可能になります。ユーザーの行動が複数のサイトをまたいで追跡(トラッキング)されるため、プライバシー侵害の懸念から強い規制が進んでいます。
なぜ今「Cookie規制」が叫ばれているのか?
近年、AppleのSafariやGoogleのChromeにおいて、Cookie(特にサードパーティCookie)の利用制限が厳しくなっています。理由はシンプルで、「知らないうちに自分の行動を企業に監視されている」という不快感とリスクを解消するためです。
主要な規制の動き
- ITP (Intelligent Tracking Prevention): AppleのSafariに搭載されている機能。サードパーティCookieを完全にブロックし、ファーストパーティCookieの有効期限も短縮しています。
- Privacy Sandbox: Googleが提唱している、サードパーティCookieに代わるプライバシーに配慮した広告の仕組み。ChromeでもサードパーティCookieの廃止が段階的に進められています。
- 法律による規制 (GDPR/CCPA/改正個人情報保護法): 欧州や米国、日本でも、「Cookieを使って個人を特定できる情報を取得する場合は、ユーザーの同意が必要」というルールが明文化されました。
Webサイトを訪れたときに表示される「Cookieの使用に同意しますか?」というポップアップは、これらの法律を遵守するために設置されています。
ジュニアエンジニアが押さえておくべき「セキュリティ属性」
Cookieは便利な反面、盗まれると他人に成りすまされる(セッションハイジャック)リスクがあります。開発や運用において、以下の属性設定は「必須」と言える知識です。
1. HttpOnly属性
JavaScriptからCookieにアクセスできないようにする設定です。 これをしていないと、XSS(クロスサイトスクリプティング)という攻撃を受けた際に、JavaScriptによってCookieが盗まれる危険があります。
2. Secure属性
HTTPS通信(暗号化通信)のときだけCookieを送信する設定です。 常時SSL化が当たり前の現在では、基本的には常にONにすべき設定です。通信の盗聴によるCookie漏洩を防ぎます。
3. SameSite属性
「別のサイトからのリクエスト」にCookieを含めるかどうかを制御する設定です。CSRF(クロスサイトリクエストフォージェリ)という攻撃への対策として極めて重要です。
Strict: 完全に同じサイトからのリクエスト時のみ送信。Lax: ユーザーがリンクをクリックして遷移した場合は送信される(現在のブラウザのデフォルト)。None: 外部サイトからの読み込みでも送信される(Secure属性が必須)。
Yachi昔は SameSite 属性という概念自体がありませんでしたが、現在はChromeなどのブラウザが「デフォルトでLax」として扱うようになり、セキュリティの標準が底上げされました。ただし、古いシステムをメンテナンスする際などは、この仕様変更によって「今まで動いていたCookieが送られなくなった」というトラブルが起こり得ます。

開発時にCookieで「ハマる」ポイント
実務でCookieを扱う際、よく直面する問題とその解決策を挙げておきます。
1. 容量制限(4KBの壁)
Cookieは1つにつき約4KBまでしか保存できません。また、1つのドメインに対して保存できる数にも上限(多くのブラウザで20〜50個程度)があります。 あまりに多くのデータを詰め込もうとすると、古いCookieから消えたり、そもそも保存されなかったりします。大きなデータはLocalStorageやDBに保存しましょう。
2. サブドメイン間での共有
app.example.com と blog.example.com でログイン情報を共通にしたい場合、Cookieの Domain 属性を .example.com のように設定する必要があります。これを忘れると、「ブログに移動したらログアウトされた」という事象が発生します。
3. 有効期限(ExpiresとMax-Age)
Expires: 「2025年12月31日 23:59:59まで」といった絶対時刻で指定。Max-Age: 「今から3600秒(1時間)有効」といった相対秒数で指定。
どちらも指定しない場合、ブラウザを閉じると消える「セッションクッキー」になります。ユーザーがブラウザを閉じてもログインを維持させたいなら、必ず適切な期限を設定しましょう。
4. 開発環境(localhost)での動作
Secure 属性を付けていると、開発環境がHTTP(HTTPSでない)の場合、ブラウザがCookieを保存してくれません。「コードは合っているのにCookieがセットされない」ときは、開発環境をHTTPSにするか、開発中だけSecure属性を外すといった対応が必要です。
Cookieと生成AI:ブラウザツールの裏側
最近では、ChatGPTなどのAIツールをブラウザで利用することも増えました。これらのツールも、もちろんCookieを駆使しています。
あなたがAIに投げた質問の履歴が表示され続けるのは、Cookieに保存されたセッションIDを使って、サーバー側が「あなた」を特定しているからです。また、AIとの対話セッションを保護するために、前述の HttpOnly や Secure 属性は極めて厳格に運用されています。
もしブラウザの拡張機能などでCookieを不必要に操作してしまうと、AIツールが正しく動作しなくなるだけでなく、会話内容が漏洩するリスクにもつながるため注意が必要です。
まとめ:これからのCookieとの付き合い方
Cookieは、Webの利便性を支える「発明」でしたが、現在は「プライバシー保護」とのバランスをどう取るかが問われています。
- 利用者として: 「Cookieの同意」を求められたときは、そのサイトが信頼できるか、どのような目的でデータが使われるのかを意識する。
- エンジニアとして: 利便性だけでなく、
HttpOnlyやSameSiteなどの属性を適切に使い分け、ユーザーのデータを守る。また、サードパーティCookieに頼らない新しいトラッキング手法(サーバーサイド計測など)についてもアンテナを張っておく。
「Cookie=メモ書き」という基本を忘れなければ、どんなに複雑な新仕様が出てきても、その本質を見失わずに理解できるはずです。
