microCMSのエクスポートは、Team以上なら管理画面のCSV出力、APIならSDKのgetAllContentsを使います。HobbyでもGET APIのJSONをCSVに変換できます。画像本体とスキーマは別に保存します。

本記事はgenko.meの運営側が執筆しています。2026年10月23日に公式資料を確認しました。移行だけでなく、バックアップや棚卸しにも使える手順です。

microCMSのCSVエクスポートは管理画面からできる?

公式CSVエクスポート手順では、Team・Business・Enterpriseが対象です。

  1. 対象APIのコンテンツ一覧を開きます。

  2. 全件なら「全てのコンテンツ」を選び、フィルターや検索条件も解除します。

  3. 「CSVエクスポート」を押し、名前と対象条件を確認して開始します。

  4. 完了メールのリンクからダウンロードします。リンクは実行者本人だけが使用でき、有効期限は24時間です。

「公開中かつ下書き中」は同じIDが2行になるため、行数と記事数は異なります。参照先のコンテンツ・メディア・メンバーを読む権限がない値はNO_READ_PERMISSIONになります。書き出し中は編集を止めます。

microCMSで全件取得するには?limit・offset・totalCount

一覧APIはGET https://{service}.microcms.io/api/v1/{endpoint}です。limitの既定値は10、最大100です。limit=1000では全件取得できません。

limit=100でoffset=0、100、200と進めてcontentsを連結し、次の開始位置がtotalCount以上なら終了します。全件保存ではfilters・q・fieldsを指定しません。

TypeScriptで全件取得してJSONを保存する

SDKのgetAllContents({ endpoint, queries?, customRequestInit? })は配列を返し、queriesにlimit・offset・idsは指定できません。オブジェクト形式はgetObjectを使います。

Node.js 22以降で実行します。

bash
npm install microcms-js-sdknpm install --save-dev tsx

export.tsとして保存します。環境変数は実行環境に設定し、キーをGitに入れません。

typescript
import { writeFile } from "node:fs/promises";import { createClient } from "microcms-js-sdk";
async function main() {  const serviceDomain = process.env.MICROCMS_SERVICE_DOMAIN;  const apiKey = process.env.MICROCMS_API_KEY;  const endpoint = process.env.MICROCMS_ENDPOINT;  if (!serviceDomain || !apiKey || !endpoint) {    throw new Error("Missing microCMS environment variables");  }  const client = createClient({ serviceDomain, apiKey, retry: true });  const contents = await client.getAllContents<Record<string, unknown>>({    endpoint,    queries: { depth: 0 },  });  await writeFile("export.json", JSON.stringify({ contents }, null, 2) + "\n");  console.log(`Exported ${contents.length} items`);}main().catch((error) => {  console.error("Export failed:", error instanceof Error ? error.message : error);  process.exitCode = 1;});
bash
npx tsx export.ts

サービス名とblogなどのエンドポイントを指定します。depth: 0は参照をIDだけにし、参照先APIも別に保存します。

APIキーの権限は対象APIのGETだけに絞ります。下書き・公開終了には各全取得権限も必要です。APIキーと書き出したファイルは、公開されない場所に保管します。

編集を止め、件数とID重複を確認します。制限事項では最大応答サイズは約5MBです。サイズ超過時はgetListでlimitを減らし、offset・totalCountで逐次取得します。GETのレート制限はサービス単位で毎秒60回のオリジンアクセスです。エッジキャッシュから返った分は数えられませんが、サイト本番の取得も合算されます。429などでは待って再試行します。

microCMSのJSONをCSVに変換する方法

to-csv.tsに保存してnpx tsx to-csv.tsで実行します。キーを列にし、配列・オブジェクトはJSON文字列にします。確認用で、移行先への直接投入用ではありません。

