コンテンツをJSONでエクスポートする
ShareDan CMS は、サイトのコンテンツをJSONのZIPへ一括エクスポートできます。バックアップ、他システム・自前基盤への持ち出し(データポータビリティ)、オフラインでの一括処理や分析、検証環境へのシードなどに使えます。本ガイドでは、管理画面での書き出し操作と、生成されるZIPの中身、そして書き出したJSONを開発側で扱う方法を解説します。
X-API-KEY)に書き込み・エクスポート系のエンドポイントはありません。日常の配信は公開API/SDK、まとめての持ち出しは本機能、と使い分けます。
1. エクスポートでできること
サイト設定の「データエクスポート」から、書き出す対象を選んでJSONのZIPを生成します。対象にできるのは次のコンテンツです(そのサイトで利用していない機能は選択肢に出ません)。
- 投稿:種別(お知らせ・事例など)ごとに絞り込み可。下書きも含められます。
- FAQ/固定コンテンツ:公開・非公開を含めて書き出せます。
- カテゴリ・種別:投稿種別の定義とカテゴリ。
- フォーム送信データ:フォームから届いた送信内容。
- ファイル管理:アップロード済みファイルのメタ情報(配信URL付き)。
実行できるのは管理者ロールのみで、すべてのプランで利用できます。生成はサーバー側で非同期に行われるため、件数が多いサイトでも画面を開いたまま待つ必要はありません。
2. 書き出す(管理画面の操作)
管理画面の「サイト設定 → データエクスポート」カードから実行します。
- 対象機能を選ぶ:投稿は種別ごと、そのほかは機能ごとにチェック。各機能の件数が横に表示されます。
- 「下書きを含める」:既定ON。ONだと投稿の下書き(
post_drafts.json)や非公開のFAQ・固定コンテンツも含みます。OFFにすると公開済みのものだけになります。 - 実行:受け付けられるとバックグラウンドで生成が始まります(受付→生成中→完了)。
- 受け取り:完了するとダウンロードリンクをメールで通知します。カードの履歴一覧からも再ダウンロードできます。
3. ZIPの中身
ZIPには、書き出し情報をまとめた manifest.jsonと、選んだ対象機能ごとのJSONファイルが入ります。各JSONはレコードの配列で、UTF-8・整形済み(pretty
print)です。
manifest.json は次のような内容です。
{
"exported_at": "2026-09-15T12:00:00+09:00",
"format": "json",
"include_drafts": true,
"include_image_binaries": true,
"content_types": ["post", "faq", "content", "file"],
"post_type_ids": null,
"file_binaries_included": true,
"image_binaries_included": true,
"site": { "id": 12, "code": "main", "name": "コーポレートサイト" },
"total_count": 428
} files/{s3キー} 配下へまとめて書き出します。files.jsonは各ファイルのメタ情報+配信URL(url / thumbnail_url)に加え、ZIP内の実体の場所(archive_path / thumbnail_archive_path)を持つので、メタと実体を対応付けられます。なお、ウイルススキャンで脅威が検知されたファイルや、ストレージ上に実体が見つからないファイルは実体を同梱せず(archive_path は null)、メタ情報だけが残ります。
files.jsonのメタ+URL参照のみ(archive_path は
null)になり、ZIPが軽くなります(PDFなどの非画像ファイルは常に同梱)。manifest.jsonの
image_binaries_includedで画像実体を含むかを判別できます。なお、サイト全体のストレージ容量はご契約プランごとに上限があり(Light
1GB/Standard 5GB/Business 20GB/Enterprise
無制限)、上限を超えると画像・ファイルの新規アップロードができなくなります。
4. 書き出したJSONを扱う
投稿の本文(body)はProseMirror JSONで、公開APIが返す形式と同じです。SDKの renderProseMirror()でHTMLへ変換できます。ZIPを展開して posts.jsonを読み、静的サイトのビルドや別システムへの取り込みに使えます。
import { readFileSync } from 'node:fs';
import { renderProseMirror } from '@sharedan/cms-sdk';
// ダウンロードしたZIPを展開したディレクトリで posts.json を読む
const posts = JSON.parse(readFileSync('./export/posts.json', 'utf8'));
for (const post of posts) {
// 本文(body)は ProseMirror JSON(公開APIと同じ形式)。SDKでHTML化できる。
const html = renderProseMirror(post.body);
console.log(post.status, post.slug, post.title);
// html を静的サイトのビルドや別システムへの取り込みに使う
}
投稿の状態は status(published /
draft)で判別でき、slug や
published_atもそのまま入っています。公開APIと同じデータモデルなので、Astroで作るやNext.jsで作るで組んだレンダリング処理をそのまま流用できます。
5. 有効期限と取り扱い
- ダウンロードリンクは期限付き:成果物ZIPは非公開ストレージに保存され、署名付きの期限URL(既定24時間)でのみ配布されます。期限が切れたら管理画面から再ダウンロード(新しい期限URLを発行)してください。期限超過分は自動で削除されます。
- 個人情報の扱いに注意:
form_submissions.jsonには問い合わせ内容などの個人情報が含まれる場合があります。ダウンロードしたZIPの保管・共有は取り扱いに注意してください。 - 持ち出し後は自己管理:エクスポートはあくまでスナップショットです。以降の更新は反映されないため、最新が必要になったら再度書き出してください。
このページはお役に立ちましたか?
改善要望・不具合・ドキュメントの分かりにくい点など、お気軽にお寄せください。いただいた内容は今後の改善に役立てます。
お寄せいただきありがとうございます。今後の改善に役立てます。