Skip to content

feat: Cookieポリシー同意取得機能を追加 (#6822)#6844

Open
ttokoro20240902 wants to merge 8 commits into
4.4from
feature/cookie-consent
Open

feat: Cookieポリシー同意取得機能を追加 (#6822)#6844
ttokoro20240902 wants to merge 8 commits into
4.4from
feature/cookie-consent

Conversation

@ttokoro20240902

@ttokoro20240902 ttokoro20240902 commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

概要

Issue #6822 の実装。EC サイト利用者から、アクセス解析等のための Cookie 利用(第三者提供)についてオプトイン同意を取得する機能をコア(src/Eccube)に追加します。

同意状態の真実は Cookie に一元化し、サーバは Cookie の読み書きと操作記録(ログ)のみを担う DB 非依存の軽量構成です。フルページキャッシュ/CDN 配下でも破綻しないよう、同意状態に依存する出し分けはすべてクライアント側で行います。

Closes #6822

実装内容

フロント

  • 同意バナー(全フロントページ下部・常時レンダリング+JS で表示制御)/クッキー設定ページ /cookie-consent(ログイン不要・会員/ゲスト両対応)/クッキーポリシーページ /help/cookie-policy(汎用ひな型)
  • フッターに「クッキー設定」リンク(機能 ON 時のみ)— 同意後の再設定導線

管理画面

  • 「店舗基本情報」で機能 ON/OFF(dtb_base_info.option_cookie_consent BOOLEAN, default true)+ヘルプマーク(ツールチップ)
  • OFF 時はバナー非表示・設定ページはトップへリダイレクト

アクセス解析(GA)連動

  • コア標準 GA ブロックを同意連動化。機能 ON は同意済みのときのみ gtag を読み込み(発火可否はクライアント側ゲート=キャッシュ安全)、機能 OFF は従来どおり無条件読込(後方互換)、ga_id 未設定は一切出力なし
  • 拡張ポイントを公開: サーバ側 is_cookie_consent_accepted()、クライアント側 DOM イベント eccube:cookie-consent:changedwindow.ECCUBE.cookieConsent.getStatus()コア標準 GA ローダー自身もこの公開フックを購読(コア改変なしで他タグを連動可能)

バックエンド/記録

  • CookieConsentService(Cookie 読み書き・判定)/CookieConsentLogServiceMonolog 専用チャンネル cookie_consent へ記録・ベストエフォート)/CookieConsentController(設定・ポリシー表示、更新 API)/CookieConsentExtension(Twig 判定関数)
  • 専用 Monolog ハンドラ: fingers_crossed 非経由・rotating_filelevel: infomax_files: 365(prod/dev/codeception)。prod で info 証跡が消えない設計
  • 同意 Cookie は更新 API の Set-Cookie のみで設定(JS 側では Cookie を書かない)。Secure 等の属性は Request::isSecure() に統一。CSRF 検証必須

テスト

  • PHPUnit(35 tests / 94 assertions): CookieConsentService / CookieConsentLogService / CookieConsentExtension / CookieConsentController(会員ログイン経路・CSRF 不正値 400 含む)
  • E2E(Playwright) front-cookie-consent.spec.ts(matrix front-cookie-consent 登録): バナー同意/拒否/閉じる・再表示、設定/ポリシーページ、フッター導線、管理 ON/OFF、GA 連動(ON 未同意=未読込/同意でリロードなし読込/拒否=未読込/OFF=無条件/ga_id 未設定=出力なし)、CSRF 不正 403
  • QA: PHPStan level 6(エラーなし)/PHP-CS-Fixer(PSR-12)/Rector いずれも通過
  • 受入基準(Issue「8. 受入基準」)は Playwright MCP で実機検証済み

補足

  • option_cookie_consent は単純なカラム追加のため Entity 属性+doctrine:schema:update で反映(マイグレーション不要。GA 機能 PR Googleアナリティクス機能を追加 #4912 と同方針)。新規インストールは LoadDataFixturesEccubeCommand の INSERT で DB default(true)=機能 ON
  • GA 以外のタグの個別連動・カテゴリ別同意・撤回時の即時停止・同意記録の DB 永続化・運用ドキュメント整備は Issue §6 のとおりスコープ外

🤖 Generated with Claude Code

Summary by CodeRabbit

リリースノート

  • New Features
    • クッキー同意バナー/クッキー設定ページ/クッキーポリシー画面を追加し、承諾・拒否・クローズに加えて同意状態の保存・反映が可能になりました。
    • 管理画面のON/OFFに応じてフロント表示が切り替わり、Google Analytics の読み込みも同意状況に連動します。
    • フッターに「Cookie設定」への導線を追加しました。
  • Tests
    • Cookie同意の主要シナリオをE2E/ユニットテストで追加・拡充し、実行範囲も広げました。

ttokoro20240902 and others added 2 commits June 17, 2026 17:23
ECサイト利用者から第三者提供(アクセス解析等)についてオプトイン同意を取得する機能を
コアに追加する。同意状態はCookieで管理し、サーバは読み書きと記録のみを担うDB非依存の構成。
フルページキャッシュ/CDN配下でも破綻しないよう、同意状態に依存する出し分けはクライアント側で行う。

- 同意バナー(全フロントページ)・設定ページ(/cookie-consent)・ポリシーページ(/help/cookie-policy)
- 管理画面「店舗基本情報」で機能ON/OFF(option_cookie_consent)+ツールチップ
- コア標準GAブロックを同意連動化(ON=同意時のみ読込/OFF=従来どおり無条件・後方互換)。
  発火可否はクライアント側ゲートでキャッシュ安全
- 拡張ポイント公開: Twig is_cookie_consent_accepted()、
  JSイベント eccube:cookie-consent:changed + getStatus()(コア標準GAローダーも購読)
- 同意操作をMonolog専用チャンネル cookie_consent へ記録(info/rotating_file/365日・
  fingers_crossed非経由)
- 同意CookieはサーバSet-Cookieに一本化(JS側では書き込まない)
- フッターに「クッキー設定」リンク(機能ON時のみ)
- テスト: PHPUnit(Service/LogService/Extension/Controller) + E2E(Playwright) front-cookie-consent

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 19, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 51164d72-c7f0-4748-8e59-435b82c25bae

📥 Commits

Reviewing files that changed from the base of the PR and between d4372d0 and 9f626fd.

📒 Files selected for processing (1)
  • tests/Eccube/Tests/Web/CookieConsentControllerTest.php
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/Eccube/Tests/Web/CookieConsentControllerTest.php

📝 Walkthrough

Walkthrough

EC-CUBE 4.4にCookie同意取得機能を実装。バナー表示・設定ページ・ポリシーページの新規UI、管理画面ON/OFFトグル、CSRFトークン検証付き同意更新API、専用Monologチャンネル、GA遅延ロード連携、PHPUnit/Playwright E2Eテスト一式を完備。

Changes

Cookie同意取得機能

Layer / File(s) Summary
CookieConsentService / LogService コア実装
src/Eccube/Service/CookieConsentService.php, src/Eccube/Service/CookieConsentLogService.php, tests/Eccube/Tests/Service/CookieConsent*Test.php
CookieConsentServiceがCookie名・ステータス定数・365日有効期限・同意状態CRUD APIを提供。CookieConsentLogServiceがcookie_consentチャンネルへのベストエフォートログ出力とログデータ構築を提供。両者のユニットテストで正常系・異常系を検証。
BaseInfoエンティティ拡張と管理フォーム
src/Eccube/Entity/BaseInfo.php, src/Eccube/Form/Type/Admin/ShopMasterType.php, src/Eccube/Resource/template/admin/Setting/Shop/shop_master.twig
BaseInfooption_cookie_consent(BOOLEANデフォルトfalse)を追加。管理フォームにトグルフィールド、管理Twigに設定カードを追加。
CookieConsentTwig拡張
src/Eccube/Twig/Extension/CookieConsentExtension.php, tests/Eccube/Tests/Twig/Extension/CookieConsentExtensionTest.php
is_cookie_consent_given/is_cookie_consent_accepted/get_cookie_consent_statusをTwig関数として登録。RequestStack未取得時はfalse/nullにフォールバック。テストで各分岐を検証。
CookieConsentController (GET/POST)
src/Eccube/Controller/CookieConsentController.php, tests/Eccube/Tests/Web/CookieConsentControllerTest.php
GET /cookie-consentは機能OFF時homepageリダイレクト。GET /help/cookie-policyでポリシーページ表示。POST /cookie_consent/updateはCSRF検証・ステータス検証・ログ保存・Set-Cookie付きJSONレスポンスを実装。Webテストで各エンドポイント・入力検証・リダイレクトを検証。
Monologチャンネル設定
app/config/eccube/packages/monolog.yml, app/config/eccube/packages/*/monolog.yml
全環境でcookie_consentチャンネルをmain/consoleから除外し、専用rotating_fileハンドラ(info・365日ローテ)を追加。
cookie_consent.js クライアント実装
html/template/default/assets/js/cookie_consent.js
window.ECCUBE.cookieConsent.getStatus()でCookieから同意状態取得。saveConsentStatus()がCSRFトークン付きPOSTを実行し成功時にeccube:cookie-consent:changedイベントを発火。DOM Readyでバナー表示判定とボタンハンドラを登録。
Google Analytics 同意連動
src/Eccube/Resource/template/default/Block/google_analytics.twig
optionCookieConsentON時はGAを遅延ロードし、同意イベントまたは初回accepted確認で動的挿入。OFF時は従来通り即時ロード。
Twigテンプレート・CSS/SCSS UI
src/Eccube/Resource/template/default/Block/cookie_consent_banner.twig, src/Eccube/Resource/template/default/CookieConsent/cookie_consent.twig, src/Eccube/Resource/template/default/CookieConsent/cookie_policy.twig, src/Eccube/Resource/template/default/Block/footer.twig, src/Eccube/Resource/template/default/default_frame.twig, html/template/default/assets/scss/component/_10.1.cookie_consent.scss, html/template/default/assets/css/style.css
同意バナー・設定ページ・ポリシーページのTwigテンプレートを追加。フッターに条件付きCookie設定リンク。default_frame.twigにバナーincludeとJS読込。SCSS/コンパイル済みCSSにバナー・設定・ポリシーのスタイルを追加。
翻訳キー追加 (ja/en)
src/Eccube/Resource/locale/messages.ja.yaml, src/Eccube/Resource/locale/messages.en.yaml
フッターリンク・管理画面ラベル・ツールチップ・バナー文言・設定ページ文言・エラー文言・ポリシーページ全セクション文言をja/enで追加。
Playwright E2Eテスト
e2e/tests/front-cookie-consent.spec.ts, .github/workflows/e2e-test.yml
バナー表示・同意/拒否/閉じる動作・CSRF拒否・管理画面ON/OFF連動・GA同意連動をPlaywrightで検証。CIマトリクスにfront-cookie-consentを追加。

Sequence Diagram(s)

sequenceDiagram
  participant User as ユーザー(ブラウザ)
  participant BannerJS as cookie_consent.js
  participant Controller as CookieConsentController
  participant LogService as CookieConsentLogService
  participant CookieService as CookieConsentService

  User->>BannerJS: ページロード (DOMReady)
  BannerJS->>BannerJS: getStatus() → eccube_cookie_consent Cookie確認
  BannerJS-->>User: 未設定ならバナー表示
  User->>BannerJS: 同意ボタンクリック
  BannerJS->>Controller: POST /cookie_consent/update (consent_status=accepted, _token)
  Controller->>Controller: CSRF検証 (403 if invalid)
  Controller->>Controller: consent_status値検証 (400 if invalid)
  Controller->>LogService: buildLogData() → saveLog()
  Controller->>CookieService: saveConsentStatus(response, accepted, request)
  CookieService-->>Controller: Set-Cookie: eccube_cookie_consent=accepted
  Controller-->>BannerJS: JSON {success: true}
  BannerJS->>BannerJS: dispatchChanged(accepted) → eccube:cookie-consent:changed イベント
  BannerJS-->>User: バナー非表示
Loading
sequenceDiagram
  participant Page as フロントページ
  participant GATemplate as google_analytics.twig
  participant BannerJS as cookie_consent.js
  participant GoogleGA as googletagmanager.com

  Page->>GATemplate: ページレンダリング
  alt optionCookieConsent = OFF
    GATemplate-->>Page: gtag.js 即時ロード
    Page->>GoogleGA: スクリプト読み込み
  else optionCookieConsent = ON
    GATemplate-->>Page: loadGoogleAnalytics関数を定義
    Page->>BannerJS: getStatus() → accepted?
    alt 同意済み (accepted)
      BannerJS->>GoogleGA: loadGoogleAnalytics() → 動的スクリプト挿入
    else 未同意/拒否
      Note over Page: GA読み込みなし
    end
    Note over BannerJS: eccube:cookie-consent:changed(accepted)受信時
    BannerJS->>GoogleGA: loadGoogleAnalytics() → 動的スクリプト挿入
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • EC-CUBE/ec-cube#6829: .github/workflows/e2e-test.ymlのPlaywright matrix.suitefront-*スペックファイルを追加する同様の変更を含む。

Poem

🐰 クッキーの森で、うさぎが跳ねる
「同意」ボタン押したら、バナー消えてく
GTAG の読み込み、慎重に待って
ポリシーページ、ちゃんと書いたよ
ログも残して、365日分 🍪
CSRF トークンで、守りは万全!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed プルリクエストのタイトルは「feat: Cookieポリシー同意取得機能を追加 (#6822)」で、変更内容の主要なポイントを正確に反映しており、簡潔かつ明確です。
Linked Issues check ✅ Passed 実装内容は Issue #6822 の全ての主要機能目標(バナー表示、設定ページ、ポリシーページ、管理画面制御、GA連携、ログ記録、CSRF保護)を満たしており、要件に完全に適合しています。
Out of Scope Changes check ✅ Passed 全ての変更が Cookie 同意機能の実装に直接関連しており、カテゴリベースの同意やデータベース記録などのスコープ外要件は含まれていません。
Docstring Coverage ✅ Passed Docstring coverage is 82.54% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/cookie-consent

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
src/Eccube/Service/CookieConsentLogService.php (1)

82-101: 💤 Low value

スタイルの一貫性: \DateTime のインポートを検討

Line 92 で new \DateTime() を使用していますが、ファイル冒頭で use DateTime; としてインポートすることでコードの一貫性が向上します(PSR-12のベストプラクティス)。現状でも動作に問題はありません。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Eccube/Service/CookieConsentLogService.php` around lines 82 - 101, The
buildLogData method uses the fully qualified class name \DateTime instead of
importing DateTime at the top of the file. Add a use statement for DateTime at
the beginning of the file with other imports, then replace the new \DateTime()
instantiation in the buildLogData method with new DateTime() to follow PSR-12
style conventions and improve code consistency throughout the
CookieConsentLogService.php class.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@html/template/default/assets/js/cookie_consent.js`:
- Around line 55-57: The getStatus() function currently returns the decoded
cookie value without validating it, allowing invalid values to be returned which
can cause unexpected behavior in the banner display logic at lines 73-76. Modify
the getStatus() function to validate that the decoded cookie value matches one
of the valid consent statuses (such as 'accepted' or 'rejected'), and only
return the value if it is valid; otherwise return null to treat invalid cookie
values as unset. This ensures the banner display logic only responds to
legitimate consent states.

In `@html/template/default/assets/scss/style.scss`:
- Line 43: The `@import` statement for "component/10.1.cookie_consent" violates
the Stylelint no-invalid-position-at-import-rule requirement because it is
positioned after CSS rule definitions. Move all `@import` statements to the
beginning of the file, before any CSS rules (such as body, a, pre, and p
selectors). Ensure the file structure has all `@import` statements at the top,
followed by CSS rule definitions, to comply with SCSS standards and Stylelint
rules.

In `@src/Eccube/Resource/template/default/CookieConsent/cookie_consent.twig`:
- Around line 112-127: The code checks if
window.ECCUBE.cookieConsent.saveConsentStatus exists on line 112 but lacks an
else clause to handle the case when this function is undefined or not loaded.
When the save button is clicked and the API is unavailable, users receive no
feedback. Add an else block after the if statement that calls showMessage with
an appropriate error message (similar to the existing error handling in the
callback) to inform users when the consent saving API is not available.

In `@src/Eccube/Service/CookieConsentService.php`:
- Around line 93-111: The `saveConsentStatus()` method lacks defensive
validation of the `$status` parameter and contains a magic number. Add
validation at the start of the method to ensure `$status` is either
`STATUS_ACCEPTED` or `STATUS_REJECTED`, throwing an exception or logging an
error if invalid. Additionally, extract the hardcoded value `86400` (seconds per
day) as a class constant or replace it with a descriptive constant reference to
make the calculation intent explicit and maintainable.

---

Nitpick comments:
In `@src/Eccube/Service/CookieConsentLogService.php`:
- Around line 82-101: The buildLogData method uses the fully qualified class
name \DateTime instead of importing DateTime at the top of the file. Add a use
statement for DateTime at the beginning of the file with other imports, then
replace the new \DateTime() instantiation in the buildLogData method with new
DateTime() to follow PSR-12 style conventions and improve code consistency
throughout the CookieConsentLogService.php class.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 975be2bd-cd88-4b3f-9dec-ee2cc413b718

📥 Commits

Reviewing files that changed from the base of the PR and between 5777408 and cded203.

📒 Files selected for processing (29)
  • .github/workflows/e2e-test.yml
  • app/config/eccube/packages/codeception/monolog.yml
  • app/config/eccube/packages/dev/monolog.yml
  • app/config/eccube/packages/monolog.yml
  • app/config/eccube/packages/prod/monolog.yml
  • e2e/tests/front-cookie-consent.spec.ts
  • html/template/default/assets/css/style.css
  • html/template/default/assets/js/cookie_consent.js
  • html/template/default/assets/scss/component/_10.1.cookie_consent.scss
  • html/template/default/assets/scss/style.scss
  • src/Eccube/Controller/CookieConsentController.php
  • src/Eccube/Entity/BaseInfo.php
  • src/Eccube/Form/Type/Admin/ShopMasterType.php
  • src/Eccube/Resource/locale/messages.en.yaml
  • src/Eccube/Resource/locale/messages.ja.yaml
  • src/Eccube/Resource/template/admin/Setting/Shop/shop_master.twig
  • src/Eccube/Resource/template/default/Block/cookie_consent_banner.twig
  • src/Eccube/Resource/template/default/Block/footer.twig
  • src/Eccube/Resource/template/default/Block/google_analytics.twig
  • src/Eccube/Resource/template/default/CookieConsent/cookie_consent.twig
  • src/Eccube/Resource/template/default/CookieConsent/cookie_policy.twig
  • src/Eccube/Resource/template/default/default_frame.twig
  • src/Eccube/Service/CookieConsentLogService.php
  • src/Eccube/Service/CookieConsentService.php
  • src/Eccube/Twig/Extension/CookieConsentExtension.php
  • tests/Eccube/Tests/Service/CookieConsentLogServiceTest.php
  • tests/Eccube/Tests/Service/CookieConsentServiceTest.php
  • tests/Eccube/Tests/Twig/Extension/CookieConsentExtensionTest.php
  • tests/Eccube/Tests/Web/CookieConsentControllerTest.php

Comment thread html/template/default/assets/js/cookie_consent.js Outdated
Comment thread html/template/default/assets/scss/style.scss
Comment thread src/Eccube/Service/CookieConsentService.php
ttokoro20240902 and others added 3 commits June 19, 2026 18:15
- アップグレード時はoption_cookie_consentをデフォルトOFF(後方互換)、
  新規インストールのみインストーラで明示的にON
- CSRF失敗時の到達不能なJSON分岐を削除しisTokenValid()単独呼び出しに統一
- 機能OFF時はupdate APIを404に(index()のリダイレクトと挙動を統一)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- getStatus()でaccepted/rejected以外の値はnull(未設定)扱いに正規化し、
  改ざん時もバナー再表示・GA非ロードが破綻しないようにする
- 設定ページで保存API未ロード時にelseでエラー表示し無反応を防ぐ
- Cookie有効期限計算の86400をSECONDS_PER_DAY定数に切り出し

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
GA静的タグ前提の既存テスト(TopControllerTest/admin-basicinfo)が
Cookie同意ON既定で破損していたため、新規インストールも含め既定OFFに統一する
(既存テストは無修正で通過。RateLimiter等の失敗はリトライ時のキャッシュ汚染による二次被害)。

- 新規インストールの option_cookie_consent=true 明示INSERTを撤回し既定OFFに統一
  (Entity default false のまま。店舗が管理画面でONにするまで一切動作しない後方互換)
- BaseInfoのコメントをオプトイン方針に更新
- E2E front-cookie-consent:
  - ToggleSwitchの操作をlabelクリック方式へ(input非表示でcheck/uncheckが失敗する問題)
  - 既定OFF化に伴いバナー検証ブロックにbeforeAllで機能ON・afterAllで既定OFF復帰を追加
  - 設定ページ保存のレースをexpect.pollで解消
  - 各afterAllを既定(OFF)復帰へ修正

ローカルE2E(front-cookie-consent 15件)通過を確認。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ttokoro20240902 and others added 3 commits June 20, 2026 08:33
機能OFF時404テストのassertSameに失敗時デバッグ用のレスポンス内容を追加
(AssertSameResponseCodeWithDebugContentsRector。同ファイルの他assertと統一)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 23, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 95.83333% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.97%. Comparing base (14fd473) to head (6581f92).

Files with missing lines Patch % Lines
src/Eccube/Service/CookieConsentLogService.php 73.33% 4 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##              4.4    #6844      +/-   ##
==========================================
+ Coverage   74.78%   74.97%   +0.19%     
==========================================
  Files         463      467       +4     
  Lines       24029    24125      +96     
==========================================
+ Hits        17970    18088     +118     
+ Misses       6059     6037      -22     
Flag Coverage Δ
Unit 74.97% <95.83%> (+0.19%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[4.4] Cookieポリシー同意取得機能 — 実装設計

1 participant