ブログやドキュメント,LPのような更新頻度がそこまで高くないサイトに,重いCMSは過剰だ.静的サイトジェネレータで生成したHTMLをVPSから配信すれば,速く・安全で・運用が軽いサイトになる.

さらにgit pushを起点に自動ビルド・自動配信する仕組みを組めば,「記事を書いてpushすれば数十秒後に公開」という快適な運用が手に入る.動的CMSの脆弱性やDBの管理からも解放される.

この記事は,VPSでブログ・ドキュメント・LP等を運用したい個人開発者に向けている.静的サイトの強みから,自動ビルドの仕組み,Nginxでの高速配信,CDN併用までを解説する.

読み終えたとき,あなたはgit pushするだけで更新される,高速で安全な静的サイトをVPSで運用できるようになっている.

なぜ静的サイトをVPSで配信するのか

静的サイト(事前生成されたHTML)は,表示が速く,攻撃面が小さく,サーバー負荷が極小だ.DBもアプリも動かさないため,脆弱性や障害のリスクが根本的に少ない.

「それなら静的ホスティングサービスでよいのでは」と思うかもしれない.多くの場合それで十分だが,VPSで配信する利点もある──他のサービスと同じサーバーに同居でき,配信を完全にコントロールでき,固定費で済む.

そしてgit pushを起点にした自動ビルドを組めば,運用は動的CMS並みに快適になる.「ローカルで書く→push→自動でビルド・公開」という流れだ.

速さ・安全・低運用負荷を,自分のVPSで完結させる── これが静的サイト×VPSの価値だ.

静的サイトジェネレータの選択

静的サイトジェネレータには様々な選択肢がある.用途と好みで選べばよい.重要なのは「ビルドするとHTML/CSS/JSが生成される」という共通点だ.

ツール特徴向き
HugoGo製・ビルドが非常に速いブログ・大量ページ
Astroコンポーネント指向・高速モダンなサイト全般
Next.js(SSG)Reactベース・多機能Reactで作りたい場合
Eleventyシンプル・柔軟軽量サイト

どれを選んでも,本記事の「ビルドして生成物をNginxで配信する」という構成は共通だ.ビルドコマンド(hugonpm run build等)で生成されるディレクトリ(public/dist/等)を配信する,と理解すればよい.

手動ビルド・配信の基本

まず基本の流れを押さえる.ビルドして生成物をNginxの配信ディレクトリに置くだけだ.これを自動化する前に,手動で動かして仕組みを理解する.

ビルドして配信(手動)

cd /home/deploy/mysite
git pull origin main
npm ci && npm run build      # dist/ が生成される(Hugoなら hugo で public/)
# 生成物を配信ディレクトリへ
rsync -a --delete dist/ /var/www/mysite/

rsync --deleteで,生成物を配信ディレクトリに同期する(古いファイルも掃除).あとはNginxがこのディレクトリを配信するだけだ.この一連をスクリプト化し,次のステップで自動化する.

git pushを起点にした自動ビルド

理想は「pushしたら自動でビルド・配信」だ.実現方法は主に2つ──CI/CDでビルドして成果物を転送する方式と,VPS上でWebhookを受けてビルドする方式だ.

方式A: CI/CDでビルド→VPSへ転送

# GitHub Actions(CI/CD記事参照)
# 1. push を検知
# 2. npm ci && npm run build でビルド
# 3. rsync/scp で dist/ をVPSの /var/www/mysite/ へ転送
#    rsync -az --delete dist/ deploy@myvps:/var/www/mysite/

方式A(CI/CDでビルド)が現代的でおすすめだ.ビルドはCI側で行い,VPSには完成したHTMLを置くだけなので,VPSにNode等のビルド環境すら不要.VPSは純粋な配信に専念できる(Goデプロイの考え方に近い).方式B(VPS上でビルド)は,VPSにビルド環境を持たせ,Webhookやcronでビルドを起動する.

Webhook方式とcron方式

VPS上でビルドする場合,Webhook(GitのpushでVPSのエンドポイントを叩き,ビルドスクリプトを起動)か,cron(定期的にgit pullしてビルド)で更新する.Webhookは即時反映,cronはシンプルだが反映に最大で間隔分の遅延がある.即時性が欲しければWebhook,手軽さならcron(定期実行記事参照)だ.

Nginxでの高速配信 ― 静的サイトの真価

静的サイトの配信は,Nginxの最も得意とする領域だ.圧縮・キャッシュ・HTTP/2をフルに効かせて,極限まで速くできる(Nginxチューニング記事参照).

静的サイトの高速配信設定

