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