[Astro #22] CIを捨ててローカルデプロイへ:Netlify CLIで手に入れる確実性とスピード
はじめに
1年近く使い続けた、Netlifyですが、初の
「Netlifyのビルド時間制限(Build Minutes)の超過」
になり、GitHub Actionsでのデプロイ環境を構築しましたが、個人開発において、手元のマシンのほうが圧倒的に高スペックであり、環境も完全に制御下にあります。
それならば、GitHub連携による自動ビルドという「当たり前」を捨て、Netlify CLIによるローカルデプロイに切り替えたほうが、確実で早いのではないか。
本記事では、GitHub Actionsの依存関係や環境差異に振り回されるのをやめ、ローカル環境から直接Netlifyへデプロイするフローへの移行手順と、その圧倒的な効率性についてまとめます。
1. Netlify CLI のインストール
Node.jsがインストールされている環境で、以下のコマンドを実行します。
npm install -g netlify-cli
2. Netlify アカウントへのログインとリンク
ブラウザで認証を行い、ローカルディレクトリとNetlifyのプロジェクトを紐付けます。
# 認証(ブラウザが開きます)
netlify login
# プロジェクトの紐付け
# 「Use current git remote origin」を選択すれば自動でリンクされます
netlify link
3. デプロイの実行(ビルド含む)
通常、Netlify CLIは手元でビルドを実行してからアップロードします。
# 本番環境へデプロイ
netlify deploy --prod --dir=dist
--prod: 下書き(Draft)ではなく、本番URLに反映させます。--dir=dist: Astro等のビルド成果物が格納されるディレクトリを指定します。
4. 高速化:ビルド済みファイルを即座にアップロード
すでにローカルで npm run build を済ませており、再ビルドなしで dist の中身だけを即座に送りたい場合は、--build=false オプションを追加します。
netlify deploy --prod --dir=dist --build=false
※これにより、CI環境と同じ「ビルド待ち時間」を完全にスキップしてアップロードだけが行われます。
5. (推奨)package.json への登録
毎回コマンドを打つのが手間な場合は、scripts に追記しておくと便利です。
"scripts": {
"deploy": "node -e \"fs.rmSync('dist', { recursive: true, force: true })\" && astro build --remote && pagefind --site dist && netlify deploy --prod"
}
⚠️ 【重要】2回ビルドを回避する方法
デフォルトのままだと、Netlify CLIが netlify.toml の設定を読み取って、ビルドを2回(自前+CLI側)実行してしまいます。
これを回避して、ローカルのビルド結果をただ送るだけにするには、netlify.toml を以下のように書き換えます。
[build]
command = "true" # ここを空コマンドにするのがコツ
publish = "dist"
これで、npm run deploy 一発で「クリーンアップ・ビルド・即時デプロイ」が完結します。