履歴管理
履歴管理機能を使用すると、コンテンツの編集履歴を保存できます。誰が、いつ、どのような変更を行ったかを記録し、過去の状態に復元できます。
ユースケース例
CMSにコンテンツの履歴管理機能を実装することで、以下のように活用できます。
- 誤って編集したデータを編集前の状態に復元する
- 複数の編集者で作業する際に、誰がいつどのような変更を行ったか記録する
機能の有効化
スキーマで テーブル ごとに有効化できます。enableHistory
プロパティを true
に設定します。
orizm.config.ts
import type { Orizm } from "@orizm/cms-sdk";
// 注意: tableModules, buckets, authorities は省略しています
export default {
tables: [
{
name: "blog",
columns: [
/*省略*/
],
enableHistory: true,
},
],
} satisfies Orizm.ProjectDefine;
記録される情報
コンテンツに対する操作
コンテンツに対する以下の操作を記録します。
操作 | 概要 |
---|---|
create | コンテンツの作成 |
update | コンテンツの更新 |
publish | コンテンツの公開 |
unpublish | コンテンツの非公開 |
編集したユーザー
操作を行ったCMSユーザーの情報を記録します。APIキーによる操作の場合は、APIキーの情報を記録します。
使用されたAPIの種類
以下のAPIの種類を記録します。
API | 概要 |
---|---|
Developer API | 開発者コンソールからの操作 |
Management API | CMSアプリケーションからの操作 |
Consumer API | Consumerアプリケーションからの操作 |
コンテンツの内容
コンテンツの内容を記録します。変更前後の比較や、以前の状態を復元する際に利用できます。
使い方
SDKを使った履歴管理機能の使い方を説明します。
履歴の取得
履歴を取得するには、CMS SDKの listHistory()
メソッドを使用します。
await cmsClient.tables.blog.listHistory(id);
以下のように履歴情報が取得できます。
{
"contents": [
{
"id": 2,
"createdAt": "2025-01-02T00:00:00Z",
"action": "publish",
"developerAPI": false,
"managementAPI": true,
"consumerAPI": false,
"projectUserId": "M3h4U0OZkiCBiaI8",
"apiKey": null,
"content": {
"id": "GtWHkA8K90hBTXSk",
"title": "記事タイトル",
"body": "記事本文",
"group": null,
"scheduledPublishAt": null,
"scheduledUnpublishAt": null,
"_draft": false,
"_published": true,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-02T00:00:00Z",
"publishedAt": "2025-01-02T00:00:00Z"
}
},
{
"id": 1,
"createdAt": "2025-01-01T00:00:00Z",
"action": "create",
"developerAPI": false,
"managementAPI": true,
"consumerAPI": false,
"projectUserId": "M3h4U0OZkiCBiaI8",
"apiKey": null,
"content": {
"id": "GtWHkA8K90hBTXSk",
"title": "記事タイトル(下書き)",
"body": "記事本文の下書き中です。",
"group": null,
"scheduledPublishAt": null,
"scheduledUnpublishAt": null,
"_draft": true,
"_published": false,
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z",
"publishedAt": null
}
}
],
"totalCount": 2
}
デフォルトでは最新の10バージョンが取得できます。第二引数にオプションを指定することで、取得件数やページングの設定ができます。
await cmsClient.tables.blog.listHistory(id, { limit: 10, offset: 0 });
コンテンツの復元
コンテンツを復元するには、復元したいバージョンの content
プロパティのデータでコンテンツを更新してください。
// 履歴を取得
const { contents } = await cmsClient.tables.blog.listHistory(id);
// 履歴から復元したいバージョンのデータを取得
const { title, body } = contents[0].content;
// コンテンツを更新
await cmsClient.tables.blog.update(id, { title, body });
⚠️
履歴では、記録時点のコンテンツをそのまま保持しています。そのためテーブルのカラム構成を変更している場合、過去と現在のデータ構造に互換性がない可能性があります。