ホスティングを乗り換えると、設定ファイルが全部使えなくなる
ホスティングを乗り換えることになったとき、最初に思うのは「コードはそのままだから、繋ぎ直すだけだろう」です。
半分は合っています。アプリケーションのコードは、ほぼそのまま動きます。 静的サイトなら確実に動きます。
引き継げないのは、コードの外側にある設定です。そしてこれが、移行作業の大半を占めます。
このサイトは当初 Cloudflare Pages を前提に設計し、途中で AWS Amplify に変更しました。書いていた設定ファイルは1つも使えませんでした。 そのとき洗い出した内容を書きます。
引き継げるもの、引き継げないもの
| 引き継げるか | |
|---|---|
| アプリケーションのコード | ✅ そのまま |
package.json と依存関係 |
✅ そのまま |
ビルドコマンド(npm run build) |
✅ そのまま |
出力ディレクトリ(dist/ など) |
✅ そのまま |
| リダイレクトの設定 | ❌ 形式が違う |
| レスポンスヘッダーの設定 | ❌ 形式が違う |
| 404の扱い | ❌ 挙動が違う |
| ビルドの設定ファイル | ❌ 形式が違う |
| 環境変数 | ❌ 手で登録し直し |
| 独自ドメインとDNS | ❌ 切り替え作業が必要 |
上4つは自動、下6つは手作業です。**そして下の6つは、間違えても「動いているように見える」**ものが多い。ここが厄介なところです。
リダイレクトの書き方がサービスごとに違う
同じことをするのに、書く場所も書式も違います。
| サービス | リダイレクトの指定方法 |
|---|---|
| Cloudflare Pages | public/_redirects(テキストファイル) |
| Netlify | public/_redirects または netlify.toml |
| Vercel | vercel.json の redirects / rewrites |
| AWS Amplify | コンソールの「書き換えとリダイレクト」画面 |
Amplify だけファイルではありません。 リポジトリに _redirects を置いても読まれませんし、エラーにもなりません。黙って無視されます。
これが一番危ない形です。設定を書いてデプロイし、サイトは正常に表示される。リダイレクトだけが効いていない。テストしなければ気づきません。
このサイトでは www ありのドメインを www なしに寄せる301リダイレクトを、コンソールでこう設定しています。
| 送信元 | ターゲット | 種類 |
|---|---|---|
https://www.example.com/<*> |
https://example.com/<*> |
301 |
<*> の書き方も Amplify 固有です。Cloudflare Pages や Netlify の _redirects では /* と :splat を使います。
# Cloudflare Pages / Netlify の書き方(Amplifyでは無効)
https://www.example.com/* https://example.com/:splat 301!
同じ意図の設定でも、書式が一致しません。変換してくれる仕組みはないので、手で書き直します。
レスポンスヘッダーも同じ構図
セキュリティ関連のヘッダー(X-Content-Type-Options、Strict-Transport-Security など)も、指定先が違います。
| サービス | ヘッダーの指定方法 |
|---|---|
| Cloudflare Pages / Netlify | public/_headers |
| Vercel | vercel.json の headers |
| AWS Amplify | リポジトリルートの customHttp.yml |
Amplify は customHttp.yml という独自形式のファイルをリポジトリのルートに置きます。public/ の中ではなく、ルートです。場所も名前も形式も、他と一致しません。
public/_headers を置いたままにしても、やはり黙って無視されます。 ヘッダーが付いていないことは、ブラウザの開発者ツールでレスポンスヘッダーを見るまで分かりません。
ビルドの設定ファイル
各サービスがビルド手順を書くファイルを持っています。
| サービス | ファイル |
|---|---|
| Netlify | netlify.toml |
| Vercel | vercel.json |
| AWS Amplify | amplify.yml(リポジトリルート) |
Amplify の場合はこうなります。
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run build
artifacts:
baseDirectory: dist
files:
- '**/*'
cache:
paths:
- node_modules/**/*
中身の意味はどのサービスでも同じです。「依存を入れて、ビルドして、dist を配る」。書式だけが違います。
404の扱いが一番差が出る
移行で見落とされやすく、影響が大きいのがここです。
Amplify はアプリを繋いだ時点で、あらゆるURLに index.html を200で返すという SPA 用のルールを既定で入れます。ページごとにHTMLがある静的サイトでは、これが入っていると存在しないURL全部が200を返します。
Cloudflare Pages や Netlify では、404.html があれば自動でそれを404で返すので、同じ問題は起きません。つまり、移行してはじめて壊れます。
詳しくは「AWS Amplifyの既定設定のままだと、存在しないURLが全部200を返す」に書きました。移行する場合は、切り替え直後に必ず確認してください。
移行前に洗い出す項目
作業を始める前に、現在の設定を一覧にしておくと手戻りが減ります。このサイトで使ったリストです。
リダイレクト
-
wwwあり・なしの統一(どちらに寄せるか) - HTTP → HTTPS(多くは自動だが確認する)
- 過去に変更したURLの301(あれば全部)
- 末尾スラッシュの有無の統一
レスポンスヘッダー
- セキュリティ関連のヘッダー
- キャッシュ制御(
Cache-Control)
その他
- 404ページが正しく404で返るか
- 環境変数(移行先に手で登録し直す)
-
robots.txtとsitemap.xmlが配信されるか -
ads.txtなど、ルートに置くファイル - 独自ドメインのDNS切り替え
- SSL証明書の発行完了(自動でも数分〜数十分かかる)
確認
- 主要なURLがすべて200で返るか
- 存在しないURLが404で返るか
- ヘッダーが付いているか(開発者ツールで実物を見る)
AIに任せられる範囲
コードの変換や設定ファイルの書き換えは、AIに頼めば短時間で終わります。「この _redirects を Amplify のコンソール設定用の表に直して」と頼めば、そのまま出てきます。
任せられないのは、コンソールでの操作です。 リダイレクトの登録、ドメインの接続、環境変数の入力、DNSレコードの書き換え。これらは画面を開いて自分で押す必要があります。
そして、移行作業の失敗はほとんどここで起きます。 設定を1つ登録し忘れても、サイトは表示されるからです。
だから、移行そのものより移行後の確認のほうが重要です。上のチェックリストの「確認」の3項目は、実際にコマンドを打って数字を見てください。見た目では分かりません。
まとめ
- コード・依存・ビルドコマンド・出力先はそのまま引き継げる
- リダイレクト、レスポンスヘッダー、ビルド設定、404の扱い、環境変数、DNSは引き継げない
- Amplify はリダイレクトがファイルではなくコンソール設定。
_redirectsを置いても黙って無視される - ヘッダーは
customHttp.yml(リポジトリのルート。public/ではない) - 移行してはじめて壊れるものがある。とくに404の扱い
- AIは設定ファイルの変換をしてくれるが、コンソールの操作は代行できない
- 移行後は、見た目ではなくステータスコードとレスポンスヘッダーを実際に確認する
コードを動かすのは1時間で終わります。設定を揃えるほうに時間がかかります。