# Baseのスナップショット

- Human documentation: [https://docs.univer.ai/ja-JP/guides/bases/model/base-snapshot](https://docs.univer.ai/ja-JP/guides/bases/model/base-snapshot)

- Agent Markdown: [https://docs.univer.ai/ja-JP/guides/bases/model/base-snapshot.md](https://docs.univer.ai/ja-JP/guides/bases/model/base-snapshot.md)

- Requested language: `ja-JP`

- Content language: `ja-JP`

- Documentation version: `1.2.0`

- Source: [bases/model/base-snapshot.ja-JP.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/bases/model/base-snapshot.ja-JP.mdx)

---

## IBaseSnapshot

`IBaseSnapshot` は、Univer Basesで使用する永続化形式です。テーブル、テーブルの順序、スキーマのバージョン、タイムスタンプ、オプションのリビジョンメタデータを含む、1つのBaseユニットを表します。

### プロパティ

| プロパティ         | 型                                  | 説明                                      |
| ------------- | ---------------------------------- | --------------------------------------- |
| id            | `string`                           | Baseユニットの一意なID。                         |
| name          | `string`                           | Base名。                                  |
| schemaVersion | `number`                           | スナップショットのスキーマバージョン。                     |
| tables        | `Record\<string, ITableSnapshot\>` | テーブルIDをキーとするテーブル。                       |
| tableOrder    | `string[]`                         | テーブルIDを順番に並べたリスト。                       |
| createdAt     | `number`                           | 作成時のタイムスタンプ。                            |
| updatedAt     | `number`                           | 更新時のタイムスタンプ。                            |
| createdBy?    | `string`                           | 作成者のID。                                 |
| rev?          | `number`                           | 永続化レイヤーやコラボレーションレイヤーで使用する、オプションのリビジョン値。 |

## 最小構成のスナップショット

```ts
const baseSnapshot = {
  id: 'base-1',
  name: 'Product tracker',
  schemaVersion: 1,
  tableOrder: ['tasks'],
  tables: {
    tasks: {
      id: 'tasks',
      name: 'Tasks',
      primaryFieldId: 'title',
      fieldOrder: ['title', 'status'],
      fields: {
        title: { id: 'title', name: 'Title', type: 'text', config: {} },
        status: { id: 'status', name: 'Status', type: 'singleSelect', config: {} },
      },
      recordOrder: ['rec-1'],
      records: {
        'rec-1': {
          id: 'rec-1',
          values: { title: 'Write docs', status: 'In progress' },
          orderKey: 'a0',
          createdAt: Date.now(),
          updatedAt: Date.now(),
        },
      },
      views: {},
      viewOrder: [],
    },
  },
  createdAt: Date.now(),
  updatedAt: Date.now(),
}
```

## 用途

`IBaseSnapshot` は主に次の目的で使用します。

1. `UniverInstanceType.UNIVER_BASE` ユニットを作成する。
2. 構造化データを永続化し、復元する。
3. サーバー側の処理に使用するデータを準備する。
4. コラボレーションサービスとインポート／エクスポートサービスの間でデータを転送する。

> [!WARNING]
> スナップショットオブジェクトは永続化データです。Baseの起動後は、スナップショットオブジェクトを直接変更せず、Facade APIを使用してください。

## 保存と復元

Facade の `save()` は、ダッシュボードやローカルコメントなど、登録済みプラグインのリソースも保存します。`saveToBackend` はアプリ側の永続化関数です。

```ts
const base = univerAPI.getActiveBase()
if (!base) throw new Error('Open a Base first')
await saveToBackend(base.save())
```

新しいエディタで同じプラグインを登録してから `univerAPI.createBase(savedSnapshot)` を呼びます。`tables` だけを保存したり、実行中のモデルのスナップショットを直接変更したりしないでください。
