> For AI agents: the complete documentation index is available at https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/llms.txt, the full documentation bundle is available at https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/llms-full.txt.

# ライフサイクル

ハンドラは同期的に実行され、登録順にスケジューラのコアを囲みます。`.use(a, b)` と `.use(a).use(b)` の登録順序は同じで、`use` を呼ぶたびに新しい定義を返し、元の定義は変わりません。スケジューラのコアはチェーンの中央にあるため、`next()` の前のコードは操作を準備し、後のコードは結果を読み取ります。

## コアを囲む順序

`.use(a, b)` の場合の呼び出し順序は次のとおりです。

```text
a: next() の前
  b: next() の前
    スケジューラのコア
  b: next() の後
a: next() の後
```

通常のスケジューリング処理を続けるには、`next()` を一度呼び出します。`ctx.candidate.desiredRetention[ctx.input.grade]` などの計算入力は呼び出し前に設定し、計算結果の確認や調整は呼び出し後に行います。復習時の `ctx.scheduledDays` は日単位の間隔です。すべてのハンドラが終了した後、スケジューラは設定された chrono で期限を計算し、最終結果を検証します。

ポリシーを組み合わせる際は順序が重要です。scheduled days を間隔ポリシーより前に登録すると、呼び出しから戻る際に最終値を記録できます。明示的な学習ステップの待ち時間を保つには、学習ステップを最大間隔と単調間隔より前に置きます。Leech は `next()` の後に `scheduleStatus` を設定するハンドラより前に置き、停止状態が最後に適用されるようにします。[組み込みポリシー](https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/guide/middleware/built-in.md) に各ポリシーと `DefaultScheduler` の順序をまとめています。

## 復習とロールバック

ロールバックでは、専用の rollback ハンドラを同じ登録順序で実行します。`ctx.config`、`ctx.input.card`、`ctx.input.revlog` を読み取ることができ、結果は `ctx.result.card` にのみ書き込みます。スキーマを宣言するだけでは独自フィールドは復元されません。[概要](https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/guide/middleware/index.md) の連続正解カウンタの例のように、復習時に必要な変更前の値を保存し、ロールバック時に設定されたポリシーに従って読み戻してください。

プレビューも候補となる評価に対して review ハンドラを実行します。ハンドラ内でデータベースへの書き込みや通知などの外部操作を行わず、確定した復習結果をアプリケーション側で保存してください。`forget()` は専用ハンドラではなくデフォルト値を使ってカードをリセットします。そのため連続正解カウンタの例ではカウンタがゼロになります。
