drupal-caching について
Drupal 開発者向けのキャッシュスキルです。レンダー配列のキャッシュメタデータ、タグとコンテキスト、バックエンド操作、サービス注入を扱います。
主な機能
- 01レンダー配列のキャッシュメタデータ
- 02キャッシュタグとコンテキストの指針
- 03キャッシュバックエンドの読み書き
- 04キャッシュサービスの注入
活用シーン
- 01レンダー内容へのキャッシュメタデータ追加
- 02権限や URL に応じた出力の切り替え
- 03キャッシュデータの読み取りと無効化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ edutrul/ drupal-ai --skill drupal-cachingインストール後、Claude Code で/drupal-cachingを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
Drupal のキャッシュ
キャッシュメタデータは必ず追加してください。キャッシュメタデータがないと、コンテンツが古いままになります。
レンダー配列のキャッシュメタデータ
$build['content'] = [
'#markup' => $output,
'#cache' => [
'tags' => ['node:' . $node->id(), 'node_list'],
'contexts' => ['user.permissions', 'url.query_args'],
'max-age' => Cache::PERMANENT,
],
];
キャッシュタグ
| タグ | 無効化されるタイミング |
|---|---|
node:{nid} | Node {nid} が保存または削除されたとき |
node_list | いずれかのノードが作成または削除されたとき |
user:{uid} | ユーザー {uid} が保存されたとき |
taxonomy_term:{tid} | ターム {tid} が保存されたとき |
config:{name} | 設定オブジェクト {name} が保存されたとき |
キャッシュコンテキスト
| コンテキスト | 変化する条件 |
|---|---|
user.permissions | ユーザーの権限(user より優先して使用してください) |
user.roles | ユーザーのロール |
url.path | URL パス |
url.query_args | クエリパラメーター |
languages | 現在の言語 |
キャッシュの読み取り/書き込み
$cached = $this->cacheBackend->get('my_module:my_key');
if ($cached !== FALSE) {
return $cached->data;
}
$this->cacheBackend->set('my_module:my_key', $data, Cache::PERMANENT, ['node_list']);
$this->cacheBackend->set('my_module:my_key', $data, \Drupal::time()->getRequestTime() + 3600, ['node_list']);
$this->cacheBackend->delete('my_module:my_key');
Cache::invalidateTags(['node:123', 'node_list']);
キャッシュサービスの注入
use Drupal\Core\Cache\CacheBackendInterface;
public function __construct(
private readonly CacheBackendInterface $cacheBackend,
) {}
# services.yml
my_module.my_service:
arguments: ['@cache.default']
CacheableDependencyInterface
$build['#cache']['tags'] = Cache::mergeTags(
$build['#cache']['tags'] ?? [],
$node->getCacheTags()
);
コメント
Markdown 対応