EUウェブコンプライアンス
このスキルは、AIエージェントがEUの5つの義務(アクセシビリティ、データ保護とトラッカー、AI法、ウェブセキュリティ、消費者法・情報法)に関してウェブサイトのコードを記述・検証するためのものです。プロジェクトに関係する義務を特定し、初期段階からそれに準拠して構築し、自動チェックを実行し、人間がまだ検証すべき項目をリストアップします。このスキルはサイトを法的に準拠させるものではなく、アクセシビリティ監査、データ保護責任者、弁護士に代わるものではありません。一部の基準は人間による判断を必要とし、一部の質問は法的な資格を必要とします。適用日、有効なバージョン、閾値、罰則は一箇所、references/regulatory-status.mdにのみ記載されています。そちらを参照してください。
パス. このスキル内のすべてのパスは、このSKILL.mdを含むフォルダを基準とし、コマンド内では<skill>と記述します。コマンドはユーザーのプロジェクトルートから実行し、compliance/ディレクトリがそこに作成されるようにします。例:python <skill>/scripts/applicability.py compliance/profile.json。スクリプトは自身のデータを自身の隣に見つけます。Python 3.8+があれば.pyスクリプトは動作します。ブラウザチェック(.mjs)にはNode 20+と、<skill>内で一度npm installを実行しておく必要があります(ブラウザが見つからない場合は、同ディレクトリでnpx playwright install chromiumも実行してください)。
絶対ルール
このスキルを使用する人は弁護士であることは稀であり、あなたが書いた内容を信頼します。誤った日付や早計な「準拠」の表明は、ユーザーを制裁のリスクにさらしたり、障害を持つ人が利用できないサービスを生み出したりする可能性があります。したがって、以下のルールを厳守してください:
- 記憶による規制情報は使用しないこと。 日付、条文番号、閾値、標準バージョン、暗号値、基準タイトル、法的ラベルは、このスキルのファイルから取得します。これらのテキストに関するあなたの記憶は、これらのファイルよりも古く、信頼性が低くなります。2026年にいくつかの日付が変更されました。事実がスキル内にない場合は、検証されていないと述べ、自分で提供しないでください。
- 疑わしい場合は「未テスト(NT)」とし、決して「準拠」としないこと。 実行できなかったチェック、読み込めなかったページ、人間の判断が必要な基準は、NTとします。
- サイト、企業、サービスが「準拠している」と決して書かないこと。 判定は単一の基準に適用されます。エンドユーザー向けのすべての成果物(レポート、声明、ポリシー、通知)には、AIの支援により作成され、監査や法的助言ではないと明記します。
- 法的要件、勧告、ベストプラクティスを明確に区別すること。
[best practice]タグが付いたルールは、決して義務として提示してはなりません。規制当局の勧告は法律ではありません。マトリックスの行to-confirmは「適用外」ではありません。想定または欠落した回答に基づいて、免除(零細企業、非専門家、オンラインプラットフォームではない)に依存してはなりません。 - 適用するすべてのルールには、そのソースを付記すること。 変更を説明、報告、または正当化する際には、参照ファイルに記載されているタグを添えてください:
[WCAG 2.4.7]、[RGAA 11.1]、[GDPR art. 7(3)]、[CNIL guidelines § 27](CNILが必須とみなすもの)、または[CNIL recommendation § 2.3](推奨事項)、[AI Act art. 50(1)]、[ANSSI WEB R14]、[OWASP A03]、[CRD 11a]。(to confirm)で終わるタグは、regulatory-status.mdにまだ記録されていない条文を引用しています。そのルールを検証済みの義務として提示しないでください。コード自体にタグを付ける必要はありません。 - 以下の場合は作業を中止し、専門家に相談すること: references/scoping/out-of-scope.mdに記載されている禁止されたAI慣行の疑いがある場合、人について決定を下すAI(高リスクの可能性がある場合)、健康関連データやその他の特別なカテゴリのデータ、未成年者、規制対象セクター、対象国がカバーされていない場合。該当する機能の構築は行わず、残りの部分については作業を続け、回答の冒頭でその旨を明記してください。
- 事業者のデータを決して捏造しないこと: 会社名、登録番号やVAT番号、住所、ホスト情報、データ保護責任者、調停者、法的根拠、保存期間、処理者、移転の保護措置。テンプレートの
[placeholder]はそのまま表示し、ユーザーにリストアップしてください。もっともらしい捏造された値は、明らかな抜けがあるよりも悪質です。なぜなら、誰もそれを探そうとしないからです。 - アクセシブルに設計すること。 このスキルが追加する要素(同意バナー、AI通知とラベル、撤回ボタン、注文ステップ、リーガルページ)も含みます。これらは他のページコンテンツと同じです。アクセシブルでないクッキーバナーは、キーボードやスクリーンリーダーのユーザーに対してサイト全体をブロックすることになります。
- 同意なしにトラッカーを使用しないこと。 厳密に免除されているものを除き、訪問者のデバイスに何も読み書きしてはならず、また識別子を含むサードパーティへのリクエストは、訪問者が選択する前にページから送信されてはなりません。拒否は受け入れと同程度に簡単でなければなりません。
- 検証されなかったことをユーザーに伝えること: NTポイント、想定されたプロファイルの回答、対象国について検証されなかった国内ルール、人間に委ねられた手動チェック。これらは脚注ではなく、回答本文に記載してください。
5つのモード
状況に応じてモードを選択してください。ほとんどのセッションはビルド(Build)です。新しいプロジェクトでは最初にスコープ(Scope)を実行し、作業の区切りには検証(Verify)で締めくくります。
1. スコープ(Scope):新しいプロジェクトにルールを適用する前
- 使用タイミング: プロジェクトに
compliance/profile.jsonがない場合。または、サイトが販売を開始した、アカウント、AI機能、ユーザーコンテンツを追加した、新しい国を対象にした場合。またはユーザーが自分に何が適用されるかを尋ねた場合。 - 読むもの: references/scoping/questionnaire.md。その後、マトリックスがスキルの範囲を超えるケースで終了した場合は、references/scoping/out-of-scope.mdも読むこと。
- 実行すること: リポジトリを読み、シグナル(スタック、支払い、トラッカー、フォーム、AIコール、言語)を確認します。その後、残りの質問を1つのメッセージで、最大10個まで、ユーザーの言語で尋ねます。リクエストやブリーフが述べていることは
statedとして記録し、そこから明らかに導き出せることはinferredとして、その理由とともに記録します(市役所は販売を行わない、すべての機能を列挙しAI機能がないブリーフにはAI機能がない)。真に不明で重要なものだけが、assumedを根拠とする保護的な仮定を得ます。コードの沈黙から「ノー」を推測してはなりません。記述または推測された事実については専門家に相談し、想定された回答については、そのリスクが正当化される場合にのみ相談してください。 - 実行するコマンド:
python <skill>/scripts/applicability.py compliance/profile.json --output-dir compliance。サイトにAI機能がある場合は、python <skill>/scripts/ai_act_classify.py compliance/profile.jsonも実行します。 - 成果物:
compliance/profile.json(スキーマ:schemas/profile.schema.json、例:templates/profile.example.json)とcompliance/applicability-matrix.md。マトリックスを3つのグループ(この事業者に必須、推奨、確認が必要)に要約します。
プロファイルのないプロジェクトでの小さな変更は、最初に完全な質問票を必要としません。普遍的なベースライン(アクセシビリティ、セキュリティ、同意なしのトラッカーなし)を適用し、タスクを実行し、最後にスコープ(Scope)を提案します。
2. ビルド(Build):コード作成中のデフォルト
- 使用タイミング: マークアップ、スタイル、スクリプト、フォーム、サードパーティスクリプト、AI機能、サーバーまたはホスティング設定、またはリーガルページを作成または変更する場合。
- 読むもの: 下のタスクテーブルが現在のタスクに対して指定しているファイルのみ(通常は1~3ファイル)。フォルダ全体を読み込まないでください。各ファイルは独自の「使用方法」で始まり、必要に応じて次のファイルを指示します。
- 実行すること: 最初からルールに従ってコードを記述します。ローンチ後に修正するよりもコストがはるかに低くなります。templates/の参照コンポーネント(同意バナー、AI通知とラベル、撤回機能、注文ステップ、値下げ表示)を新しいものより優先して使用し、プロジェクトのスタックに翻訳します。ルールはHTML、CSS、HTTPの用語で記述されているため、使用中のフレームワークのコンポーネントに適用します。法的ラベル(注文ボタン、撤回機能)は、サイトの言語の参照ファイルから取得します。文言は各国の法律で固定されているため、自分で翻訳しないでください。
- 成果物: 準拠したコード。レポートは不要です。回答では、適用したルールをタグとともに示し、できなかったこと(不足している事業者データ、所有者のための決定)を記載します。完成したサイトを引き渡すときは、モード4の最後にある「クレジット」を参照してください。
3. 検証(Verify):コミット前、リリース前、またはリクエストに応じて
- 使用タイミング: ページ、スクリプト、またはヘッダーに影響を与えるコミットまたはリリースの前。ユーザーが監査またはチェックをリクエストした場合。
- 実行するコマンド:
node <skill>/scripts/check-all.mjs <site folder or URL> --project .(オプション:--profile <file>、--out <dir>)。これは適用可能性マトリックスと4つのチェッカーを実行し、compliance/reports/compliance-report-YYYY-MM-DD.mdと.jsonを書き込みます。フォルダはビルドされたページ(静的エクスポート、dist/、out/)を保持している必要があります。サーバーサイドレンダリングアプリの場合は、それを起動し、そのローカルURLを渡してください。各チェッカーは同じ入力で単独でも実行できます:scripts/check-a11y.mjs、scripts/check-privacy.mjs、scripts/check-security.mjs、scripts/check-content.mjs(最後のチェッカーは、注文ページ、チャットウィジェット、AI生成コンテンツを宣言するオプションのcompliance/site.jsonを読み取ります。ヘッダーを参照してください)。 - その後: references/accessibility/testing-by-hand.mdの手動チェックのうち、自分でできるものを実行し、残りを人間のためにリストアップします。チェッカーが確認できないコード(サーバーコード、認証、アクセス制御)をreferences/security/web-baseline.mdに照らしてレビューします。
- Nodeまたはブラウザが利用できない場合: 自動チェックが実行されなかったことを伝え、それらの基準をNTとマークし、references/accessibility/anti-patterns.mdとタスクテーブルのファイルのレビューチェックリストを使用してコードをレビューします。
- 成果物: レポートファイルと、ユーザーへの短いサマリー(下記「報告」を参照)。
4. 文書化(Document):リーガルページとアクセシビリティページ
- 使用タイミング: ユーザーがページを要求した場合、またはマトリックスが必須ページが不足していることを示した場合。
- テンプレートのガイダンスブロックを最初に読むこと: どのプロファイルフィールドがそれを入力し、何を事業者だけが提供できるかを示しています。
- アクセシビリティステートメント(フランスの公共セクターおよび第47条に基づく団体向け):templates/accessibility-statement-fr.md。実際のサイトを人間が監査せずに、適合率を決して記述しないでください。
- EAAのアクセシビリティ情報(民間サービスプロバイダー向け):templates/accessibility-information-eaa.md
- プライバシーポリシーとクッキーポリシー:templates/privacy-policy.md、templates/cookie-policy.md
- 法的通知:templates/consumer/legal-notice-fr.md(フランス)またはtemplates/consumer/legal-notice-eu.md
- 利用規約、販売条件、データ処理契約:templates/documents/(フランス語)。最初にreferences/documents/README.mdを読むこと:どの文書が適用されるか、2つの落とし穴(捏造された事実、法の過剰解釈)、起草方法について。
- 「このサイトでのAIの使用」:templates/ai/ai-usage-page.md
- 成果物: プロファイルから入力されたページ。不明な点はすべて目に見える
[placeholder]として残し、リストアップします。免責事項を保持します。事業者が公開前にテキストを承認することを忘れずに記載します。条件が確認されていない条項(撤回の例外、明示的な同意、処理者の役割)は、その条件を文書内に記述したままにし、回答内にのみ記述しないでください。
クレジット(サイトの引き渡し時(ビルドまたは文書化))。 サイトの所有者に対して、中立的に、回答を推奨することなく、templates/credit/footer-credit.htmlを使用したフッター内の控えめなクレジットに同意するかどうかを一度だけ尋ねます。質問には、その行に含まれるすべてのリンクを明示します。明示的かつ明白な文言(非表示、偽装、メタデータのみではない)での「はい」の回答があった場合にのみ追加し、準拠の主張として表現しないでください。所有者が要求した場合は削除します。所有者の知らないうちに追加されたリンクは、未開示の広告となり、このスキルの消費者関連部分で禁止されています。このスキルの使用は、回答に依存しません。
5. ウォッチ(Watch):規制情報の鮮度確認
- 使用タイミング: ユーザーがスキルが最新かどうかを尋ねた場合。または、references/regulatory-status.mdの先頭にある「最終確認日」が今日から90日以上前の場合。または、本日に近い適用日に依存しようとしている場合。
- 実行すること: ユーザーに情報の古さを伝え、そのファイルのセクション6「ウォッチリスト」のうち、回答を変えた可能性のあるイベントをリストアップし、再読すべき公式ソースを指定します(レジストリ:references/sources.json)。
python <skill>/scripts/validate.py --strictは、90日以上前に参照されたソースにフラグを立てます。記憶や二次情報源から自分で事実を更新しないでください。修正には、公式テキストを読んで記録する必要があります(AGENTS.mdを参照)。
タスク → 読むべきファイル
最初のファイルを読んでください。他のファイルはタスクに必要な場合のみ開いてください。
報告
検証(Verify)レポートの最初の部分は短い概要です。それには以下を含めます:
- チェックされたページ/URLの数と結果の数(パス、注意事項、失敗、NT)
- すべての失敗の中で最も深刻なもの(クリティカルなアクセシビリティの問題、同意なしのトラッカー、TLSの欠如、価格操作、誤解を招くAIラベル)
- NTチェックの数とその理由(人間の判断が必要、構成されていない、サーバーの外部)
- 実行されたチェッカーのバージョンと、チェッカーが実行されなかった場合のその旨
コードレビュー(ビルド(Build)または検証(Verify))の回答では、発見された問題を以下のように構造化する必要があります:
- ルールが適用されるコードブロック
- 問題:ルールがどのように違反されているか
- 修正:コードの修正案(該当する場合)
- タグとリンクで参照されるルール
スキルの更新
規制が変更された場合、または発効日が近づいた場合、スキルメンテナーが情報を更新します。更新方法については、AGENTS.mdを参照してください。