株式会社メンバーズ メンバーズルーツカンパニーの岡田です。
WordPressでサイト構築を担当していた経験を生かして、現在はmicroCMSを利用したJamstack構成の開発に携わっています。
さて、無料で提供されているCMSとして世界で圧倒的なシェアを獲得しているWordPressですが、セキュリティの不安やメンテナンスコストなどの課題から、ヘッドレスCMSへの移行を検討している方も多いかと思います。
本記事では、WordPressからmicroCMSにコンテンツを移行する方法について、Node.js環境で実行できるサンプルコードを交えてご紹介いたします。
弊社でもWordPressで管理していた公式サイトをmicroCMSとAstroを利用したJamstack構成に移行した実績があります。WordPressからの移行を検討されている方の参考になれば幸いです。
まず前編では、準備編として移行手段の選び方や大まかな手順について解説します。
WordPressからmicroCMSへ移行する前に考えること
特定のCMSからコンテンツを移行する機能は提供していない
本記事執筆時点(2024年9月)では、microCMS公式サポートツールとしてWordPress上のコンテンツをmicroCMSに移行する機能は提供していません(*1)。
一方で現在、他のCMSからmicroCMSに移行する際の参考情報として、以下のようなヘルプやブログ記事が用意されています。
これらの前提や参考情報を踏まえたうえで、コンテンツの移行を検討する必要があります。
(*1)将来的には、WordPressからの移行アシストツールを提供される見込みとのことです(参考:microCMSの開発ロードマップ)。
microCMSへコンテンツを移行する流れ
CMSのコンテンツ移行は、一般的に下記の流れとなります。
本記事においても、この流れに沿って移行する方法をご紹介します。
- 移行元のデータを取得する
- 取得したデータを移行先に適したデータ形式へと対応させる
- 移行先のCMSへコンテンツを登録する
本記事では、WordPressの移行データを用意する手段も含めて説明していきますので、移行を検討されている方は読み進めていただければ幸いです。
microCMSへコンテンツを登録する3つの方法
前述したコンテンツ移行の流れにおける手順3「移行先のCMSへコンテンツを登録する」について、さらに解説します。
microCMSにコンテンツを登録する方法として、主に次の3つが存在します。
- microCMSのコンテンツ編集画面から手動にて個別で登録する
- CSVファイルを元に、コンテンツを一括で登録する(CSVインポート)
- コンテンツAPI(POST / PUT)リクエストを送信し、コンテンツを登録する
1. microCMSのコンテンツ編集画面から手動にて個別で登録する
コンテンツ編集画面を利用した最も直感的な方法です。
WordPressの個別の投稿編集画面で入力している情報をmicroCMSのコンテンツ編集画面に登録することになりますので、両者の管理画面での差異を確認しながら登録することができます。
とはいえ、手動で大量のコンテンツを移行することは現実的ではありません。この作業をシステマティックに代替する手段が、以降の2, 3で説明する方法となります。
2. CSVファイルを元に、コンテンツを一括で登録する(CSVインポート)
CSVファイルを用いて複数のコンテンツを一括で登録する方法です。
インポートに利用するためのCSVファイルのフォーマットは、登録するAPIスキーマに応じて、microCMSの管理画面からダウンロードできます。
WordPressには投稿データをCSVファイルに出力するプラグイン(WP CSV Exporter等)も作成されていますので、こちらを利用することでデータの整理が容易になるでしょう(microCMSへのCSVインポートに適した形で生成されるわけではありませんので適宜調整をする必要があります)。
一方、この方法の利用には本記事執筆時点(2024年9月)でいくつかの制約があります。
下記の条件にあたる場合には利用することができないため、後述するコンテンツAPIを利用した方法をご検討ください。
- microCMSに既にコンテンツが登録されている場合
- コンテンツの公開ステータスを任意(公開中 or 下書き中)に設定したい場合
- CSVインポートに対応していないフィールドを利用したい場合(画像、カスタムフィールド他)
3. コンテンツAPI(POST / PUT)リクエストを送信し、コンテンツを登録する
microCMSのコンテンツAPI(POST/PUT)を利用してプログラムによってコンテンツを登録する方法です。
リクエストのためのスクリプトが必要となりますが、全てのフィールドに対応して登録することができます。また、コンテンツの公開ステータスを任意に設定(公開中 or 下書き中)することができます。
コンテンツAPIの詳細については、以下のmicroCMS公式ドキュメントをご覧ください。
POSTとPUTの両者の主な違いとしては、PUTリクエストではコンテンツIDを指定して登録が可能、という点が挙げられます。
WordPressからの移行にはコンテンツAPIを利用するのがベター
さて、これまでにmicroCMSへの移行について説明してきましたが、WordPressからmicroCMSへのコンテンツ移行を検討する際、特に考慮すべきなのは、移行したいデータの形式に対応した登録方法であるかという点です。
CSVインポート機能では、リッチエディタ(※プレーンテキストでの登録のみ可能)や画像といったWordPressで入稿されたデータに非対応のフィールドが存在してしまうため、そうしたデータも含めて移行するためには、全てのフィールドに対応しているコンテンツAPIを利用した登録方法を利用することになります。
今回ご紹介する方法においても、コンテンツAPI(POST/PUT)を利用する方法をご紹介します。
▼CSVインポート と コンテンツAPI(POST / PUT)の比較
※表内の「WRITE API(POST / PUT)」はコンテンツAPIのPOST / PUTを指しています。
参照: microCMSに大量コンテンツを登録する方法まとめ
移行手順
今回は、下記のスキーマで構成されているWordPressのコンテンツをmicroCMSに移行する手順を解説します。
- 投稿
- タイトル
- 本文(ブロックエディタ)
- 著者
- アイキャッチ画像
- カテゴリ参照
- タグ参照
- カテゴリ
- タグ
まずは手順の全体像をステップごとに説明します。移行に用いる具体的なコードについては後ほど解説します。
なお、移行プロセスの全体像は以下のようになっています。
【STEP.0】事前準備
0-1. microCMS側の準備
microCMSのアカウント登録及び移行先であるサービスは作成済みの状態にしておく必要があります。契約プランに関しましては、ファイルのアップロードの機能制限があるため、Teamプラン以上を対象とします。
公式ドキュメントにて、アカウントを作成する手順が記載されておりますので参考にしてください。
また、本記事の移行方法では、データの登録のためにmicroCMSの「コンテンツAPI」と「マネジメントAPI(*2)」を利用するので、APIキーの権限設定からコンテンツAPIのPOSTとマネジメントAPIのメディアのアップロードの許可を設定してください。
(*2)2024年9月時点でベータ版の機能となります。以降の記述も同様。
0-2. WordPress側の準備
移行元となるWordPressは、管理者権限を持ったアカウントで管理画面にログインできるサイトを対象とします。
また、WordPressのインストールディレクトリからFTP接続等でファイル転送が行えるようにしてください。
【STEP.1】WordPressから移行元のデータを取得する
WordPressからmicroCMSに投稿内容を移行するためには、WordPressの投稿データとメディアデータをエクスポートする必要があります。
エクスポート自体は複雑なスクリプトが必要なわけではなく、下記の手順で実施することができます。
1-1. 投稿データをエクスポートする
投稿データのエクスポートには、WordPress標準搭載のエクスポート機能を利用します。
こちらのエクスポートを行うことで、WordPressの投稿、固定ページ、コメント、カスタムフィールド、カテゴリー、タグの情報を取得することができます(こちらの機能で取得できない情報は移行できませんので、ご了承ください)。
具体的な手順としては、WordPress管理画面のサイドメニューの「ツール」タブの「エクスポート」画面から、エクスポートファイルをダウンロードすることができます。
こちらの機能でエクスポートした投稿データは、XML形式のファイルとして出力されます。
1-2. メディアデータをエクスポートする
メディアデータは、WordPressのインストールディレクトリ内の`/wp-content/uploads/`
をFTP等でダウンロードして取得します。
【STEP.2】microCMSにデータを登録する
microCMSにデータを登録するには、「コンテンツAPI(POST/PUT)」及び「マネジメントAPI」を利用します。
後ほどコンテンツを登録する際に利用するため、先にメディアをアップロードする方法について説明をします。
2-1. メディアをアップロードする
メディアファイルは、『マネジメントAPI:POST /api/v1/media』を利用してアップロードを行います。
こちらのAPIは、1リクエストにつき、1ファイルのアップロードを実行します。
ファイルのアップロードに成功した場合には、アップロードしたファイルのURLを取得することができます。
WordPressからダウンロードしたメディアファイルに対して、こちらのマネジメントAPIを利用してmicroCMSにアップロードを行い、アップロードされたメディアのURLを取得します。
取得したURLは、コンテンツで参照しているメディアファイルのURLの差し替えに利用します。
2-2. 投稿データに合わせてAPIを作成する
移行する投稿データに合わせて、あらかじめmicroCMSにAPIを用意しておく必要があります。
APIは、WordPress上で管理している要素(投稿タイプ、カテゴリ、タグ)ごとに作成します。
今回は、事前に「投稿」「投稿カテゴリ」「投稿タグ」の3つのAPIを作成します。
それぞれのAPIのスキーマは以下のとおりです。
▼投稿
"title": テキストフィールド
"contents": リッチエディタ
"author": テキストフィールド
"eyecatch": 画像フィールド
"categories": 複数コンテンツ参照 - 投稿カテゴリ
"tags": 複数コンテンツ参照 - 投稿タグ
▼投稿カテゴリ
"name": テキストフィールド
"description": テキストエリア
▼投稿タグ
"name": テキストフィールド
"description": テキストエリア
2-3. コンテンツを登録する
『コンテンツAPI:POST /api/v1/{endpoint}』を利用して、各APIごとにコンテンツを登録します。
ここでは、WordPressからエクスポートしたXML形式のファイルを利用します。
XML(Extensible Markup Language)とは、データを構造化して保存するためのマークアップ言語です。WordPressのエクスポートファイルでは、下記のような構造となっています。
// data/WordPress.YYYY-MM-DD.xml
(省略)
<wp:term>
<wp:term_id>9</wp:term_id>
<wp:term_taxonomy><![CDATA[category]]></wp:term_taxonomy>
<wp:term_slug><![CDATA[important-notice]]></wp:term_slug>
<wp:term_parent><![CDATA[]]></wp:term_parent>
<wp:term_name><![CDATA[重要なお知らせ]]></wp:term_name>
</wp:term>
(省略)
<item>
<title><![CDATA[シンプル投稿]]></title>
<link>http://localhost:8080/%e3%83%86%e3%82%b9%e3%83%88%e6%8a%95%e7%a8%bf/</link>
<pubDate>Wed, 07 Aug 2024 07:26:55 +0000</pubDate>
<dc:creator><![CDATA[admin]]></dc:creator>
<content:encoded><![CDATA[]]></content:encoded>
<wp:post_id>6</wp:post_id>
<wp:post_date><![CDATA[2024-08-07 16:26:55]]></wp:post_date>
<wp:post_date_gmt><![CDATA[2024-08-07 07:26:55]]></wp:post_date_gmt>
<wp:status><![CDATA[publish]]></wp:status>
<wp:post_type><![CDATA[post]]></wp:post_type>
<category domain="category" nicename="important-notice"><![CDATA[重要なお知らせ]]></category>
(一部省略)
</item>
(省略)
このエクスポートファイルは、WordPressで管理しているコンテンツデータをすべて持っています。例えば、”ブログ”の投稿タイプのコンテンツデータを登録したい場合には、エクスポートファイルから”ブログ”の投稿タイプでコンテンツデータを抽出して、APIスキーマに沿った登録内容を構築します。
また、このタイミングではコンテンツデータに含まれているメディアの参照先がWordPressのメディアファイルのままなので、メディアファイルをアップロードして得られたURL(images.microcms-assets.io/~)に差し替えます。
上記を踏まえたうえで、コンテンツAPIのPOSTリクエストで、作成したAPIのエンドポイントに向けてコンテンツを送信すると、microCMSにコンテンツを登録することができます。
次回について
前編では、WordPressからmicroCMSへコンテンツを移行するチュートリアルの「準備編」として、WordPressおよびmicroCMSで必要な事前準備と大まかな移行の流れについて解説しました。
後編では、チュートリアルの「実行編」として、移行に用いる具体的なサンプルコードの解説をメインに説明します。