前回の手順で、ブログの記事一覧を取得して Sanity Studio で投稿一覧を参照することができるようになりました。今回は投稿しているコンテンツについてもう少し細かく処理をしていきます。
ここでの手順に関する公式のページは以下のとおりです。
コンテンツのタイプについて
Wordpress で管理しているコンテンツのタイプとしては、今回はブログの記事、それと連携するタグ、ページ、編集者などの項目があります。それぞれのデータを移行して、事前に定義してたスキーマに割り当てて行く部分の処理を追加していきます。
例えば、タグのデータを移行するのであれば、以下のようなコマンドの実行で移行ができるようにする形に変更していきます。
コンテンツタイプの定義
コンテンツのタイプに関して、migrations/import-wp/constants.ts のファイルに対して定義を追加します。
続いて、コマンドラインの引数を取得して処理を切り替えることができるように、./migrations/import-wp/lib/getDataTypes.ts のファイルを作成して以下のコードを追加します。
作成した上記のファイルを有効にするために、migrations/wp-import/index.ts のファイルを以下のように更新します。
これで各タイプに対して実行できるようになりました。まず、posts に関して以下のコマンドを実行します。
正しく処理ができていることを確認できれば、続いて以下のコマンドを実行してください。
今回は元のサイトで複数ユーザーを利用していないため、最後の users に関してはデータが何もインポートされることはありません。ページのデータを正しいデータスキーマのタイプにデータを渡せているのを以下で確認ができます。

投稿タイプに合わせたデータ移行
今の所、どの投稿タイプに対しても動くようにタイトルのみを取得してコンテンツを移行する形として動かしていました。実際にはそれぞれのコンテンツのタイプに合わせて、データの移行に関して調整をする必要があります。ここからはこの部分を進めていきます。
Sanity Studio の型定義のファイルを作成
すでに定義している Sanity Studio におけるスキーマの定義から、型の定義ファイルを作成していきます。この手順は、以下の手順で作成することが可能です。
まず、スキーマの情報を json ファイルとして出力します。
上記のコマンドを実行すると、schema.json のファイルが作成されます。作成されたファイルを利用して、型定義のファイルを生成するためには以下のコマンドを実行してください。
sanity.types.ts のファイルが作成されて、Sanity Studio で管理をしているコンテンツのタイプに関しての型の定義ファイルが作成できました。
移行スクリプトの更新
実際にそれぞれの投稿タイプに対して、データを移行する手続きを追加していきます。まず最初にブログの投稿の処理を実行するために、migrations/import-wp/lib/transformToPost.ts のファイルを追加します。
この処理を post を引き数として呼ばれた際に実行できるように、migrations/import-wp/index.ts のファイルを以下のように更新します。
ブログ投稿に最適化する
migrations/import-wp/lib/transformToPost.ts のコードでは、まだタイトルの処理のみを追加している形です。実際に用意しているコンテンツのタイプに合わせてデータを移行するように、コードを追加していきます。
例えば、slug に関しては以下のようなコードになります。
カテゴリに関しては ID を利用して参照している点、そして複数のカテゴリを指定する形となっています。そこで、以下のような処理を追加します。
同様に編集者、日付、ステータス、タグのコードを追加していきます。
カスタムのメタデータの項目がある場合は、公式のページを参照してください。Sanity で定義するスキーマを追加して、そこにデータをコピーする手順が記載されています。
最終的にアップデートをしたファイルは以下のようになります。
改めて、posts に関してインポートの手順を実行します。
実行後、Studio でコンテンツを確認すると slug などのデータが追加されていることを確認できます。

まとめ
今回は Post のデータに関しての基本データのインポートまで進めていきました。これまでの手順の結果に関しては以下のブランチで公開しています。
次のステップでは、画像などのアセットの移行を進めていきます。