typescript
import { readFile, writeFile } from "node:fs/promises";
async function main() {  const { contents } = JSON.parse(await readFile("export.json", "utf8")) as {    contents: Record<string, unknown>[];  };  const columns = [...new Set(contents.flatMap((row) => Object.keys(row)))];  const cell = (value: unknown): string => {    let text = value == null ? "" : typeof value === "object"      ? JSON.stringify(value) : String(value);    if (/^[\s]*[=+\-@]/.test(text)) text = "'" + text;    return `"${text.replace(/"/g, '""')}"`;  };  const rows = [columns.map(cell).join(","), ...contents.map((row) =>    columns.map((key) => cell(row[key])).join(","))];  await writeFile("export.csv", "" + rows.join("\r\n") + "\r\n", "utf8");}main().catch((error) => {  console.error("CSV conversion failed:", error instanceof Error ? error.message : error);  process.exitCode = 1;});

BOMとCSVのエスケープを付け、式と解釈されやすいセルに'を加えます。この処理で-1のような負の数にも'が付くため、移行の原本にはJSONを使います。

フィールド

CSVだけで移すときの問題

整理方法

リッチテキスト

HTMLや埋め込み画像が1セルに入ります

HTMLを保持し、画像URLを別に収集します

繰り返し・カスタム

入れ子と項目順を表で表しにくいです

JSONを保存し、移行先に合わせて再設計します

参照・複数参照

IDだけでは参照先本文を復元できません

参照先APIとID対応表を保存します

画像・複数画像

URLはファイル本体ではありません

本体の保存とURL対応表を別に用意します

microCMSの画像・メディアもエクスポートするには?

画像のurl、複数画像、本文のsrcを集めます。未使用画像も必要なら、公式のメディア書き出し案内に従い、マネジメントAPIのGET /api/v2/mediaで一覧を取得します。「メディアの取得」権限が必要です。

メディア一覧APIのlimitは最大100で、続きはoffsetではなくtokenを使います。有効期限は15秒なので、一覧収集後にダウンロードします。初回は末尾でもトークンが返るため、終了は件数とtotalCountで判定します。

マネジメントAPIの制限はIP単位で10秒に10回です。URL対応表を残し、PDFや本文も確認します。

microCMSのエクスポートをgenko.meへ移行する手順

genko.meでは、microCMSのapiFieldsを持つスキーマJSONを読み込めます。コンテンツと画像の無変換一括移行ではありません。インポートとエクスポートの形式に合わせます。

  1. microCMSの「API設定」→「APIスキーマ」からJSONを保存し、genko.meのスキーマ画面で読み込みます。未対応の種類は設計し直します。

  2. 項目IDと型を合わせ、revisedAtなど不要なキーを除いたJSONを作ります。

  3. 画像をgenko.meに登録し、メディアIDを含む値に置き換えます。参照先も登録してIDを合わせます。

  4. 対象APIの「インポート」でJSONを選び、まず下書きとして取り込みます。

  5. 件数・ID・本文・画像・リンクを確認してから公開します。

title・bodyだけなら次の形です。

json
{  "contents": [    { "id": "first-post", "title": "最初の記事", "body": "<p>本文です。</p>" }  ]}

2026年10月時点で1ファイル10MB、1回1,000件までです。両方の上限内に分割します。IDは条件内なら維持できますが、重複で停止し、保存済みの分は残ります。公開状態・作成日時・公開予約は復元されません。元の公開日は専用の日時項目へ移します。配信値と保存値の違いはレスポンスの値も確認してください。

比較記事、Hobbyの見直しは無料プランの上限で整理しています。microCMSの継続利用も選べます。

よくある質問

microCMSを無料でエクスポートできますか?

HobbyでもGET APIで取得してJSON保存やCSV変換を行えます。管理画面のCSV出力はTeam以上が対象です。

microCMSで100件を超えて全件取得できますか?

getAllContentsを使うか、getListのlimitとoffsetでページを進めます。全件はキーと取得条件で読める件数です。

下書きと公開終了の記事もエクスポートできますか?

APIではGETに加え、それぞれの全取得権限が必要です。公開中の未公開変更は、CSVの版別行と実際の返却値で保存範囲を確認します。

CSVを保存すれば画像もバックアップできますか?

URLだけでは本体は保存されません。ファイルをダウンロードし、本文内画像も確認します。

出典