コンテンツをJSONでエクスポートする

入門 約10分 最終更新 2026-09-15

ShareDan CMS は、サイトのコンテンツをJSONのZIPへ一括エクスポートできます。バックアップ、他システム・自前基盤への持ち出し(データポータビリティ)、オフラインでの一括処理や分析、検証環境へのシードなどに使えます。本ガイドでは、管理画面での書き出し操作と、生成されるZIPの中身、そして書き出したJSONを開発側で扱う方法を解説します。

これは管理画面の機能です。エクスポートはサイト管理者が管理画面から実行します(公開API経由のエンドポイントではありません)。読み取り専用の公開API(X-API-KEY)に書き込み・エクスポート系のエンドポイントはありません。日常の配信は公開API/SDK、まとめての持ち出しは本機能、と使い分けます。

1. エクスポートでできること

サイト設定の「データエクスポート」から、書き出す対象を選んでJSONのZIPを生成します。対象にできるのは次のコンテンツです(そのサイトで利用していない機能は選択肢に出ません)。

  • 投稿:種別(お知らせ・事例など)ごとに絞り込み可。下書きも含められます。
  • FAQ/固定コンテンツ:公開・非公開を含めて書き出せます。
  • カテゴリ・種別:投稿種別の定義とカテゴリ。
  • フォーム送信データ:フォームから届いた送信内容。
  • ファイル管理:アップロード済みファイルのメタ情報(配信URL付き)。

実行できるのは管理者ロールのみで、すべてのプランで利用できます。生成はサーバー側で非同期に行われるため、件数が多いサイトでも画面を開いたまま待つ必要はありません。

2. 書き出す(管理画面の操作)

管理画面の「サイト設定 → データエクスポート」カードから実行します。

  • 対象機能を選ぶ:投稿は種別ごと、そのほかは機能ごとにチェック。各機能の件数が横に表示されます。
  • 「下書きを含める」:既定ON。ONだと投稿の下書き(post_drafts.json)や非公開のFAQ・固定コンテンツも含みます。OFFにすると公開済みのものだけになります。
  • 実行:受け付けられるとバックグラウンドで生成が始まります(受付→生成中→完了)。
  • 受け取り:完了するとダウンロードリンクをメールで通知します。カードの履歴一覧からも再ダウンロードできます。
大きいサイトでも待たなくてOK。生成は非同期ジョブで処理されるので、実行後は画面を離れても構いません。完了メールが届いたらダウンロードしてください。

3. ZIPの中身

ZIPには、書き出し情報をまとめた manifest.jsonと、選んだ対象機能ごとのJSONファイルが入ります。各JSONはレコードの配列で、UTF-8・整形済み(pretty print)です。

ファイル内容(出力条件)
manifest.json エクスポートのメタ情報(書き出し日時・形式・下書きの有無・対象種別・サイト・総件数)。常に含まれます。
posts.json 投稿(公開版)。「投稿」を選んだとき。種別で絞り込んだ場合はその種別だけ。
post_drafts.json 投稿の下書き。「投稿」を選び、かつ「下書きを含める」がONのときだけ。
faqs.json FAQ。「FAQ」を選んだとき。
contents.json 固定コンテンツ。「固定コンテンツ」を選んだとき。
post_types.json 投稿種別の定義。「カテゴリ・種別」を選んだとき。
categories.json カテゴリ。「カテゴリ・種別」を選んだとき。
form_submissions.json フォームの送信データ。「フォーム送信データ」を選んだとき。
files.json ファイルのメタ情報(url・thumbnail_url/ZIP内の実体パス archive_path・thumbnail_archive_path 付き)。「ファイル管理」を選んだとき。
files/… ファイルの実体そのもの(画像原本・サムネイル・PDF等の非画像ファイル)。「ファイル管理」を選んだとき、各ファイルを files/{s3キー} に同梱します。

manifest.json は次のような内容です。

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
}
「ファイル管理」を選ぶと、ファイルの実体(バイナリ)もZIPに同梱されます。画像原本・サムネイル・PDFなどの非画像ファイルを 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.ts
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の保管・共有は取り扱いに注意してください。
  • 持ち出し後は自己管理:エクスポートはあくまでスナップショットです。以降の更新は反映されないため、最新が必要になったら再度書き出してください。
用途のヒント:定期バックアップ、別ドメイン/検証環境へのシード、全文検索インデックスの再構築、コンテンツの棚卸し・分析など、公開APIのレート制限を気にせず全件をまとめて処理したいときに向いています。
FEEDBACK

このページはお役に立ちましたか?

改善要望・不具合・ドキュメントの分かりにくい点など、お気軽にお寄せください。いただいた内容は今後の改善に役立てます。

返信をご希望の場合のみご記入ください。

スパム対策(レートリミット・ハニーポット・送信速度チェック)はサーバ側で自動適用されます。