849 文字
4 分
【Astro】NoAdapterInstalledエラーの解決法 - SSGビルドのトラブルシューティング

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

Astroビルドエラー

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.mjsoutput: 'static'と指定していたにも関わらず、ページレベルの設定で上書きされてしまっていました。

この経験から学んだ重要な教訓は、Astroの設定は階層的に適用されるということです。グローバル設定(astro.config.*)がページレベルの設定によって上書きされる可能性があるため、ビルドエラーが発生した際は必ずページ単位の設定も確認しましょう。

まとめ:NoAdapterInstalledエラーの解決チェックリスト#

AstroプロジェクトでNoAdapterInstalledエラーが発生した際は、以下の5つのポイントを順番にチェックしてみてください:

  1. astro.config.*ファイルのoutput設定'static'になっているか確認する
  2. ページレベルでのprerender = false設定が混入していないか確認する
  3. 動的ルーティングページgetStaticPaths()が実装されているか確認する
  4. APIエンドポイントがSSGモードと互換性があるか確認する
  5. サーバー用アダプターが誤って設定されていないか確認する

これらのポイントを順に確認することで、多くの場合は問題を特定して解決できるはずです。

参考リソース#

【Astro】NoAdapterInstalledエラーの解決法 - SSGビルドのトラブルシューティング
https://naonao-na.com/posts/astro-error-noadapterinstalled/
作者
naogon
公開日
2025-05-09
ライセンス
CC BY-NC-SA 4.0