StrapiでCSV・JSON形式でのエクスポート・インポートを可能にするプラグイン「strapi-plugin-import-export-content」を紹介します。
CSVのエクスポート・インポートができるプラグイン「strapi-plugin-import-export-content」
CSVのエクスポート・インポートには「strapi-plugin-import-export-content」というプラグインが便利です。
このプラグインをインストールすると、StrapiのコンテンツデータをCSV形式またはJSON形式でエクスポートしたり、逆にインポートしたりすることができるようになります。Strapiのデータを別のシステムに取り込んだり、Strapiを別のシステムに移行したりするときに便利です。
プラグインのインストール
strapi-plugin-import-export-contentは、npmでインストールできます。
npm i strapi-plugin-import-export-content
インストールできたら、cleanオプションをつけて、フロントエンドをビルドする必要があります。
npm run build --clean
リビルドしないと、せっかくインストールしたプラグインが表示されない場合があるようです。必ずビルドしておきましょう。
Strapiでプラグインをインストールしたはずなのに表示されない場合は、フロントエンドをリビルドしてみることをおすすめします。
コンテンツをエクスポートする(移行元)
ダッシュボードに追加された[Import/Export Content]をクリックします。
[Export Data]タブを選択し、コンテンツをエクスポートします。
CSVのほか、JSONも選択できます。データベースの移行については、どちらでも行なえますので、お好みで選べばよいでしょう。エクスポートしたデータは、クリップボードにコピーしたり、ダウンロードすることができます。
コンテンツをインポートする(移行先)
エクスポートしたコンテンツをインポートします。
[import Data]タブを選択し、エクスポートしたデータを貼り付けます。[Import Source]から[Raw text]を選択すると、クリップボードから直接貼り付けることができます。
[Analyze]をクリックすると、解析結果がテーブルに表示されます。
[Import Data]ボタンをクリックすると、インポートが実行されます。
Upload as Draftをチェックしておくと、下書きとしてコンテンツがインポートされます。APIから取得できるようにするには、コンテンツページの[Publish]ボタンをクリックして、別途公開する必要があります。チェックを外しておけば、すぐに公開されます。
リレーション・メディアはどうなる?
気になっていたのがリレーションとメディア。
ほかのコンテンツを参照しているデータがあった場合、エラーが出てインポートできないのか、それとも自動的に参照先のデータも作成してくれるのか不明でしたが、基本的にリレーションについてはインポートされないようです。
Analyzeのページではインポートされそうな雰囲気ですが、実際にはリレーション型のカラムはnullになっていました。リレーションについては、自分で選択する必要がありそうです。
また、メディア(画像など)についても、自動的にインポートされませんでした。
ただし、リレーションについては、エクスポート時のオプションからIDを出力するようにできるみたいです。最初にリレーションの参照先のデータをインポートしておき、あとから参照元となるデータをインポートすれば、リレーションを保ってインポートできるかもしれないです。
まとめ
StrapiにCSV・JSON形式によるインポート・エクスポート機能を追加できるプラグイン「strapi-plugin-import-export-content」について紹介してみました。
Strapiは初期状態でSQLiteをデータベースに使用しています。使っているうちにSQLiteからMySQLなどほかのデータベースに移行したくなることもあるでしょう。CSVやJSONにデータをエクスポートすることで、データベース間の違いを意識することなく、かんたんにコンテンツを移行することができます。もちろん、Excelに取り込んだり、phpMyAdminから別のシステムに取り込むことだってできちゃいます。
いろいろ使えて便利ですので、Strapiを使うときはあらかじめインストールしておくと何かと役立ちそうです。
コメント
記事参考にさせて頂きました。
ありがとうございます。
nodeのバージョンに寄るのかもしれませんが、オプションを以下に修正する必要がありました。
npm run build — –clean
-> npm run build –clean
タイプミスしていました。修正しました。