理系大学院生のぼちぼちITノート

【実践】WordPressからmicroCMSへ!簡単な記事移行スクリプトと注意点

WordPressからNext.jsとヘッドレスCMS(microCMS)へ移行する際、最も重要な工程の一つが既存記事の移行です。
この記事では、最もシンプルかつ確実にデータを移行するためのNode.jsスクリプトと、その手順について解説します。

本記事で紹介する方法では、元の公開日やタグは維持されません。
これらは移行後に手動で設定することを前提とした、最低限のデータ移行を目指します。

移行の事前準備

スクリプトを実行する前に、3つの準備が必要です。

1. WordPressからのデータエクスポート

WordPressの標準機能である「WP REST API」を使い、記事データをJSON形式で取得します。ブラウザで以下のURLにアクセスしてください。

https://あなたのWordPressサイトURL/wp-json/wp/v2/posts?per_page=100

(記事が100件を超える場合は、末尾に&page=2などを付けて複数回アクセスします)

表示されたテキストデータを全てコピーし、プロジェクトのルートにwordpress_posts.jsonという名前で保存します。

2. microCMSのAPI設定【重要】

移行時のエラーを回避するための、最も重要なステップです。

  1. microCMSの管理画面で、ブログ記事用のAPIを開きます。
  2. 「API設定」タブに移動します。
  3. tags(タグ)やdescription(概要)など、必須項目になっているフィールドの「必須」チェックを一時的に全て外します。

これにより、「descriptionフィールドが必須です」といったエラーを防ぐことができ、スクリプトがシンプルになります。移行が完了した後に、忘れずに必須設定に戻しましょう。

3. カテゴリの準備とID対応表の作成

移行スクリプトがWordPressのカテゴリを正しく認識できるよう、先にmicroCMS側でカテゴリを作成し、IDの対応表を用意しておきます。

  1. microCMSで、WordPressで使っていたカテゴリをすべて作成します。
  2. それぞれの「コンテンツID」をメモします。
  3. 後のスクリプト内で、WordPressのID(数字)とmicroCMSのコンテンツID(文字列)を紐付ける対応表を作成します。

移行スクリプトの実装

準備が整ったら、データ移行を実行するNode.jsスクリプトを作成します。

ライブラリのインストール

まず、ターミナルで以下のコマンドを実行し、microCMSのSDKをインストールします。

Bash

npm install microcms-js-sdk

migration.jsの作成

プロジェクトのルートにmigration.jsというファイル名で、以下のスクリプトを記述します。

JavaScript

const { createClient } = require('microcms-js-sdk');
const fs = require('fs');

// ▼▼▼【設定箇所】▼▼▼
// --- 1. microCMS接続情報 ---
const client = createClient({
  serviceDomain: 'YOUR_SERVICE_DOMAIN', // あなたのサービスドメイン
  apiKey: 'YOUR_API_KEY',             // あなたのAPIキー
});

// --- 2. カテゴリID対応表(例) ---
const categoryMap = new Map([
  // [WordPressのカテゴリID, 'microCMSのカテゴリID'],
  [3, 'aws'],
  [6, 'certification'], 
  [4, 'investing'],
]);
// ▲▲▲【設定ここまで】▲▲▲

async function runMigration() {
  console.log('移行処理を開始します...');
  const posts = JSON.parse(fs.readFileSync('./wordpress_posts.json', 'utf8'));

  for (const post of posts) {
    const wpCategoryId = post.categories[0]; 
    const microCMSCategoryId = categoryMap.get(wpCategoryId);
    
    // 移行するデータをタイトル、本文、カテゴリに限定
    const content = {
      title: post.title.rendered,
      content: post.content.rendered,
      category: microCMSCategoryId || null,
    };

    try {
      // 公開状態でコンテンツを新規作成(公開日は自動で登録時の日時になる)
      await client.create({
        endpoint: 'blog',
        content: content,
        status: 'published',
      });
      console.log(`✅ 成功: 「${content.title}」を移行しました。`);
    } catch (error) {
      console.error(`❌ 失敗: 「${content.title}」の移行に失敗しました。`);
      console.error('エラー詳細:', error.message);
    }

    // API制限を避けるため1秒待機
    await new Promise(resolve => setTimeout(resolve, 1000));
  }
  console.log('🎉 すべての記事の移行が完了しました!');
}

runMigration();

スクリプトの実行

設定項目を書き換えたら、ターミナルで以下のコマンドを実行します。

Bash

node migration.js

移行後の作業

スクリプトの実行が完了したら、microCMSの管理画面でデータが正しく登録されているか確認してください。
この時点では、公開日はすべて実行時の日時になり、タグや概要は空のはずです。

ここから、以下の手作業を行います。

  1. microCMSのAPI設定で、必須項目のチェックを元に戻す。
  2. 各記事の編集画面を開き、正しいタグや概要、公開日、アイキャッチ画像を設定し直す。

まとめ

今回、Node.jsを活用したWordPressからmicroCMSへの移行について紹介しました。
ただ今回の方法だけでは、自分でアイキャッチ画像やタグの設定を行う必要があるため、より良い方法があれば追記します。

これからもNext.jsを使ったサイト運営についても発信していくので、ぜひこのサイトをブックマークしてくれると嬉しいです。