principle-separate-before-serializing-shared-state について
principle-separate-before-serializing-shared-state は、並行処理で状態を変更する際の競合を防ぐ開発スキルです。不要な共有書き込み先をなくし、共有が必要な場合は構造的にアクセスを直列化します。
主な機能
- 01共有可変状態を特定
- 02不要な共有書き込みを排除
- 03処理主体ごとに状態先を分離
- 04避けられない共有アクセスを直列化
活用シーン
- 01並行エージェントのワークフロー設計
- 02共有ファイルやブランチの競合防止
- 03状態分離かロックかの判断
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ poteto/ plugins --skill principle-separate-before-serializing-shared-stateインストール後、Claude Code で/principle-separate-before-serializing-shared-stateを入力して読み込まれたか確認します。
詳細
共有状態をシリアライズする前に分離する
並行して動作するアクターが可変状態を共有する可能性がある場合、まず、本当に同じ可変オブジェクトが必要なのかを確認してください。必要がなければ、共有をなくします。共有が避けられない場合は、ロックファイル、逐次フェーズ、排他的な所有権など、構造によってアクセスを直列化します。指示や慣例は、並行制御にはなりません。
理由: 共有状態への同時書き込みは、断続的に発生し、再現が難しく、デバッグに多大なコストがかかる競合状態を引き起こします。エージェントやゴルーチンに「順番に処理する」よう伝えても、うまくいきません。
パターン:
- 共有される可変状態を特定します(両方が読み書きするファイル、両方がプッシュするブランチ、両方が定義して利用する API)。
- 原則として、共有の書き込み先をなくします。 これらのアクターに必要なのは、正規の単一オブジェクトでしょうか。それとも、個別に発行される独立した情報でしょうか。各アクターに専用のファイル、キー、ブランチ、または状態ディレクトリを割り当て、読み取り/レポートの段階でのみマージします。2 つのワーカーが、1 つの
state.jsonにそれぞれ独自のlastXフィールドを書き込むのも、共有状態の変更です。indexer-state.jsonとmetrics-state.jsonに分ければ、共有状態の変更にはなりません。 - 1 つの共有の書き込み先が実際に不変条件として必要な場合に限り、ロックファイル、逐次フェーズ、単一書き込みアクター、またはアトミックな比較交換によって、アクセスを構造的に直列化します。「ロックが必要」という考えは、既定の答えではなく、設計上の問題の兆候として確認してください。
コメント
Markdown 対応