> 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.

# クイックスタート

既存アプリケーションの更新は [v5 → v6 と FSRS-7 への移行ガイド](https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/guide/migration.md)を参照してください。

## インストール

`ts-fsrs` には Node.js 24 以降が必要です。


```sh [npm]
npm install ts-fsrs
```

```sh [yarn]
yarn add ts-fsrs
```

```sh [pnpm]
pnpm add ts-fsrs
```

```sh [bun]
bun add ts-fsrs
```

```sh [deno]
deno add npm:ts-fsrs
```

FSRS パラメーターの学習や復習ログ CSV の変換が必要な場合にのみ、`@open-spaced-repetition/binding` を追加でインストールします。

## DefaultScheduler から始める

`DefaultScheduler()` は FSRS スケジューリングを最短で導入する方法です。既定で FSRS-7 を使用し、目標保持率、統計、学習ステップ、最大間隔、単調間隔、スケジュール日数の標準ポリシーを含みます。ファジングはオプションで有効にできます。

```ts twoslash file="../../snippets/run-code/default-scheduler.ts"
import { DefaultScheduler, Rating } from 'ts-fsrs'

const now = new Date('2026-01-01T00:00:00.000Z')
const scheduler = await DefaultScheduler({
  version: 'FSRS-7',
  desiredRetention: 0.9,
  enableShortTerm: true,
  learningSteps: ['1m', '10m'],
  relearningSteps: ['10m'],
  enableFuzz: false,
  maximumInterval: 36_500,
})
const card = scheduler.newCard({ cardId: 'quick-start', now })
const result = scheduler.review({ card, grade: Rating.Good, now })

console.log(
  JSON.stringify(
    {
      state: result.card.state,
      dueAt: result.card.dueAt,
      stability: result.card.stability,
      stabilityFast: result.card.stabilityFast,
      difficulty: result.card.difficulty,
      rating: result.revlog.rating,
    },
    null,
    2
  )
)

```


▶ コードを実行

この例では一般的な既定値を明示しています。製品に合わせて `desiredRetention`、学習・再学習ステップ、ファジング、`maximumInterval` を変更できます。`weights` を省略すると、選択した FSRS バージョンのプリセット重みが使われます。

## スケジューラーを作成する

モデルや時刻体系を選ぶ場合、または middleware を自分で組み合わせる場合は `defineScheduler` を使います。再利用可能な definition を作成し、`.create()` が設定を検証して独立したスケジューラーを返します。

`chrono` は、時間の表現方法、カードや復習ログへの保存方法、スケジューリング計算での扱い方を定義し、JavaScript の `Date`、Temporal、数値による時間表現を利用できるようにします。 `chrono.normalize` は `ChronoTimeNormalizer` スキーマを使い、カードや復習ログの時刻フィールドを `{ previous, current }` に変換して、スケジューリングとロールバックに使用します。

```ts twoslash file="../../snippets/run-code/define-scheduler.ts"
import { dateChrono, defineScheduler, Rating } from 'ts-fsrs'
import { FSRS7_DEFAULT_WEIGHTS, FSRS7Model } from 'ts-fsrs/models/fsrs-7'

// Reuse this definition as the program's scheduling preset.
const schedulerDefinition = defineScheduler({
  model: FSRS7Model,
  chrono: dateChrono,
})

// Create an independent scheduler when a user's config is available.
const scheduler = schedulerDefinition.create({
  config: {
    weights: FSRS7_DEFAULT_WEIGHTS,
    fractionalDays: true,
  },
})

const now = new Date('2026-01-01T00:00:00.000Z')
const card = scheduler.newCard({ now })
const result = scheduler.review({ card, grade: Rating.Good, now })

console.log(
  JSON.stringify(
    {
      state: result.card.state,
      dueAt: result.card.dueAt,
      stability: result.card.stability,
      difficulty: result.card.difficulty,
      stabilityFast: result.card.stabilityFast,
      rating: result.revlog.rating,
    },
    null,
    2
  )
)

```


▶ コードを実行

:::note スケジューラー定義を再利用する
`defineScheduler(...)` の結果は、`.use(...)` で組み合わせた middleware を含めて、プログラム共通のプリセットとして保持します。ユーザーやコレクションにスケジューラーが必要になった時点で `schedulerDefinition.create({ config })` を呼び出してください。呼び出すたびに設定が検証され、独立したインスタンスが返ります。
:::

コードブロックのコピーボタンは元のソースをコピーします。専用 Worker でそのまま実行することもできます。固定した `now` により出力を再現できます。

- `newCard()` はスケジューラー既定のカードを作成します。
- `review()` は新しいカードと復習ログを返し、入力カードを変更しません。
- 再利用する definition に `.use(...)` でポリシー middleware を追加してから、ユーザーごとのスケジューラーを作成します。
