drupal-state について
drupal-stateは、DrupalのState APIを解説し、実行時データと設定、キャッシュ、ユーザーデータの違いを示すスキルです。リクエストをまたいで内部値を保存するDrupal開発者向けです。
主な機能
- 01State APIの読み書き例
- 02名前空間付きキーの指針
- 03State、設定、キャッシュの比較
- 04DrushのStateコマンド
活用シーン
- 01前回のCron実行時刻の記録
- 02移行の進捗保存
- 03内部機能フラグの管理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ edutrul/ drupal-ai --skill drupal-stateインストール後、Claude Code で/drupal-stateを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
Drupal State API
State は、リクエストをまたいで保持する必要があるランタイムデータ用ですが、設定ではありません。ユーザーが管理する設定には Config を使用します。内部の運用データ(最後の cron 実行時刻、移行状況など)には State を使用します。
基本的な使い方
use Drupal\Core\State\StateInterface;
// Inject
public function __construct(
private readonly StateInterface $state,
) {}
// Get
$value = $this->state->get('my_module.last_run');
$value = $this->state->get('my_module.last_run', $default_value);
// Set
$this->state->set('my_module.last_run', \Drupal::time()->getRequestTime());
// Delete
$this->state->delete('my_module.last_run');
// Get multiple
$values = $this->state->getMultiple(['key1', 'key2']);
// Set multiple
$this->state->setMultiple([
'my_module.status' => 'active',
'my_module.count' => 42,
]);
// Delete multiple
$this->state->deleteMultiple(['key1', 'key2']);
命名規則
名前空間付きのキーを使用します:module_name.key_name
// Good
$this->state->get('my_module.last_import_time');
$this->state->get('my_module.processed_count');
// Bad
$this->state->get('last_import'); // Not namespaced
State、Config、Cache の比較
| ストレージ | 用途 | エクスポート可能 |
|---|---|---|
| State | ランタイムの運用データ(最後の実行時刻、カウンター、フラグ) | いいえ |
| Config | ユーザーが管理する設定、サイト設定 | はい(cex/cim 経由) |
| Cache | 変更時に無効化される、計算コストの高いデータ | いいえ(一時的) |
| UserData | ユーザーごとの設定/データ | いいえ |
よくある使用例
// Track last cron run
$this->state->set('my_module.cron_last', \Drupal::time()->getRequestTime());
// Feature flag (internal)
$isEnabled = $this->state->get('my_module.feature_enabled', FALSE);
// Track migration progress
$this->state->set('my_module.migration_offset', $offset);
// Store external API token (not sensitive — use KeyModule for secrets)
$this->state->set('my_module.api_token_expires', $expires);
Drush の State コマンド
# Get
drush state:get my_module.last_run
# Set
drush state:set my_module.feature_enabled 1
# Delete
drush state:del my_module.last_run
サービス ID
state
コメント
Markdown 対応