🔖

microCMSで filters を使うときに「limit」を指定し忘れる落とし穴

に公開

背景

技術ブログやニュースサイトで、カテゴリ別の一覧ページ(例:/category/business)を作るなら、getStaticPathsなどを使って、特定カテゴリの記事を取得→ページネーション…という実装が一般的です。

よくある実装例

export async function getStaticPaths({ paginate }) {
  const res = await getNews({
    filters: "works[equals]type1",
    orders: "-publishedAt",
    limit: 100,
  });
  return paginate(res.contents, { pageSize: 10 });
}
  • filters でカテゴリ絞り込み
  • limit で 最大100件 を取得
  • paginate(..., { pageSize: 10 }) で10件ずつのページ分け

一見問題なさそうですが、limitを省くと問題が起きることがあります。

「limit」を省略すると…

自作ラッパーや第三者パッケージ (fetchAllNews() など) によっては、

  • limit がない=全件取得、とみなすもの
  • filters が効かず全データを取ってくる実装になっているものも

結果:

  • フィルター対象外データまで取得してしまい
  • ビルドが極端に遅くなる
  • さらにAPI制限に引っかかるリスクもあります。

✅ 対策ポイント

常に明示的にlimitを指定しましょう。
「どれだけ取得するか」を意識して、安全値を決めておくのが大切です。

const res = await getNews({
  filters: "works[equals]type1",
  orders: "-publishedAt",
  limit: 100, // 明示的に指定
});

✏️ 参考

この記事の内容は、次のページを元に解説しました:
microCMSで limit を省くとフィルターが効かないケースがある

Discussion