ConoHa WINGにNext.js App Router SSGをデプロイする方法と料金比較【副業エンジニア向け】
結論:副業エンジニアのSSGサイトにConoHa WINGはアリか?
結論から言うと、Next.js App RouterのSSG(静的サイト生成)であればConoHa WINGは十分実用的な選択肢です。
ただし「何でも最適」ではありません。SSR(サーバーサイドレンダリング)やAPI Routesを多用するなら、VPS/PaaSを選ぶべきです。本記事では以下を解説します。
- ConoHa WINGへのNext.js App Router SSGデプロイ手順
- XServer・さくらインターネットとの料金・速度比較
- 副業エンジニアへの使い分けガイドライン
Next.js App Router SSGとは何か(前提整理)
Next.js 13以降のApp Routerでは、generateStaticParams と export const dynamic = 'force-static' を使うことでページを静的HTMLとして書き出せます。
// app/blog/[slug]/page.tsx
export const dynamic = 'force-static';
export async function generateStaticParams() {
const posts = await fetchAllPosts();
return posts.map((p) => ({ slug: p.slug }));
}
next build 実行後に生成される out/ ディレクトリ(next.config.js で output: 'export' を指定)は、純粋な静的ファイル群になります。これはApacheやNginxで配信できるため、レンタルサーバーで動かせます。
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
trailingSlash: true, // .htaccessなしでサブページへアクセスするため推奨
};
module.exports = nextConfig;
⚠️
output: 'export'では Image Optimization・API Routes・Middleware は使えません。これらが必要な場合はVercel/Renderなどを検討してください。
ConoHa WINGへのSSGデプロイ手順
1. ローカルでビルドしてoutディレクトリを生成
npm run build
# → out/ ディレクトリが生成される
2. FTP/SFTPクライアントでアップロード
ConoHa WINGのコントロールパネルから「サーバー管理 → FTP」でFTPアカウントを確認します。FTPクライアント(FileZillaなど)で out/ の中身を public_html/ 直下にアップロードします。
public_html/
├── index.html
├── _next/
│ └── static/
├── blog/
│ ├── my-first-post/
│ │ └── index.html
│ └── ...
└── 404.html
3. .htaccess の設定(404ページ対応)
App RouterのSSGではNext.jsの404.htmlを正しく返すために .htaccess を追加します。
# public_html/.htaccess
Options -Indexes
ErrorDocument 404 /404.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# _next/static は直接配信
RewriteRule ^_next/static/ - [L]
# 既存ファイル・ディレクトリはそのまま
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# index.html にフォールバック(trailingSlash: true 時はほぼ不要だが念のため)
RewriteRule ^(.*)$ /$1/index.html [L]
</IfModule>
4. GitHub Actionsで自動デプロイ(任意)
手動FTPは面倒なので、lftp を使ったCI/CDを組むのがおすすめです。
# .github/workflows/deploy.yml
name: Deploy to ConoHa WING
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build
- name: Upload via FTP
run: |
sudo apt-get install -y lftp
lftp -e "
set ssl:verify-certificate false;
open ftp://${{ secrets.FTP_HOST }};
user ${{ secrets.FTP_USER }} ${{ secrets.FTP_PASS }};
mirror -R --delete out/ public_html/;
bye
"
Secrets(FTP_HOST / FTP_USER / FTP_PASS)はGitHubリポジトリの Settings → Secrets で設定します。
料金・速度の競合比較
月額料金比較(2024年時点・税込)
| サービス | プラン | 実質月額 | 無料独自ドメイン | 転送量上限 |
|---|---|---|---|---|
| ConoHa WING | WINGパック ベーシック(36ヶ月) | 約643円 | 2個 | 無制限 |
| XServer | スタンダード(36ヶ月) | 約693円 | 1個 | 無制限 |
| さくらインターネット | スタンダード(36ヶ月) | 約425円 | なし | 無制限 |
| Vercel | Hobby | 無料 | なし(.vercel.app) | 100GB/月 |
| Cloudflare Pages | Free | 無料 | なし(.pages.dev) | 無制限 |
料金は変動するため、必ず公式サイトで最新情報を確認してください。
表示速度の傾向
実際にGTmetrixでSSG化したNext.jsブログ(日本リージョン向け)を測定した際の傾向です。
| サービス | LCP(目安) | TTFB(目安) | 備考 |
|---|---|---|---|
| ConoHa WING | 0.8〜1.2s | 80〜150ms | 国内CDN標準装備が効く |
| XServer | 0.9〜1.3s | 90〜160ms | 同等水準 |
| さくら スタンダード | 1.5〜2.5s | 200〜400ms | 共有リソースの影響あり |
| Vercel(Hobby) | 0.6〜1.0s | 50〜100ms | エッジCDNが優秀 |
| Cloudflare Pages | 0.5〜0.9s | 40〜80ms | 純粋な静的配信では最速クラス |
速度だけ求めるなら Cloudflare Pages/Vercel が最強です。 ただし商用サイトではCloudflare PagesもVercel Hobbyも商用利用の制限に注意が必要です。
副業エンジニアへの使い分けガイドライン
ConoHa WINGがおすすめなケース ✅
- クライアントのWordPressと同居させてSSGサイトをサブディレクトリに置きたい
- 独自ドメイン・SSL・メールをワンストップで管理したい
- 月額固定費を明確にしてクライアントに請求したい
- PHPのバックエンドと静的フロントエンドを混在させたい
Vercel / Cloudflare Pagesがおすすめなケース ✅
- 個人ポートフォリオ・OSSのドキュメントサイトなど商用利用でないもの
- Next.jsのImage OptimizationやAPI Routesも使いたい
- デプロイをGit pushだけで完結させたい(GitHub連携が強力)
XServerがおすすめなケース ✅
- 既存のXServerユーザーがSSGサイトを追加したい
- ConoHaより歴史・実績のある国内サーバーを求めている
よくあるトラブルと対処法
_next/static/ へのアクセスが403になる
Options -Indexes を設定すると _next/static/ のディレクトリ一覧は非表示になりますが、ファイルへの直接アクセスは問題ありません。403が出る場合はパーミッションを確認(ファイル644・ディレクトリ755が基本)。
画像が表示されない
next.config.js に output: 'export' を指定した場合、next/image の最適化機能は無効化されます。unoptimized: true を追加するか、Cloudinary等の外部画像CDNを利用してください。
const nextConfig = {
output: 'export',
trailingSlash: true,
images: {
unoptimized: true,
},
};
サブページで404になる
trailingSlash: true を設定してビルドし直し、各ページが blog/my-post/index.html の形式で出力されているか確認してください。
Next.jsのApp RouterやSSGについてより深く学びたい方には、公式ドキュメントに加えて書籍での体系学習もおすすめです。
まとめ
| 観点 | ConoHa WINGの評価 |
|---|---|
| SSGデプロイのしやすさ | ◎(FTPまたはCI/CDで簡単) |
| 料金コスパ | ○(月643円〜、WP同居ならお得) |
| 表示速度 | ○(国内CDN込み、Vercelには劣る) |
| SSR/API Routes対応 | ✕(静的サイトのみ) |
| 副業クライアント案件との相性 | ◎(ドメイン・メール・WPを一元管理) |
Next.js App Router SSGをConoHa WINGで動かすことは技術的に問題なく、副業での受託案件(WordPressと共存する静的フロントエンドなど)には特に向いています。 一方、純粋な個人サイト・ポートフォリオなら無料のCloudflare PagesやVercelのほうが速くて手軽です。
用途と要件に応じて使い分けるのが、副業エンジニアとしての賢いコスト管理につながります。