server {
    listen 443 ssl;
    http2 on;
    server_name example.com;
    root /var/www/mysite;
    gzip on;
    # ハッシュ付きアセットは長期キャッシュ
    location ~* .(css|js|woff2|jpg|png|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    location / { try_files $uri $uri/ /index.html; }
}

静的ファイルは圧縮+長期キャッシュ+HTTP/2で,体感速度を極限まで高められる.DBもアプリも介さないため,レスポンスはミリ秒単位だ.これが静的サイトの真価で,Core Web Vitals(SEO)でも圧倒的に有利になる.

CDN併用 ― さらに速く、グローバルに

静的サイトはCDNと相性が抜群だ.VPSをオリジンにし,前段にCDNを置けば,世界中のエッジから配信され,VPSの負荷もほぼゼロになる(CDN記事で詳説).

「VPSでビルド・配信し,CDNでキャッシュ配信」という構成は,速さ・耐障害性・低コストを同時に実現する.アクセスが増えてもVPSはほとんど仕事をせず,CDNが配信を肩代わりする.個人開発のブログやドキュメントには理想的な構成だ.

運用の軽さ ― 静的サイトの最大の利点

静的サイトの最大の利点は,運用が圧倒的に軽いことだ.動的CMSにつきものの心配事の多くが,そもそも存在しない.

  1. セキュリティ:DBもログイン機能も無いため,攻撃面が極小(WordPressのような脆弱性対応に追われない).
  2. バックアップ:ソースはGitにある.サーバーが飛んでも再ビルドで復元できる.
  3. 負荷:静的配信は極めて軽く,小さなVPSでも大量アクセスを捌ける.
  4. 更新:git pushで自動公開.記事執筆に集中できる.

これらの軽さは,個人開発者の時間という最も貴重な資源を節約する.「サイトの保守」に追われず,コンテンツ作りや本業に集中できる.動的な機能(コメント・検索等)が必要な部分だけ外部サービスやAPIで補えば,静的サイトの軽さを保ちつつ機能も足せる.

補論:静的配信は「速いVPS」と「CDN」でほぼ無敵になる

静的サイトの配信性能は,VPSのディスク・ネットワークの速さで決まる(ビルドをCIに任せればVPSは配信に専念できる).そしてCDNを併せれば,VPSの負荷はほぼゼロになる.

高速NVMe・50種類以上のOSテンプレートに対応した国内VPS─シン・VPS─ はNVMe SSDで静的ファイルの配信が非常に高速で,gzip・キャッシュ・HTTP/2の効果をフルに引き出せる.固定費で複数サイトを同居でき,スナップショットで構成変更も安全だ.CI/CDでビルドした成果物を置くだけの「軽い配信サーバー」として理想的だ.

公開には独自ドメインを.取り扱い400種類以上のドメイン取得サービス─ムームードメイン─ でドメインを取得してVPSに向け,前段にCDNを置けば,速く・安全で・運用の軽いサイトが完成する.サブディレクトリでブログを同居させるのも容易だ.

よくある質問(FAQ)

Q1.静的ホスティングサービスではなくVPSを使う利点は?

他サービスとの同居・配信の完全なコントロール・固定費だ.多くの場合は静的ホスティングで十分だが,VPSで他のアプリと一緒に運用したい・配信を握りたい場合にVPSが活きる.

Q2.ビルドはVPS上とCI/CDどちらでする?

CI/CDでビルドして成果物を転送する方式がおすすめだ.VPSにビルド環境(Node等)が不要になり,配信に専念できる.VPS上でビルドする場合はWebhookかcronで起動する.

Q3.更新を即時反映したい

CI/CD(push起点)かWebhook方式を使う.cron方式は手軽だが反映に最大で間隔分の遅延がある.即時性が要るならpushを起点にした自動ビルド・配信を組む.

Q4.静的サイトにコメントや検索は付けられる?

外部サービスやAPIで補える.コメントは外部サービス,検索はクライアントサイド検索や外部の検索APIを使う.静的サイトの軽さを保ちつつ動的機能を足せる.

Q5.どのジェネレータを選ぶべき?

ビルドの速さ重視ならHugo,モダンな開発体験ならAstro,Reactで作りたいならNext.js.どれでも「ビルドしてNginxで配信」の構成は共通なので,好みで選んでよい.

Q6.静的サイトのバックアップは?

ソースがGitにあれば,それがバックアップだ.サーバーが飛んでも再ビルドで完全復元できる.これも静的サイトの運用が軽い理由の一つだ.

まとめ ― 速く・安全で・運用が軽いサイトを自分のVPSで

静的サイトジェネレータ×VPSは,git pushで自動ビルド・配信され,速く・安全で・運用が軽いサイトを実現する.CI/CDでビルドし,Nginxで高速配信し,CDNを併せればほぼ無敵だ.

今日やるべきことは,好きなジェネレータでサイトをビルドし,生成物をNginxで配信してみること.そこからgit push起点の自動化へ進めば,運用は驚くほど軽くなる.

保守に追われず,コンテンツに集中できる── それが静的サイトの価値だ.速いVPSとCDNで,最高の配信基盤を自分の手に持とう.