→ リクエスト数を制限するか、リトライ処理を組み入れてください。
時間あたりのAPIリクエスト数が、APIの呼び出し回数に関する制限を超えた場合、ステータスコード429(Too Many Requests)
が返却されます。
429エラーの回避方法としては、2つの方法が考えられます。
APIの呼び出し回数に関する制限は、オリジンへのアクセスが1秒間に60回以上行われた場合に限ります。ですので、CDNのキャッシュが使用されたときはこの制限にはあたりません。
1. リクエスト数を制限する
リクエスト処理自体を制限し、秒間に送られるリクエスト数を60件以下にする方法です。
フレームワークを利用している場合には、フレームワークの設定値を変更することによって、同時実行数を抑えたり、リクエスト間隔を設けることで、リクエスト数を制限する方法が考えられます。
JavaScript
「Promise Throttle」のようなサードパーティライブラリを利用して、リクエスト数を制限する方法が考えられます。
Next.js
以下の設定を行い、ビルド時の並列実行を制限することで、時間あたりのリクエスト数を制限することができます。
// Next.jsの設定ファイル(next.config.js)
...
experimental: {
workerThreads: false,
cpus: 1
},
...
なお、Next.js 15で試験的に導入された「Advanced Static Generation Control」では、以下のように設定できます。
staticGenerationMaxConcurrency
の値を下げ、各ワーカーが同時に処理するページ数を少なくするstaticGenerationMinPagesPerWorker
の値を上げ、複数ワーカーの起動による並列実行を少なくする
// Next.jsの設定ファイル(next.config.js)
...
experimental: {
staticGenerationMaxConcurrency: 1,
staticGenerationMinPagesPerWorker: 50,
},
...
Advanced Static Generation Controlは実験的な機能です。破壊的な仕様変更や、予期せぬエラーを招く可能性があるため、本番環境への導入は推奨されていません。
Nuxt3
concurrency
の値を低く設定し、interval
の値を大きくすることで、時間あたりのリクエスト数を制限することができます。
// Nuxt3の設定ファイル (nuxt.config.js)
export default defineNuxtConfig({
nitro: {
prerender: {
concurrency: 100, // 1スレッドで実行されるルートの数
interval: 1000, //ページ生成の際のディレイ(ミリ秒)
}
}
})
Nuxt2
concurrency
の値を低く設定し、interval
の値を大きくすることで、時間あたりのリクエスト数を制限することができます。
// Nuxt2の設定ファイル (nuxt.config.js)
...
generate: {
concurrency: 100, // 1スレッドで実行されるルートの数
interval: 1000, //ページ生成の際のディレイ(ミリ秒)
},
...
2. リトライ処理を追加する
リクエストの失敗時に備え、リトライ処理を追加する方法です。
サードパーティのリトライライブラリなどを併用することで実装します。
JavaScript
JavaScript用のSDKにでは、オプションの機能として、リトライ処理を有効化することが可能です。詳しくは以下の記事をご参照ください。
▼ microcms-js-sdkにリトライオプションが追加されました
https://blog.microcms.io/js-sdk-retry-option/
Next.js
Next.js 15を利用している場合は、実験的な機能である「Advanced Static Generation Control」のstaticGenerationRetryCount
の値を大きくして、リトライ回数を指定できます。
// Next.jsの設定ファイル(next.config.js)
...
experimental: {
staticGenerationRetryCount: 2,
},
...
Advanced Static Generation Controlは実験的な機能です。破壊的な仕様変更や、予期せぬエラーを招く可能性があるため、本番環境への導入は推奨されていません。