よりひろい フロントエンド
Author : Kazuhiro Hara
Author : Kazuhiro Hara
Thu Feb 13 2025

Contentful で個別ページを静的出力するときも limit を設定しよう

今年このサイトの記事数が100を超えた。それはそれでめでたいことであったが同時に想定していなかった問題も出た。一部の記事が 404 Not found になったのだ。

このサイトは、Next.js の export を使ってで静的にHTMLを出力している。各記事の一覧は正常に表示されていて、各記事だけビルド時に生成されていないという状態。これはつまり個別記事生成時に問題があるということだ。現在記事一覧はページングを使って取得しているのでページあたりの記事表示数のために limit を5件に設定している。

一方個別の記事の出力時 generateStaticParams() で利用している getEntries() 関数には limit を指定していなかったのである。なんらかの方法で全ページを取得してビルドすることにしていたのだがこれがデフォルトで100件が設定されていることに気づかなかった。

よくよく考えてみれば limit がデフォルト値なしで全件取得というのは危険な API だと思うが、オープンした当時はそこまで考えが回っていなかった。ドキュメントによれば、

Note: The maximum number of entries returned by the API is 1000. The API will throw a BadRequestError for values higher than 1000 and values other than an integer. The default number of entries returned by the API is 100.

とあり、100がデフォルトで最大が1000とのこと。1000を超える場合はちょっと工夫が必要だが、しばらくは到達しそうにないので問題ないかと思われる。ということで以下のように設定。

export const generateStaticParams = async () => {
  const response = await getArticles(client, {
    locale: "ja-JP",
    "fields.publishTo": "ja",
    limit: 1000,
  });
  return response?.items?.map((item) => ({
    slug: item?.sys?.id,
  }));
};
ContentfulNext.js

Share

About site

「よりひろいフロントエンド」はじめました

いろいろやっている自分を一言で表す言葉として「より広いフロントエンド」を思いつきました。このサイトではこの言葉を中心に ウェブ、XR、UI デザイン、バックエンド、インフラストラクチャーやその周辺のことを興味の赴くまま広くディスカバリーしていきます

About Me

カンソクインダストリーズのロゴ

「よりひろいフロントエンド」運営元 カンソクインダストリーズ では、フロントエンドを中心によろずご相談お受けいたします。お気軽にお問い合わせください。