Features下書き管理

下書き管理

下書き管理機能を使用すると、コンテンツを公開前に下書きとして保存し、編集・確認してから公開できます。この機能はコンテンツの品質管理やワークフロー管理に役立ちます。

以下の機能を提供します。

  • コンテンツを下書き状態で保存
  • コンテンツの公開ステータスを管理
  • 下書きと公開コンテンツを並行管理
  • 公開、非公開をスケジュール予約

ユースケース例

コンテンツの事前作成

下書き管理機能を活用すれば、リリース情報やシステムメンテナンスなどの重要なお知らせを事前に準備し、指定日時に自動公開できます。

期間限定コンテンツの管理

下書き管理機能の公開・非公開スケジュール設定を組み合わせることで、季節的なキャンペーンやセール、イベント情報など、特定の期間だけ表示したいコンテンツを効率的に管理できます。

  1. 事前に下書きとしてコンテンツを作成
  2. キャンペーン開始日時に自動公開
  3. 終了日時に自動的に非公開
  4. 翌年も使用できるコンテンツは下書き状態で保存し、必要に応じて更新や複製して再利用

コンテンツの承認ワークフロー

コンテンツ公開前に品質管理のための承認プロセスが必要な場合があります。下書き管理機能を使用すると、コンテンツ制作者とレビュワーが効率的に協働できるワークフローを構築できます。

例えば企業ブログでは、マーケティングチームのライターが記事を下書きとして作成し、編集者や法務担当者がレビューします。修正が必要な場合は下書き状態のままコンテンツを更新できるため、公開サイトに影響を与えることなく何度でも編集可能です。承認が得られたら下書きコンテンツを公開できます。

機能の有効化

スキーマで テーブル ごとに有効化できます。enableDrafts プロパティを true に設定します。

orizm.config.ts
import type { Orizm } from "@orizm/cms-sdk";
 
// 注意: tableModules, buckets, authorities は省略しています
export default {
  tables: [
    {
      name: "blog",
      columns: [
        /*省略*/
      ],
      enableDrafts: true,
    },
  ],
} satisfies Orizm.ProjectDefine;

予約カラム

下書き管理機能を有効化すると、テーブルに予約カラムが追加されます。

_draft

コンテンツがドラフトかどうかを示すフラグです。

true の場合は下書き、false の場合は公開コンテンツです。

直接書き換えることはできません。

_published

コンテンツが公開中かどうかを示すフラグです。

true の場合は公開中、false の場合は非公開です。公開されていれば下書きデータに対しても true になります。

直接書き換えることはできません。

publishedAt

コンテンツがはじめて公開状態になった日時です。

ISO 8601 形式の文字列で構成されます。(例: 2025-01-01T00:00:00.000Z

scheduledPublishAt

コンテンツを公開する予定の日時です。

ISO 8601 形式の文字列で構成されます。(例: 2025-01-01T00:00:00.000Z

このカラムに値を設定すると、指定した日時に自動で公開されます。

scheduledUnpublishAt

コンテンツを非公開にする予定の日時です。

ISO 8601 形式の文字列で構成されます。(例: 2025-01-01T00:00:00.000Z

このカラムに値を設定すると、指定した日時に自動で非公開になります。

使い方

SDKを使った下書き管理機能の使い方を説明します。

コンテンツの作成

コンテンツを作成するにはCMS SDKを使用します。

下書きコンテンツとして作成するには create() の第二引数のオブジェクトに draft: true を指定します。

await cmsClient.tables.blog.create(content, { draft: true });

公開コンテンツとして作成するには create() の第二引数を省略するか、オブジェクトに draft: false を指定します。

await cmsClient.tables.blog.create(content);

コンテンツの更新

コンテンツを更新するにはCMS SDKを使用します。

以下のケースでは update() の第三引数のオブジェクトに draft: true を指定します。

  • すでに公開されているコンテンツに下書きを作成したい
  • 下書きコンテンツを更新したい
await cmsClient.tables.blog.update(id, content, { draft: true });

公開コンテンツを更新するには update() の第三引数を省略するか、オブジェクトに draft: false を指定します。

await cmsClient.tables.blog.update(id, content);

update() では下書きコンテンツを更新しつつ、公開状態にすることはできません。代わりに、下書きコンテンツに対して publish() を使用します。

下書きの公開

下書きコンテンツを公開するにはCMS SDKの publish() を使用します。

await cmsClient.tables.blog.publish(id);

第二引数にコンテンツのデータを渡すことで、更新と同時に公開することもできます。

await cmsClient.tables.blog.publish(id, content);

コンテンツの非公開化

コンテンツを非公開にするにはCMS SDKの unpublish() を使用します。

await cmsClient.tables.blog.unpublish(id);

コンテンツの削除

コンテンツを削除するにはCMS SDKを使用します。

下書きコンテンツを削除するには delete() の第二引数のオブジェクトに draft: true を指定します。

await cmsClient.tables.blog.delete(id, { draft: true });

コンテンツを完全に削除するには delete() の第二引数を省略するか、オブジェクトに draft: false を指定します。

await cmsClient.tables.blog.delete(id);

コンテンツの取得

コンテンツを取得するにはCMSではCMS SDKを使用します。ConsumerではConsumer SDKを使用します。

CMS SDK

CMS SDKでは以下のメソッドで下書きコンテンツの取得が可能です。

  • get(): 第二引数で draft: true を指定
  • getByUnique(): get() と同様に第二引数で draft: true を指定
  • list(): 第一引数で draft: true を指定

CMS SDKでは特に指定しなくても draft: true がデフォルトです。

await cmsClient.tables.blog.get(id, { draft: true });
await cmsClient.tables.blog.getByUnique({ slug: "example" }, { draft: true });
await cmsClient.tables.blog.list({ draft: true });

Consumer SDK

Consumer SDKでは以下のメソッドで下書きコンテンツの取得が可能です。

  • get(): 第二引数で draft: true を指定
  • getByUnique(): get() と同様に第二引数で draft: true を指定
  • list(): 第一引数で draft: true を指定

Consumer SDKで下書きコンテンツを取得するには draft: true を指定する必要があります。

await consumerClient.tables.blog.get(id, { draft: true });
await consumerClient.tables.blog.getByUnique(
  { slug: "example" },
  { draft: true },
);
await consumerClient.tables.blog.list({ draft: true });

下書きコンテンツの公開予約

下書きコンテンツを公開予約するにはCMS SDKの update() で下書きデータに対して、scheduledPublishAt に公開予約日時を設定します。

await cmsClient.tables.blog.update(
  id,
  {
    scheduledPublishAt: "2025-01-01T00:00:00.000Z",
  },
  { draft: true },
);

公開処理が完了すると scheduledPublishAt に設定されていた値はクリアされます。

公開コンテンツの非公開予約

公開コンテンツを非公開予約するにはCMS SDKの update() で公開データに対して、scheduledUnpublishAt に非公開予約日時を設定します。

await cmsClient.tables.blog.update(id, {
  scheduledUnpublishAt: "2025-01-01T00:00:00.000Z",
});

非公開処理が完了すると scheduledUnpublishAt に設定されていた値はクリアされます。