mcpField
D
drupal-state

drupal-state

github.com/edutrul開発7349 回インストール21 週間前に更新
リポジトリ

drupal-state について

drupal-stateは、DrupalのState APIを解説し、実行時データと設定、キャッシュ、ユーザーデータの違いを示すスキルです。リクエストをまたいで内部値を保存するDrupal開発者向けです。

主な機能

  1. 01State APIの読み書き例
  2. 02名前空間付きキーの指針
  3. 03State、設定、キャッシュの比較
  4. 04DrushのStateコマンド

活用シーン

  1. 01前回のCron実行時刻の記録
  2. 02移行の進捗保存
  3. 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

コメント