eityansメモ

eityansメモ

ゆるくやっていきます

記事一覧RSS

Contentfulで定義したレスポンスをTypeScriptで使う

このブログはHeadless CMCであるContentfulで記事を作成し、Next.jsでデータを取得して表示しています。

今まで型定義を自前で用意していたのですが、自動で生成するライブラリを使うことにしました。

cf-content-types-generatorを試してみます。

contentful-typescript-codegenを使う方法を最初試していたのですが、メンテナンスがあまり活発でないことと、Contentfulのv10のアップデートに失敗してしまうことがわかりました。これから対応する方は注意してください。


型情報を含んだjsonを読み込んでTypeScriptの型を作るので、まずはそのjsonを作る準備をします。contentful-cliを使います。

1npm install -D contentful-cli

jsonを作るスクリプトをpackage.jsonに追加します。export-confing.jsonを別で作り、そこに設定値を入れます。この設定値には公開したくないアクセストークンをいれるので、gitignoreに入れてコミットしないようにします。

ちなみにmanagementTokenはCMA tokensからPATを作成することで取得しました。

1{
2  // ...
3  "scripts": {
4    "contentful-export": "contentful space export --config export-config.json"
5  }
6}
7
1{
2  "spaceId": "XXXX",
3  "managementToken": "CFPAT-XXXX",
4  "contentFile": "contentful-export.json",
5  "skipContent": true,
6  "skipRoles": true,
7  "skipWebhooks": true,
8  "skipTags": true
9}

npm run contentful-exportを実行することで、型データのjson(contentful-export.json)が作られました。

次にこの型データjsonからTypeScriptの型を作ります。cf-content-types-generatorパッケージをインストールします。

1npm install -D cf-content-types-generator

package.jsonに以下のスクリプトを追加します

1{
2  // ...
3  "scripts": {
4    "contentful-generate-types": "cf-content-types-generator contentful-export.json -o ./@types --v10 --response"
5  }
6}

スクリプトを実行することで型が生成されます

1npm run contentful-generate-types

これで型が生成されました。これで安全に開発ができます。