principle-make-operations-idempotent について
再試行やクラッシュ後も目標の状態に到達する操作を設計する開発スキルです。現在の状態を基に処理し、再実行が収束するかを確認します。
主な機能
- 01現在の状態と目標を照合
- 02必要な変更だけを適用
- 03クラッシュ後の古い成果物を特定
- 04再試行と中断箇所をテスト
活用シーン
- 01再試行に耐えるコマンドの設計
- 02中断された処理ループへの対応
- 03状態を変更する操作のレビュー
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ michael-denyer/ pstack-claude --skill principle-make-operations-idempotentインストール後、Claude Code で/principle-make-operations-idempotentを入力して読み込まれたか確認します。
詳細
操作を冪等にする
何回実行しても、また前回の実行がどこで停止していても、正しい状態に収束するように操作を設計します。状態を変更するすべての操作について、「これを2回実行するとどうなりますか?」「前回の実行が途中でクラッシュした場合、どうなりますか?」に答えられるようにします。
理由: コマンド、ライフサイクル操作、処理ループは、クラッシュ、再起動、再試行が日常的に起きる環境で実行されます。部分的な状態変更によって次回の実行結果が変わるなら、再起動のたびにデバッグが必要になります。
考え方: 前回の実行で何をしようとしていたかではなく、現在の状態から各ステップを導きます。現在の状態を読み取り、目標と比較して、差分だけを適用します。この方法で書かれたステップは、安全に繰り返せます。再実行しても、行うべきことが残っていないためです。
ロック、一時ファイル、書き込み途中のレコード、処理対象として確保されたジョブなど、実行後に残るものは、次回の実行で古いものだと判別できなければなりません。よくあるケースだけでなく、前回の実行が停止した可能性のあるすべての時点で変わらない証拠を基準に、古さを判断します。次回の実行で判断できないマーカーがあると、クラッシュのたびに手動でのクリーンアップが必要になります。たとえば、一時パスに書き込んでから所定の場所に名前を変更するか、作成順ではなく内容で成果物を比較します。
確認項目:
- これを続けて2回実行すると、どうなりますか?
- 前回の実行が考えられるあらゆる時点でクラッシュした場合、どうなりますか?
- 再実行すると、同じ最終状態に収束しますか?
どれかの答えが「どんな状態が残されたかによります」であれば、その操作には状態を調整するステップが必要です。