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