
Astroを使ってサイトを構築している方で、Cloud BuildなどCI環境でビルドした際に「The collection ‘xxx’ does not exist or is empty」とい […]
この問題は、ローカルでは正常に動作するのに、Cloud Buildのような外部のCI環境でのビルド時にだけ失敗するため、原因は分かりにくいものです。
ここでは、実際に起きた例を元に、問題の原因と解決方法を解説します。
問題
Cloud Build 上で、Astroの Content Collection (例: column
, news
)が「存在しない」または「空である」としてビルド時にエラーが発生する。
原因
Astro は Content Collection を読み込んだ上で型を自動生成します。 しかし CI 環境では、この型生成コマンド (astro sync
)が実行されていないことが原因となり、ビルド時に collection を読み込めずエラーになります。
解決方法
Cloud Build の YAML に astro sync
を明示的に追加するだけで解決します!
例: cloudbuild.yaml
steps:
- name: "node"
entrypoint: "npm"
args: ["install"]
- name: "node"
entrypoint: "npx"
args: ["astro", "sync"] # これを追加
- name: "node"
entrypoint: "npm"
args: ["run", "build"]
- name: "gcr.io/cloud-builders/gsutil"
args: ["-m", "rsync", "-d", "-r", "dist", "gs://your-bucket"]
おわりに
CI/CD での Astro ビルドは、このような小さな誤差で挑戦を生みますが、原因を分かってしまえば対処は簡単です。
「Cloud Build でだけ、Content Collection が読み込まれない」という方は、是非上記を参考に解決してみてください!