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モードと互換性があるか確認する
- サーバー用アダプターが誤って設定されていないか確認する
これらのポイントを順に確認することで、多くの場合は問題を特定して解決できるはずです。