Compliance & Regulationシリーズの一部
完全ガイドを読むCookie 同意実装ガイド: 法的に準拠した同意管理
2020 年以降、特に Cookie の同意違反に対して 4 億ユーロを超える GDPR 罰金が課されています。 フランス CNIL は、Cookie を拒否するよりも受け入れやすくしたとして、Google に 1 億 5,000 万ユーロ、Facebook に 6,000 万ユーロの罰金を科しました。 Cookie への同意は、もはやチェックボックスを使用するものではありません。これは、特定の技術要件を伴うプライバシー法の厳重に施行される領域です。
このガイドでは、法的要件、技術的な実装、Web サイトと Web アプリケーションの Cookie 同意の継続的な管理について説明します。
重要なポイント
- GDPR と eプライバシーに基づき、必須ではない Cookie を設定する前に同意を取得する必要があります -- 後ではありません
- 同意は与えるのと同じくらい簡単に撤回できる必要があります(ワンクリックで拒否、設定に埋め込まれない)
- Cookie ウォール (「受け入れるか離れるか」) は、ほとんどの EU 加盟国で違法です
- 2024 年 3 月以降、EEA 内の Google アナリティクスと広告には Google 同意モード v2 が必要です
地域別の法的要件
Cookie の同意要件の比較
| 要件 | EU (GDPR + eプライバシー) | 英国 (PECR + 英国 GDPR) | 米国 (CCPA/州法) | ブラジル (LGPD) | カナダ (PIPEDA) |
|---|---|---|---|---|---|
| 必須ではない Cookie に対する事前同意 | はい (オプトイン) | はい (オプトイン) | いいえ (オプトアウト モデル) | はい (オプトイン) | 黙示の同意が許可される |
| 同意バナーが必要です | はい | はい | 必須ではありません (ただし推奨されます) | はい | おすすめ |
| 詳細な選択肢 (カテゴリ別) | はい | はい | 不要 | はい | おすすめ |
| 受け入れ/拒否の同等の顕著性 | はい | はい | 該当なし | はい | 該当なし |
| クッキーウォールは許可されます | いいえ (ほとんどの州) | いいえ | 該当なし | いいえ | 該当なし |
| 同意記録が必要です | はい | はい | いいえ | はい | はい |
| 同意更新期間 | 最長 12 か月 | 最長 12 か月 | 該当なし | 指定されていません | 指定されていません |
| Cookie ポリシーが必要です | はい (詳細) | はい (詳細) | はい (追跡する場合) | はい | はい |
Cookie としてカウントされるもの
eプライバシー指令は、HTTP Cookie だけでなく、ユーザーのデバイスに情報を保存またはアクセスするすべてのテクノロジーを対象としています。
- HTTP Cookie (ファーストパーティおよびサードパーティ)
- LocalStorage と SessionStorage
- インデックス付きDB
- デバイスのフィンガープリンティング
- 追跡ピクセル/ウェブビーコン
- 追跡に使用される ETag
クッキーの分類
標準カテゴリ
| カテゴリー | 同意が必要ですか? | 例 | デフォルト状態 |
|---|---|---|---|
| 必ず必要 | いいえ | セッション Cookie、CSRF トークン、ロード バランサー Cookie、認証 | 常にオン |
| 機能/設定 | はい | 言語設定、テーマ設定、保存されたカート | オフ (同意するまで) |
| 分析 / パフォーマンス | はい | Google Analytics、Hotjar、Plausible (Cookie を使用) | オフ (同意するまで) |
| マーケティング/広告 | はい | Google 広告、Facebook Pixel、リターゲティング Cookie | オフ (同意するまで) |
Cookie を監査する
同意を実装する前に、Web サイトが設定するすべての Cookie を監査します。
// Browser console: list all cookies
document.cookie.split(';').forEach(c => console.log(c.trim()));
// Or use a scanning tool
// cookiebot.com/en/cookie-checker
// 2gdpr.com
各 Cookie を文書化します。
| クッキー名 | カテゴリー | 目的 | 期間 | ファースト/サードパーティ |
|---|---|---|---|---|
| コード0 | 必ず必要 | 認証 | セッション | ファーストパーティ |
| コード0 | 必ず必要 | トークンのリフレッシュ | 7日間 | ファーストパーティ |
| コード0 | 必ず必要 | 言語の好み | 1年 | ファーストパーティ |
| コード0 | 分析 | Google アナリティクスの訪問者 ID | 2年 | サードパーティ (Google) |
| コード0 | マーケティング | Facebook ピクセル追跡 | 90日 | サードパーティ (Facebook) |
技術的な実装
オプション 1: 同意管理プラットフォーム (CMP)
| CMP | 無料利用枠 | GDPR 準拠 | Google CMP パートナー | IAB TCF 2.2 |
|---|---|---|---|---|
| クッキーボット | 1ページまで | はい | はい | はい |
| ワントラスト | いいえ | はい | はい | はい |
| 小佐野 | 最大 5,000 人の訪問者 | はい | はい | いいえ |
| 定期 | ベーシックプラン | はい | はい | いいえ |
| クッキースクリプト | 最大 1 サイト | はい | はい | いいえ |
オプション 2: カスタム実装
完全なコントロールが必要なチームの場合:
// lib/cookie-consent.ts
type ConsentCategory = 'necessary' | 'functional' | 'analytics' | 'marketing';
interface ConsentPreferences {
necessary: true; // Always true, cannot be changed
functional: boolean;
analytics: boolean;
marketing: boolean;
timestamp: string;
version: string;
}
const CONSENT_COOKIE = 'ecosire_consent';
const CONSENT_VERSION = '2.0';
const CONSENT_DURATION = 365; // days
export function getConsent(): ConsentPreferences | null {
const cookie = document.cookie
.split(';')
.find(c => c.trim().startsWith(`${CONSENT_COOKIE}=`));
if (!cookie) return null;
try {
const prefs = JSON.parse(decodeURIComponent(cookie.split('=')[1]));
// Invalidate if consent version changed
if (prefs.version !== CONSENT_VERSION) return null;
return prefs;
} catch {
return null;
}
}
export function setConsent(preferences: Omit<ConsentPreferences, 'necessary' | 'timestamp' | 'version'>) {
const consent: ConsentPreferences = {
necessary: true,
...preferences,
timestamp: new Date().toISOString(),
version: CONSENT_VERSION,
};
const expires = new Date(Date.now() + CONSENT_DURATION * 86400000).toUTCString();
document.cookie = `${CONSENT_COOKIE}=${encodeURIComponent(JSON.stringify(consent))}; expires=${expires}; path=/; SameSite=Lax`;
// Apply consent decisions
applyConsent(consent);
return consent;
}
function applyConsent(consent: ConsentPreferences) {
if (consent.analytics) {
// Initialize Google Analytics
loadScript('https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX');
}
if (consent.marketing) {
// Initialize marketing pixels
loadScript('https://connect.facebook.net/en_US/fbevents.js');
}
if (!consent.analytics) {
// Remove analytics cookies
deleteCookie('_ga');
deleteCookie('_gid');
}
if (!consent.marketing) {
// Remove marketing cookies
deleteCookie('_fbp');
deleteCookie('_fbc');
}
}
Google 同意モード v2
2024 年 3 月以降、EEA 内の Google アナリティクスと Google 広告に必須:
<!-- Set default consent state BEFORE loading Google tags -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
// Default: deny all until user consents
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
'functionality_storage': 'denied',
'personalization_storage': 'denied',
'security_storage': 'granted', // Always granted (necessary)
'wait_for_update': 500 // Wait for CMP
});
</script>
<!-- Load Google Tag Manager -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
ユーザーが同意した場合:
// Update consent state when user interacts with banner
function updateGoogleConsent(preferences) {
gtag('consent', 'update', {
'ad_storage': preferences.marketing ? 'granted' : 'denied',
'ad_user_data': preferences.marketing ? 'granted' : 'denied',
'ad_personalization': preferences.marketing ? 'granted' : 'denied',
'analytics_storage': preferences.analytics ? 'granted' : 'denied',
'functionality_storage': preferences.functional ? 'granted' : 'denied',
'personalization_storage': preferences.functional ? 'granted' : 'denied',
});
}
同意バナーのデザイン要件
EU の法的要件
- バナーは必須でない Cookie が設定される前に表示されます
- 「すべて受け入れる」ボタンと「すべて拒否する」ボタンは視覚的に同じように目立つようになります。
- 詳細なカテゴリ選択が可能 (全か無かだけではありません)
- 必須ではないカテゴリの事前チェックボックスはありません
- 各カテゴリの明確で平易な説明
- 完全な Cookie ポリシーへのリンク
- いつでも同意の撤回にアクセス可能 (フッターリンクなど)
- Cookie ウォールなし (同意せずにサイトを使用できる必要があります)
- タイムスタンプとバージョンとともに記録された同意
アクセシビリティ要件
- バナーはキーボードで操作可能です
- スクリーン リーダーとの互換性 (ARIA ラベル)
- 十分な色のコントラスト
- 重要なコンテンツを永久にブロックしません
Cookie を使用しない分析の代替手段
Cookie 同意バナーを完全に回避したい Web サイトの場合:
| ツール | クッキー | GDPR の同意が必要 | データの場所 | 価格 |
|---|---|---|---|---|
| もっともらしい | なし | いいえ | EU | $9/月 |
| ファゾム | なし | いいえ | EU/米国/カナダ | $14/月 |
| うま味 | なし | いいえ | 自己ホスト型 | 無料 |
| シンプルな分析 | なし | いいえ | EU | $9/月 |
| Piwik (Cookie なしの構成) | オプション | いいえ (Cookie なし) | 自己ホスト型 | 無料 |
Cookie を使用しない分析を使用すると、分析の同意が不要になり、マーケティング Cookie (使用されている場合) のみをカバーする同意バナーが簡素化されます。
よくある質問
必要な Cookie のみを使用する場合、Cookie バナーは必要ですか?
いいえ。厳密に必要な Cookie (認証、CSRF、負荷分散) のみを使用する場合、同意は必要なく、バナーも必要ありません。ただし、これらの Cookie をプライバシー ポリシーで開示する必要があります。分析 (Google Analytics) またはサードパーティの追跡を追加すると、EU では同意バナーが法的に義務付けられます。
「ソフト オプトイン」(閲覧を継続 = 同意)を使用することは合法ですか?
いいえ、GDPR に基づくものではありません。欧州データ保護委員会は、継続的な閲覧、スクロール、または同様の受動的なアクションは有効な同意とはみなされないと明確に述べています。同意は、「同意する」または同様のボタンをクリックする、明確な積極的な行動である必要があります。ソフト オプトインは、Planet49 で非準拠と判断されました (CJEU、2019)。
シングルページ アプリケーションの同意はどのように処理すればよいですか?
SPA の場合は、最初のページ読み込み時とルート変更ごとに同意状態を確認します。同意が得られていない場合は、追跡スクリプトを初期化しないでください。同意の設定をファーストパーティ Cookie に保存します (これ自体、同意を記憶するために必ず必要です)。ユーザーが同意すると、ページのリロードを必要とせずに追跡スクリプトを初期化します。
Odoo Web サイトには Cookie の同意が必要ですか?
Odoo Web サイトが EU 訪問者にサービスを提供し、分析、マーケティング ピクセル、または機能的 Cookie を必要以上に使用している場合は、「はい」です。 Odoo には基本的な Cookie に関する通知がありますが、GDPR 基準を満たしていません。 Cookiebot などの適切な CMP を実装するか、カスタム ソリューションを構築します。 ECOSIRE は、GDPR 準拠の Cookie 同意を含む Odoo Web サイト サービス を提供します。
次に何が起こるか
Cookie の同意は、Web プライバシー コンプライアンスの最も目に見える側面です。アプリケーション アーキテクチャには プライバシー バイ デザイン、完全なデータ プログラムには データ ガバナンス、より広範なコンプライアンスには サイバーセキュリティ規制 を組み合わせます。
Cookie 同意の実装およびプライバシー コンプライアンスのコンサルティングについては、ECOSIRE にお問い合わせください。
ECOSIRE が発行 -- 企業がユーザーに信頼されるプライバシー コンプライアンスの実装を支援します。
執筆者
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
関連記事
化学産業向け ERP: 安全性、コンプライアンス、バッチ処理
ERP システムが化学会社の SDS 文書、REACH および GHS 準拠、バッチ処理、品質管理、危険物輸送、配合管理をどのように管理するか。
輸出入取引用ERP: 多通貨、物流、コンプライアンス
ERP システムが商社の信用状、税関書類、インコタームズ、多通貨損益計算書、コンテナ追跡、関税計算をどのように処理するか。
ERP を使用した持続可能性と ESG レポート: コンプライアンス ガイド 2026
ERP システムを使用して、2026 年の ESG 報告コンプライアンスをナビゲートします。 CSRD、GRI、SASB、スコープ 1/2/3 排出量、炭素追跡、Odoo の持続可能性をカバーします。
Compliance & Regulationのその他の記事
電子商取引のサイバーセキュリティ: 2026 年のビジネスを守る
2026 年の完全な e コマース サイバーセキュリティ ガイド。PCI DSS 4.0、WAF セットアップ、ボット保護、支払い詐欺防止、セキュリティ ヘッダー、およびインシデント対応。
化学産業向け ERP: 安全性、コンプライアンス、バッチ処理
ERP システムが化学会社の SDS 文書、REACH および GHS 準拠、バッチ処理、品質管理、危険物輸送、配合管理をどのように管理するか。
輸出入取引用ERP: 多通貨、物流、コンプライアンス
ERP システムが商社の信用状、税関書類、インコタームズ、多通貨損益計算書、コンテナ追跡、関税計算をどのように処理するか。
ERP を使用した持続可能性と ESG レポート: コンプライアンス ガイド 2026
ERP システムを使用して、2026 年の ESG 報告コンプライアンスをナビゲートします。 CSRD、GRI、SASB、スコープ 1/2/3 排出量、炭素追跡、Odoo の持続可能性をカバーします。
監査準備チェックリスト: 書籍の準備をする
財務諸表の準備状況、裏付け文書、内部統制文書、監査人の PBC リスト、一般的な監査結果を網羅した完全な監査準備チェックリスト。
電子商取引ビジネスのためのオーストラリア GST ガイド
ATO 登録、75,000 ドルの基準値、少額輸入、BAS 申請、デジタル サービスの GST を網羅した、e コマース ビジネス向けのオーストラリア GST 完全ガイド。