こんにちは、カスタマーエンジニアの下津曲です。
私たちが日々カスタマーサポートや商談の対応をするなかでよく話題に上がるのが、コンテンツの移行方法についてです。
とりわけ、その他のCMSで管理されている大量のコンテンツをどのようにmicroCMSに登録するか?ということが、CMSの移行においてハードルとなっており、頭を悩ませる種となっているケースが少なくありません。
microCMSではコンテンツの登録方法として、コンテンツ編集画面から入稿する以外にも大きく2つの方法があります。
今回は、それらの方法の特徴を比較しながらまとめてみたいと思います。
※本記事は「リスト形式」のAPIを対象としています。「オブジェクト形式」のAPIについては、以下の方法はご利用いただけませんのでご注意ください。
microCMSに大量コンテンツを登録する方法
1. CSVインポート
CSVファイルを元に、コンテンツを一括で登録する方法です。
管理画面に直接CSVファイルをアップロードし、ワンクリックでお手軽にインポートができるのが最大の特徴です。
機能の詳細については、microCMS公式ドキュメント「コンテンツのCSVインポート」をご覧ください。
必要なもの
- 元となるCSVファイル
以下は、実際にmicroCMSの管理画面からダウンロードできるCSVファイルのフォーマットです。
その他の特徴
- スクリプト等なしで、CSVファイルのみで登録ができる(実行時は非エンジニアでも対応可能)
- コンテンツ数が0件の場合でないと利用できない(※1)
- 一度に登録できるコンテンツ数に上限がある(※2)
- コンテンツの公開状態を選べない(※3)
- 対応していないフィールドがある(※4)
備考
(※1)APIに既存コンテンツがある場合もCSVインポートが利用できるよう、機能の改修を予定しています。ロードマップはこちら。
(※2)ご利用プランによって上限値は異なります。
(※3)すべて公開状態となります。
(※4)詳細は、下部の表「CSVインポート vs WRITE API」を参照ください。
2. WRITE API(POST / PUT)
WRITE API(POST / PUT)リクエストを送信し、コンテンツを登録する方法です。
プログラマブルにコンテンツを登録できるので、他のシステムとの連携や、自動的なワークフローへの組み込みが可能な点が特徴となります。
機能の詳細については、以下のmicroCMS公式ドキュメントをご覧ください。
両者の主な違いとしては、PUTリクエストではコンテンツIDを指定して登録が可能、という点が挙げられます。
必要なもの
- リクエストのためのスクリプト
以下は、JavaScriptでPOSTリクエストを送る場合のスクリプトのサンプルです。そのままローカルのNode.js実行環境で実行できるものをイメージしています。
※POSTリクエストが送信できるものであれば、どんな言語でもご利用いただけます。
const axios = require('axios')
const endpoint = 'https://some-service.microcms.io/api/v1/sample'
const apiKey = 'xxxxxxxx'
// 別途JSONファイルなどを読み込むなどして用意してもOK
const data = [{ title: 'テキスト1' }, { title: 'テキスト2' }]
// 1秒あたりの最大リクエスト数
const requestsPerSecond = 5
const delayBetweenRequests = 1000 / requestsPerSecond
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
}
async function postData(content) {
try {
const response = await axios.post(endpoint, content, {
headers: {
'Content-Type': 'application/json; charset=utf-8',
'X-MICROCMS-API-KEY': apiKey,
},
})
console.log('Successfully posted:', response.data)
} catch (error) {
console.error('Error posting data:', error.message)
}
}
async function postAllData() {
for (const item of data) {
await postData(item)
await delay(delayBetweenRequests)
}
}
postAllData()
その他の特徴
- スクリプトが必要なため、エンジニアの対応工数がかかる
- 既存のコンテンツ数に限らずコンテンツが登録できる
- 全てのフィールドに対応している
- 一度に登録できるコンテンツ数に上限がない(※1)
- クエリを付与することで公開状態を選べる(※2)
備考
(※1)秒間5回までの呼び出し回数制限がございます。詳細は「制限事項/注意事項」をご覧ください。
(※2)ご利用できるのはTeamプラン以上となります。
共通の注意事項
- サービスに登録できるコンテンツ数を超えて登録は不可能です。
CSVインポート vs WRITE API
上記のそれぞれの登録方法の特徴を以下の表にまとめました。
使い分けのヒント
本記事執筆時(2023年10月)の仕様では、CSVインポートはコンテンツ数が0件の場合のみご利用いただける制約がありますので、まずはその制約にあたるかあたらないか、という観点で使い分けをご検討いただくことになるかと思います。
今後の改修予定として、コンテンツが存在する場合においてもCSVインポートが利用できるようにする機能追加を予定しておりますので、そうした機能の追加後はCSVインポートの活用の幅は大きく広がりそうです。
一方で、以下の場合はコンテンツが0件の場合であってもWRITE APIをご利用いただくことになるでしょう。
- カスタムフィールドや繰り返しフィールドをAPIに含んでいる場合
- コンテンツを「下書き」のステータスで登録したい場合
2024/03/01 追記
2024年2月26日のリリースで、画像、複数画像、ファイルフィールドにAPI経由でコンテンツを入稿できるようになりました。
リリースブログ:
画像、複数画像、ファイルフィールドにAPI経由でコンテンツを入稿できるようになりました | microCMSブログ
これにより、WRITE API(POST / PUT)を利用する方法では全てのフィールドに対してコンテンツを入稿できるようになっています(フィールドの種類ごとに入力フォーマット等の制限はございます)。
なおこの変更に伴い、本ブログ内の一部の記述、図版を修正しています。
さいごに
microCMSに大量コンテンツを登録する方法として、CSVインポートとWRITE APIのそれぞれについてまとめてみました。
既存コンテンツがあるかどうかといった制約や利用可能なフィールドの制約などがございますので、用途に応じて使い分けしていただければと思います。