[Astro] GitHub Pagesデプロイ

2026-04-03 hit count image

AstroブログをGitHub Pagesにデプロイする方法を共有します。gh-pagesパッケージの設定、カスタムドメイン、.nojekyllファイル、ビルドパイプラインなどを解説します。

astro

概要

前回の記事レイアウトとコンポーネントアーキテクチャでブログの構造を解説しました。今回の記事では、完成したブログをGitHub Pagesにデプロイする過程を説明します。

JekyllはコードをpushするとGitHubサーバーで自動的にビルド/デプロイしてくれましたが、Astroはローカルでビルドした成果物を直接デプロイする必要があります。一段階増えることになりますが、その代わりビルド環境を完全に制御でき、すべてのプラグインを自由に使用できるという利点があります。

ビルドパイプラインを理解する

デプロイ前にビルド過程がどのように進むか理解しておくと良いでしょう。npm run deployの一行を実行すると、内部的に複数の段階が自動的に連鎖実行されます。

npm run deploy

1. predeploy: npm run share:sync

2. preshare:sync: npm run build

3. build: astro build && npx pagefind --site dist

4. share:sync: node scripts/share.mjs sync

5. deploy: gh-pages -d dist -r ...

この流れはnpmpreスクリプト機能を活用したものです。deployを実行すると自動的にpredeployが先に実行され、share:syncを実行すると自動的にpreshare:syncが先に実行されるという仕組みです。おかげでnpm run deployの一行だけで、ビルド → 検索インデックス生成 → 共有同期 → デプロイまでのすべての過程が自動的につながります。

各段階の説明

各段階の役割をまとめると以下の通りです。

段階スクリプト役割
1astro buildAstroプロジェクトを静的HTML/CSS/JSにビルドしてdist/ディレクトリを生成
2npx pagefind --site distビルドされたHTMLから検索インデックスを生成
3share:syncRSSフィードに基づいてソーシャル共有状態を同期
4gh-pages -d distdist/ディレクトリをGitHub Pagesにデプロイ

gh-pagesでデプロイする

インストール

gh-pagesはビルドされた静的ファイルをGitHub Pagesブランチ(gh-pages)に自動的にpushしてくれるパッケージです。ビルド時にのみ使用するので開発依存としてインストールします。

npm install -D gh-pages

デプロイスクリプト

package.jsonに以下のようにデプロイスクリプトを設定します。

{
  "scripts": {
    "deploy": "gh-pages -d dist -r [email protected]:posstree/deku.posstree.com.git -t"
  }
}

オプションの説明

各オプションの意味は以下の通りです。

オプション説明
-d distdistデプロイするディレクトリ。Astroのビルド出力ディレクトリ
-rgit@personal:...デプロイ先のリモートリポジトリ。SSHキーエイリアス(personal)を使用
-t-隠しファイル(.nojekyllなど)も含めてデプロイ

特に-tオプションが重要です。このオプションがないと.nojekyllのようなドット(.)で始まるファイルがデプロイに含まれず、サイトが正常に動作しません。

デプロイの実行

設定が終わったら、以下のコマンド一行でビルドからデプロイまでのすべての過程が自動的に実行されます。

npm run deploy

カスタムドメインの設定

CNAMEファイル

GitHub Pagesusername.github.ioの代わりにカスタムドメインを使用するにはCNAMEファイルが必要です。public/CNAMEファイルに使用するドメインを一行で記載します。

deku.posstree.com

public/ディレクトリのファイルはビルド時にdist/ディレクトリにそのままコピーされるため、別途の設定なしにデプロイ時に自動的に含まれます。

DNS設定

ドメイン管理者(例:Cloudflare、Route53)でCNAMEレコードを設定して、カスタムドメインがGitHub Pagesを指すようにします。

CNAME  deku.posstree.com  →  username.github.io

.nojekyllファイルの役割

GitHub PagesAstroを使用する際に必ず知っておくべきファイルです。

public/.nojekyll

GitHub PagesはデフォルトでアップロードされたファイルをJekyllで処理します。しかしAstroでビルドすると_astro/というディレクトリが生成されますが、Jekyll_で始まるディレクトリを無視します。結果的にCSSとJavaScriptファイルが読み込まれず、サイトが壊れて見えます。

.nojekyllファイルをルートに配置すると、GitHub PagesJekyll処理をスキップして、アップロードされたファイルをそのままサーブします。空のファイルですがないとサイトが正常に動作しないため、必ず含める必要があります。

Jekyllデプロイとの比較

JekyllからAstroに移行して、デプロイ方式がどのように変わったか比較します。

項目JekyllAstro
ビルド場所GitHub Pagesサーバーでビルドローカルでビルド後に成果物をデプロイ
ビルド時間~209秒(サーバー)~30秒(ローカル)
プラグイン制限GitHub Pagesが許可するプラグインのみ使用すべてのプラグインを自由に使用
ビルド制御GitHubに依存ローカルで完全制御
.nojekyll不要必須
デプロイツールgit pushだけで自動デプロイgh-pagesパッケージを使用

Jekyllgit pushするだけでよいので最初は楽でしたが、ビルド環境を制御できないため使用できるプラグインが限られていました。Astroはローカルビルドという一段階が追加されますが、カスタムrehypeプラグインやSharp画像変換のような高度な機能を自由に使用できるようになりました。

以前のJekyllデプロイ方法についてはGitHub Pagesデプロイのポストを参照してください。

完了

今回の記事では、AstroブログをGitHub Pagesにデプロイする方法を見てきました。

  • npmpreスクリプトを活用した自動化ビルドパイプライン(ビルド → 検索インデックス → 共有同期 → デプロイ)
  • gh-pagesパッケージで簡単なデプロイ(-tオプションで隠しファイルを含む)
  • public/CNAMEでカスタムドメインを設定
  • .nojekyllファイルでJekyll処理を無効化(_astro/ディレクトリの無視を防止)

次の記事ソーシャル共有自動化スクリプトでは、デプロイ時にSNSに自動的にポストを共有するスクリプトを解説します。

シリーズ案内

このポストはJekyllからAstroへのマイグレーションシリーズの一部です。

  1. JekyllからAstroへマイグレーションした理由
  2. Astroのインストールとプロジェクト構成
  3. Content Collectionsとマークダウンマイグレーション
  4. 多言語(i18n)実装
  5. SEO実装
  6. 画像最適化 — カスタムrehypeプラグイン
  7. コメントシステム(Utterances)
  8. 広告連携(Google AdSense)
  9. Pagefindを利用した検索実装
  10. レイアウトとコンポーネントアーキテクチャ
  11. GitHub Pagesデプロイ
  12. ソーシャル共有自動化スクリプト
  13. トラブルシューティングとヒント

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。



SHARE
Twitter Facebook RSS