Astroのビルドで発生する「NoAdapterInstalled」エラーを解決する方法

Astroでプロジェクトをビルドしようとしたとき、突然NoAdapterInstalledエラーに遭遇した経験はありませんか?特に「静的サイト生成(SSG)でビルドしたいのに、サーバーサイドレンダリング(SSR)が必要と言われる」というケースでお困りの方も多いでしょう。自分だけでありませんように。
このエラーは一見小さな問題ですが、解決に時間がかかることがあります。この記事では、私自身が実際に経験したNoAdapterInstalledエラーの5つの主な原因と解決法をチェックリスト形式でご紹介します。
原因1: astro.config.*の設定ミス - output値の確認
SSGのみにするときは必ず
export default defineConfig({
output: 'static',
});にしてくださいね。してるわ、という声が聞こえてきそうですけど。
export default defineConfig({
output: 'hybrid',
});や
export default defineConfig({
output: 'server',
});にはご注意ください。
原因2: prerender = false設定の誤った使用
これが罠です。この一行どこかにないですか??
export const prerender = false;これだけでそのページは動的生成の対象になります。その影響はビルドに影響します。恐ろしや。
原因3: 動的ルートにgetStaticPaths()メソッドが未実装
これは犯罪です。[...blog]みたいな階層があるのに用意していない、それは確信犯です。
原因4: APIエンドポイントのSSG非対応問題
src/pages/apiとかあったりしませんか?諦めてください、それはSSGでは無理だと思います。
原因5: サーバー用アダプターの不要な設定
@astrojs/netlify/functions,とか@astrojs/vercel/serverlessを手違いでインストール&使用していないですか??
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
output: 'server',
adapter: vercel(),
});みたいなのがあれば消してください。
実体験:私が遭遇したNoAdapterInstalledエラーの解決策
私自身の場合は、原因2が問題でした。テスト目的で追加したprerender = false設定を元に戻し忘れていたのです。その結果、astro.config.mjsでoutput: 'static'と指定していたにも関わらず、ページレベルの設定で上書きされてしまっていました。
この経験から学んだ重要な教訓は、Astroの設定は階層的に適用されるということです。グローバル設定(astro.config.*)がページレベルの設定によって上書きされる可能性があるため、ビルドエラーが発生した際は必ずページ単位の設定も確認しましょう。
まとめ:NoAdapterInstalledエラーの解決チェックリスト
AstroプロジェクトでNoAdapterInstalledエラーが発生した際は、以下の5つのポイントを順番にチェックしてみてください:
- astro.config.*ファイルの
output設定が'static'になっているか確認する - ページレベルでの
prerender = false設定が混入していないか確認する - 動的ルーティングページに
getStaticPaths()が実装されているか確認する - APIエンドポイントがSSGモードと互換性があるか確認する
- サーバー用アダプターが誤って設定されていないか確認する
これらのポイントを順に確認することで、多くの場合は問題を特定して解決できるはずです。

