Skip to content
Cloud AI エンジニア入門ガイド
Go back

12. Astroのビルドとデプロイ

この章の全体像として、ビルドの流れ、公開前の設定、デプロイ、環境変数の4つを番号順に並べ、公開して運用に入れるようになることを示した図

シリーズ目次前章: 11. Astroの画像最適化とView Transitions

Table of contents

Open Table of contents

この章のねらい

作ったサイトは、公開して初めて意味を持ちます。最後に、ビルドからデプロイまでの流れと、公開前に見ておきたい設定を押さえます。

ビルドの流れ

公開用のファイルを作るには astro build を実行します。多くのプロジェクトでは package.json に登録されているため、次のコマンドになります。

npm run build

処理の流れは次のとおりです。

astro checkによる検証からビルド、HTML生成とアセット最適化、dist出力、preview確認、デプロイまでの流れを示した図

生成物は既定で dist/ ディレクトリに出力されます(outDir オプションで変更可能です)。

ビルド前に検証する

ビルドの前に astro check を実行しておくと、次のような問題を事前に検出できます。

npx astro check

package.json のビルドスクリプトに組み込んでおくのが定番です。

{
  "scripts": {
    "build": "astro check && astro build"
  }
}

こうしておけば、検証を通らないコードが公開されることを防げます。

ビルド結果を確認する

astro preview で、ビルド後のファイルをローカルサーバーで確認できます。

npm run preview

開発サーバー(astro dev)とは挙動が違います。公開前には必ずプレビューで確認してください。画像の最適化結果とパスの解決は、ビルド後でないと正確なところが分かりません。

公開前に必要な設定

site:公開URL

site には、実際に公開されるURLを設定します。

export default defineConfig({
  site: "https://example.com",
});

これはサイトマップの生成、RSSフィードの絶対URL、正規URL(canonical)の出力に使われます。未設定だと、これらの機能が正しく動作しません

base:サブディレクトリ公開

https://example.com/docs/ のように、サブディレクトリ配下で公開する場合は base を設定します。

export default defineConfig({
  site: "https://example.com",
  base: "/docs",
});

設定後は、リンクやアセットのパスを組み立てる際に import.meta.env.BASE_URL を使ってください。ハードコードしたパスは、この設定によって壊れます。

build.format:URLの形

出力するファイルの構成を選べます。

出力例URL
directory(既定)about/index.html/about/
fileabout.html/about
preserveソースの構成を保つホスティング側の解釈に依存

末尾スラッシュの扱いはホスティングサービスによって異なるため、リダイレクトの設定と合わせて確認しておくと安全です。

環境変数

APIキーなどの秘密の値は、コードに直接書かず環境変数として扱います。.env ファイルに書き、リポジトリには含めません(.gitignore に登録します)。

API_SECRET=<YOUR_API_KEY>
PUBLIC_ANALYTICS_ID=<YOUR_ANALYTICS_ID>

PUBLIC_ で始まる変数はブラウザに送られるという規則を必ず覚えてください。秘密の値には絶対に PUBLIC_ を付けないでください。

---
// サーバー側でのみ参照できる
const secret = import.meta.env.API_SECRET;

// クライアントからも参照できる
const analyticsId = import.meta.env.PUBLIC_ANALYTICS_ID;
---

astro.config.mjsenv.schema を使うと、環境変数の型と必須/任意を宣言でき、設定漏れをビルド時に検出できます。

名前の先頭によって、値が届く範囲が変わります。

環境変数のうちPUBLIC_で始まらないものはサーバー側でしか参照できないのに対し、PUBLIC_で始まるものはHTMLに埋め込まれてブラウザからも読めるようになるため、秘密の値に付けてはいけないことを示した図

インテグレーションで機能を足す

Astroの機能は、インテグレーション(統合)で拡張します。追加は astro add コマンドが最も簡単で、パッケージのインストールと設定ファイルの更新を同時に行ってくれます。

npx astro add sitemap

複数をまとめて追加することもできます。

npx astro add react sitemap

公開サイトでよく使われるものを挙げます。

インテグレーション役割
@astrojs/sitemapsitemap.xml を自動生成する(site の設定が必要)
@astrojs/mdxMDXを有効にする
@astrojs/react などUIフレームワークを有効にする
@astrojs/partytown解析タグなどを別スレッドで実行する
各種アダプターオンデマンドレンダリングを可能にする

手動で追加する場合は、パッケージをインストールしてから設定に書き加えます。

import { defineConfig } from "astro/config";
import sitemap from "@astrojs/sitemap";

export default defineConfig({
  site: "https://example.com",
  integrations: [sitemap()],
});

デプロイする

静的サイトの場合

ビルド結果は dist/ に出力されたただのHTML・CSS・JavaScriptです。静的ファイルを配信できる場所であれば、どこにでも置けます。

公式ドキュメントでは、Netlify、Vercel、Cloudflare、GitHub Pages、GitLab Pages、AWS、Firebaseなど30以上のサービス向けの手順が用意されています。

多くのサービスでは、Gitリポジトリを連携し、次の2点を指定するだけで公開できます。

以降はプッシュのたびに自動でビルド・公開されます。

オンデマンドレンダリングを使う場合

09. Astroのレンダリングモードとアダプターで扱ったとおり、アダプターの導入が必要です。デプロイ先を決めてから、対応するアダプターを追加してください。

npx astro add vercel

デプロイ先とアダプターは対で決まります。後から乗り換えるとアダプターごと差し替えになるので、早めに候補を絞ってください。

2つの経路を並べると、次のようになります。

静的サイトはdistに出力されたHTMLとCSSとJavaScriptを配信できる場所ならどこへでも置けるのに対し、オンデマンドレンダリングを使う場合はデプロイ先に対応したアダプターの導入が必要になることを比較した図

公開後に確認したいこと

公開したら、次の項目をひととおり確認しておくと安心です。

確認項目見るところ
リンク切れ内部リンク、画像のパス
メタ情報<title>description、OGP画像
サイトマップ/sitemap-index.xml が生成されているか
表示速度ブラウザの開発者ツールやLighthouse
送信JavaScript量意図しない client:load が残っていないか

特に最後の項目は、Astroを使う意味に直結します。ネットワークタブでJavaScriptの転送量を確認し、想定より多ければ、client:* の指定を見直してください。

シリーズのまとめ

全12章を通じて、次のことを見てきました。

全体を通して一貫しているのは、既定は最小限にしておき、必要なものだけを足すという方針です。ここさえ掴んでおけば、今後Astroに新しい機能が加わっても、使うかどうかを自分で決められます。

JavaScript・レンダリング・スタイル・Markdown処理のいずれも、既定では最小限の状態にしておき、必要になったときだけ明示的に足す形になっているという共通の構造を並べて示した図

次は、公式ドキュメントのチュートリアルで小さなブログを一本作ってみてください。ここまで読んだ内容は、手を動かすまでは結びつきません。

要点

参考資料


シリーズ目次前章: 11. Astroの画像最適化とView Transitions


Share this post:

Previous Post
00. AstroPaper徹底入門シリーズ 目次
Next Post
11. Astroの画像最適化とView Transitions