JS Cookie
Drupal 10で非推奨、Drupal 11で削除されたcore/js-cookieライブラリの代替として、js-cookie JavaScriptライブラリをDrupalで利用可能にするモジュールです。
js_cookie
インストール
composer require 'drupal/js_cookie:^1.0'
概要
JS Cookieモジュールは、JavaScript Cookieライブラリ(js-cookie)をDrupalのライブラリシステムに統合します。このライブラリは元々Drupalコアに含まれていましたが、Drupal 10で非推奨となりDrupal 11で完全に削除されました。
このモジュールは、js-cookieライブラリに依存する既存のカスタムモジュールやコントリビュートモジュールがDrupal 11以降でも動作し続けるために必要な代替ソリューションを提供します。ライブラリはローカルにインストールすることも、CDN経由で読み込むことも可能です。プライバシー保護の観点からはローカルインストールが推奨されます。
モジュールはシンプルなライブラリ定義のみを提供し、管理画面や設定フォームは持ちません。他のモジュールからjs_cookie/js-cookieとして依存関係を宣言することで利用します。
Features
- js-cookie JavaScriptライブラリ(バージョン3.x)をDrupalライブラリとして定義し、他のモジュールから簡単に利用可能にする
- ローカルインストールとCDNフォールバックの自動切り替え機能により、ライブラリがローカルにない場合は自動的にjsDelivr CDNから読み込む
- Drupalのステータスレポートページでライブラリのインストール状況を確認可能(ローカル/CDNどちらを使用しているか表示)
- Composer経由でのライブラリインストールをサポート(Merge Plugin方式、Asset Packagist方式の両方に対応)
- core/js-cookieからの移行パスを提供し、既存コードの依存関係を最小限の変更で維持可能
Use Cases
Drupal 11への移行時のjs-cookie依存解決
Drupal 10からDrupal 11にアップグレードする際、core/js-cookieに依存していたカスタムモジュールやテーマがある場合、このモジュールをインストールし、.libraries.ymlファイルの依存関係をcore/js-cookieからjs_cookie/js-cookieに変更することで、既存の機能を維持できます。
JavaScriptでのクッキー操作
フロントエンドJavaScriptでクッキーの読み書きを行う必要がある場合、このモジュールを依存関係として追加し、js-cookieライブラリのAPIを使用できます。例: Cookies.set('name', 'value')、Cookies.get('name')、Cookies.remove('name')など。
プライバシー重視のローカルライブラリ配信
GDPRやその他のプライバシー規制に準拠するため、外部CDNへのリクエストを避けたい場合は、ライブラリをローカルにインストールすることでユーザーのプライバシーを保護できます。モジュールはローカルファイルを自動検出し、優先的に使用します。
コントリビュートモジュールでの依存関係定義
js-cookieを使用するコントリビュートモジュールを開発する場合、.info.ymlのdependenciesにjs_cookie:js_cookieを追加し、composer.jsonにdrupal/js_cookieへの依存を定義することで、利用者がモジュールをインストールした際に自動的にライブラリが利用可能になります。
Tips
- プライバシー保護のため、本番環境ではjs-cookieライブラリをローカルにインストールすることを強く推奨します。CDNを使用すると、ユーザーのブラウザが外部サーバーにリクエストを送信するため、GDPRなどのデータ保護規制に抵触する可能性があります。
- Drupal 10からDrupal 11への移行を計画している場合は、事前にcore/js-cookieへの依存箇所を特定し、このモジュールへの移行を準備しておくとスムーズです。
- js-cookieライブラリのバージョンは3.xを使用しています。バージョン2.xからの移行がある場合は、APIの変更点を確認してください。
- カスタムモジュールでjs-cookieを使用する場合、.libraries.ymlでの依存関係指定に加えて、#attachedでライブラリをアタッチすることを忘れないでください。
Technical Details
Hooks 2
hook_library_info_alter
ライブラリ定義を動的に変更するためのフック。このモジュールでは、js-cookieライブラリがローカルにインストールされているかを確認し、インストールされていない場合はCDNのURLに切り替えるために使用しています。
hook_requirements
モジュールの要件をチェックし、ステータスレポートに表示するためのフック。このモジュールでは、js-cookieライブラリがローカルにインストールされているか確認し、CDNから読み込んでいる場合は警告を表示します。
Troubleshooting 4
この警告は、js-cookieライブラリがローカルにインストールされていないため、CDNから読み込んでいることを示しています。機能上は問題ありませんが、プライバシー保護のためローカルインストールを推奨します。README.mdに記載されているcurlコマンドを使用してライブラリをダウンロードするか、Composer経由でインストールしてください。
Drupal 11ではcore/js-cookieが削除されています。このモジュールをインストールし、.libraries.ymlファイルの依存関係をcore/js-cookieからjs_cookie/js-cookieに変更してください。
ライブラリファイルは /web/libraries/js-cookie/dist/js.cookie.min.js に配置する必要があります。Drupalのルートディレクトリに対して libraries/js-cookie/dist/ フォルダを作成し、その中にjs.cookie.min.jsを配置してください。
composer.jsonのextra.merge-plugin.require配列にモジュールのcomposer.libraries.jsonへのパス(例: web/modules/contrib/js_cookie/composer.libraries.json)を追加し、composer update js_cookie/js_cookieを実行してください。
Security Notes 3
- 外部CDNからJavaScriptを読み込むことは、サプライチェーン攻撃のリスクがあります。セキュリティを重視する場合は、ライブラリをローカルにインストールし、ファイルの整合性を確認してください。
- クッキーに機密情報を保存する場合は、HttpOnly属性やSecure属性を適切に設定してください。js-cookieライブラリはこれらの属性の設定をサポートしています。
- クッキーを使用したセッション管理やユーザー追跡を行う場合は、プライバシーポリシーでユーザーに適切に告知し、必要に応じて同意を取得してください。