JS Cookie

Drupal 10で非推奨、Drupal 11で削除されたcore/js-cookieライブラリの代替として、js-cookie JavaScriptライブラリをDrupalで利用可能にするモジュールです。

js_cookie
50,014 sites
8
drupal.org

インストール

Drupal 11, 10, 9 v1.0.2
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
ステータスレポートに「Required library 'js-cookie' not found locally」という警告が表示される

この警告は、js-cookieライブラリがローカルにインストールされていないため、CDNから読み込んでいることを示しています。機能上は問題ありませんが、プライバシー保護のためローカルインストールを推奨します。README.mdに記載されているcurlコマンドを使用してライブラリをダウンロードするか、Composer経由でインストールしてください。

core/js-cookieへの依存エラーが発生する(Drupal 11)

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 Merge Pluginでライブラリがインストールされない

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ライブラリはこれらの属性の設定をサポートしています。
  • クッキーを使用したセッション管理やユーザー追跡を行う場合は、プライバシーポリシーでユーザーに適切に告知し、必要に応じて同意を取得してください。