mcpField
P
principle-separate-before-serializing-shared-state

principle-separate-before-serializing-shared-state

github.com/poteto開発161101 回インストール22 週間前に更新
リポジトリ

principle-separate-before-serializing-shared-state について

principle-separate-before-serializing-shared-state は、並行処理で状態を変更する際の競合を防ぐ開発スキルです。不要な共有書き込み先をなくし、共有が必要な場合は構造的にアクセスを直列化します。

主な機能

  1. 01共有可変状態を特定
  2. 02不要な共有書き込みを排除
  3. 03処理主体ごとに状態先を分離
  4. 04避けられない共有アクセスを直列化

活用シーン

  1. 01並行エージェントのワークフロー設計
  2. 02共有ファイルやブランチの競合防止
  3. 03状態分離かロックかの判断

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/poteto/plugins --skill principle-separate-before-serializing-shared-state

インストール後、Claude Code で/principle-separate-before-serializing-shared-stateを入力して読み込まれたか確認します。

詳細

共有状態をシリアライズする前に分離する

並行して動作するアクターが可変状態を共有する可能性がある場合、まず、本当に同じ可変オブジェクトが必要なのかを確認してください。必要がなければ、共有をなくします。共有が避けられない場合は、ロックファイル、逐次フェーズ、排他的な所有権など、構造によってアクセスを直列化します。指示や慣例は、並行制御にはなりません。

理由: 共有状態への同時書き込みは、断続的に発生し、再現が難しく、デバッグに多大なコストがかかる競合状態を引き起こします。エージェントやゴルーチンに「順番に処理する」よう伝えても、うまくいきません。

パターン:

  1. 共有される可変状態を特定します(両方が読み書きするファイル、両方がプッシュするブランチ、両方が定義して利用する API)。
  2. 原則として、共有の書き込み先をなくします。 これらのアクターに必要なのは、正規の単一オブジェクトでしょうか。それとも、個別に発行される独立した情報でしょうか。各アクターに専用のファイル、キー、ブランチ、または状態ディレクトリを割り当て、読み取り/レポートの段階でのみマージします。2 つのワーカーが、1 つの state.json にそれぞれ独自の lastX フィールドを書き込むのも、共有状態の変更です。indexer-state.json と metrics-state.json に分ければ、共有状態の変更にはなりません。
  3. 1 つの共有の書き込み先が実際に不変条件として必要な場合に限り、ロックファイル、逐次フェーズ、単一書き込みアクター、またはアトミックな比較交換によって、アクセスを構造的に直列化します。「ロックが必要」という考えは、既定の答えではなく、設計上の問題の兆候として確認してください。

コメント