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