> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Snapshots

> アプリケーションとデータベースの snapshot を一覧取得、作成、リストアし、アカウント内のすべての snapshot を一覧取得します。

```go theme={null}
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
```

snapshot には 3 つのスコープがあります: アプリケーション単位、データベース単位、アカウント全体です。

## Snapshot 構造体

一覧取得メソッドは `[]squarecloud.Snapshot` を返します:

| Field      | Type     | Description                   |
| ---------- | -------- | ----------------------------- |
| `Name`     | `string` | snapshot オブジェクト名              |
| `Size`     | `int`    | サイズ（バイト）                      |
| `Modified` | `string` | 最終更新日                         |
| `Key`      | `string` | ダウンロード URL の構築に使われる署名付きクエリ文字列 |

## アプリケーションの snapshot

### 一覧取得

```go theme={null}
snapshots, err := api.GetApplicationSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

for _, snap := range snapshots {
	fmt.Println(snap.Name, snap.Size, snap.Modified)
}
```

### 作成

`api.CreateApplicationSnapshot(appID)` は新しい snapshot をトリガーし、署名付きダウンロード URL を含む `squarecloud.SnapshotCreated` を返します。

```go theme={null}
created, err := api.CreateApplicationSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}

fmt.Println(created.URL) // 署名付きダウンロード URL
fmt.Println(created.Key)
```

### リストア

`api.RestoreApplicationSnapshot(appID, snapshotID, versionID)` は、アプリケーションを以前の snapshot バージョンにロールバックします。

```go theme={null}
err := api.RestoreApplicationSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000",
	"abc123def4567890",
)
if err != nil {
	panic(err)
}
```

## データベースの snapshot

データベーススコープは、アプリケーションスコープをミラーリングします:

```go theme={null}
snapshots, err := api.GetDatabaseSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

created, err := api.CreateDatabaseSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(created.URL)

err = api.RestoreDatabaseSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000_mongo",
	"v1",
)
if err != nil {
	panic(err)
}
```

## アカウント全体の snapshot の一覧取得

`api.UserSnapshots(scope)` は、すべてのアプリケーションまたはデータベースにわたって所有するすべての snapshot を返します。スコープは `squarecloud.SnapshotScope*` 定数のいずれかです:

```go theme={null}
appSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeApplications)
if err != nil {
	panic(err)
}

dbSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeDatabases)
if err != nil {
	panic(err)
}
```

<Note>
  アカウント全体の snapshot 一覧取得には、アクティブな有料プランが必要です。また、各プランには **1 日あたりの snapshot クォータ** があります — 使い切ると、作成は `DAILY_SNAPSHOTS_LIMIT_REACHED` コードで失敗します。これは汎用の `KEEP_CALM` レートリミットエラーとは別物です。
</Note>
