はじめに
前回の記事では、Reactアプリケーションのパフォーマンス最適化について解説しました。本記事では、作成したReactアプリを実際にインターネット上に公開する方法を解説します。
Webアプリケーションを開発しても、ローカル環境で動作するだけでは他の人に見せることができません。VercelやNetlifyといったホスティングサービスを利用することで、無料でReactアプリを世界中に公開できます。
本記事を読むことで、以下のことができるようになります。
- Viteで本番用ビルドを作成する
- Vercelにデプロイし、自動デプロイを設定する
- Netlifyにデプロイし、継続的デプロイを構築する
- 環境変数を安全に設定する
- 独自ドメインを設定する
- デプロイ時のトラブルシューティングを行う
実行環境・前提条件
必要な環境
- Node.js 20.x以上
- Viteで作成したReactプロジェクト(TypeScript推奨)
- GitHubアカウント
- Vercelアカウント(無料プランで可)
- Netlifyアカウント(無料プランで可)
前提知識
- Reactの基本的な知識
- Gitの基本操作(commit、push)
- ターミナル/コマンドプロンプトの基本操作
VercelとNetlifyの比較
デプロイ先を選ぶ前に、VercelとNetlifyの特徴を比較しておきましょう。
Vercel
| 項目 | 内容 |
|---|---|
| 開発元 | Next.jsを開発するVercel社 |
| 無料枠 | 帯域幅100GB/月、商用利用可 |
| 強み | Reactエコシステムとの親和性、高速なEdge Network |
| 特徴 | Preview Deploymentsによるブランチごとのプレビュー |
Netlify
| 項目 | 内容 |
|---|---|
| 開発元 | Netlify社(JAMstack提唱企業) |
| 無料枠 | 帯域幅100GB/月、ビルド時間300分/月 |
| 強み | フォーム処理、Functions、豊富なプラグイン |
| 特徴 | Deploy Previewsでプルリクエストごとにプレビュー |
どちらも優れたサービスですが、本記事では両方のデプロイ方法を解説します。
本番ビルドの作成
デプロイの前に、まず本番用のビルドファイルを作成する方法を理解しましょう。
ビルドコマンドの実行
Viteプロジェクトでは、以下のコマンドで本番ビルドを作成します。
|
|
実行すると、distディレクトリに最適化されたファイルが生成されます。
dist/
├── index.html
├── assets/
│ ├── index-abc123.js # バンドルされたJavaScript
│ ├── index-def456.css # バンドルされたCSS
│ └── logo-ghi789.svg # 静的アセット
└── vite.svg
ビルド結果のプレビュー
ビルド結果をローカルで確認するには、previewコマンドを使用します。
|
|
これにより、http://localhost:4173で本番ビルドをプレビューできます。
ビルド設定のカスタマイズ
vite.config.tsで本番ビルドの設定をカスタマイズできます。
|
|
Vercelへのデプロイ
Vercelは、Reactアプリケーションをデプロイするための最も簡単なプラットフォームの一つです。
方法1: GitHubリポジトリ連携(推奨)
最も一般的な方法は、GitHubリポジトリをVercelに接続する方法です。
Step 1: GitHubにリポジトリを作成
まず、Reactプロジェクトをgit管理し、GitHubにpushします。
|
|
Step 2: Vercelアカウントの作成
- Vercelにアクセス
- 「Sign Up」をクリック
- 「Continue with GitHub」を選択してGitHubアカウントで登録
Step 3: プロジェクトのインポート
- Vercelダッシュボードで「Add New」→「Project」をクリック
- 「Import Git Repository」からGitHubリポジトリを選択
- プロジェクト設定を確認
Vercelは自動的にViteプロジェクトを検出し、以下の設定を推奨します。
| 設定項目 | 値 |
|---|---|
| Framework Preset | Vite |
| Build Command | npm run build または vite build |
| Output Directory | dist |
| Install Command | npm install |
- 「Deploy」をクリック
デプロイが完了すると、https://your-project.vercel.appのようなURLが発行されます。
方法2: Vercel CLIを使用
コマンドラインからデプロイすることも可能です。
|
|
初回実行時は、いくつかの質問に答えます。
? Set up and deploy "~/my-react-app"? [Y/n] Y
? Which scope do you want to deploy to? your-username
? Link to existing project? [y/N] N
? What's your project's name? my-react-app
? In which directory is your code located? ./
SPAのルーティング対応
React Routerを使用している場合、リロード時に404エラーが発生することがあります。これを解決するには、プロジェクトルートにvercel.jsonを作成します。
|
|
この設定により、すべてのルートがindex.htmlにリダイレクトされ、React Routerが正しく動作します。
Netlifyへのデプロイ
Netlifyも同様に、簡単にReactアプリをデプロイできます。
方法1: GitHubリポジトリ連携(推奨)
Step 1: Netlifyアカウントの作成
- Netlifyにアクセス
- 「Sign up」をクリック
- 「GitHub」を選択してGitHubアカウントで登録
Step 2: サイトのインポート
- ダッシュボードで「Sites」→「Add new site」→「Import an existing project」を選択
- 「Deploy with GitHub」をクリック
- リポジトリを選択
Netlifyは自動的にビルド設定を検出します。
| 設定項目 | 値 |
|---|---|
| Build command | npm run build |
| Publish directory | dist |
- 「Deploy site」をクリック
デプロイ完了後、https://random-name-12345.netlify.appのようなURLが発行されます。
方法2: Netlify CLIを使用
|
|
方法3: ドラッグ&ドロップデプロイ
最も簡単な方法として、ビルドしたdistフォルダをNetlifyのダッシュボードにドラッグ&ドロップするだけでデプロイできます。
npm run buildを実行- Netlify Dropにアクセス
distフォルダをドラッグ&ドロップ
SPAのルーティング対応
Netlifyでは、publicフォルダに_redirectsファイルを作成します。
|
|
または、プロジェクトルートにnetlify.tomlを作成します。
|
|
環境変数の設定
APIキーなどの機密情報は、環境変数として安全に管理する必要があります。
Viteでの環境変数の使用
Viteでは、.envファイルで環境変数を定義できます。
|
|
|
|
Reactコンポーネント内での使用方法は以下のとおりです。
|
|
Viteでは、VITE_プレフィックスが付いた環境変数のみがクライアントサイドに公開されます。
Vercelでの環境変数設定
- プロジェクトダッシュボードで「Settings」→「Environment Variables」を選択
- 変数名と値を入力
- 適用する環境(Production / Preview / Development)を選択
- 「Save」をクリック
Key: VITE_API_KEY
Value: your_production_api_key
Environment: Production
Vercel CLIを使用する場合は、以下のコマンドで環境変数を設定できます。
|
|
Netlifyでの環境変数設定
- サイトダッシュボードで「Site configuration」→「Environment variables」を選択
- 「Add a variable」をクリック
- 変数名と値を入力
- 必要に応じてデプロイコンテキスト(Production / Deploy Previews等)を選択
または、netlify.tomlで設定することも可能です。
|
|
機密情報はファイルではなく、ダッシュボードから設定することを推奨します。
独自ドメインの設定
無料のサブドメインではなく、独自ドメインを使用する方法を解説します。
Vercelでのドメイン設定
- プロジェクトダッシュボードで「Settings」→「Domains」を選択
- 「Add」をクリックし、ドメイン名を入力
- DNSレコードの設定画面が表示される
Vercelが提供するネームサーバーを使用する場合、以下のNSレコードを設定します。
ns1.vercel-dns.com
ns2.vercel-dns.com
外部DNSを使用する場合は、以下のレコードを追加します。
| タイプ | 名前 | 値 |
|---|---|---|
| A | @ | 76.76.21.21 |
| CNAME | www | cname.vercel-dns.com |
Netlifyでのドメイン設定
- サイトダッシュボードで「Domain management」を選択
- 「Add a domain」をクリック
- ドメイン名を入力
Netlify DNSを使用する場合は、提供されるネームサーバーに変更します。
外部DNSを使用する場合は、以下のレコードを追加します。
| タイプ | 名前 | 値 |
|---|---|---|
| A | @ | 75.2.60.5(Netlify指定のIP) |
| CNAME | www | your-site.netlify.app |
VercelとNetlifyの両方で、SSL証明書は自動的に発行・更新されます。
自動デプロイの仕組み
GitHubリポジトリを連携すると、以下の自動デプロイが設定されます。
Production Deploy
mainブランチ(または指定したブランチ)へのpushで本番環境にデプロイされます。
|
|
Preview Deploy
プルリクエストを作成すると、自動的にプレビュー環境が作成されます。
|
|
プルリクエストのページにプレビューURLが表示されるため、レビュー時に実際の動作を確認できます。
デプロイ時のトラブルシューティング
よくあるエラーとその解決方法を紹介します。
ビルドエラー: Module not found
依存関係が正しくインストールされていない可能性があります。
|
|
404エラー(SPA)
React Routerを使用している場合、リライトルールが必要です。前述のvercel.jsonまたはnetlify.tomlを確認してください。
環境変数が読み込まれない
- 変数名が
VITE_で始まっているか確認 - デプロイ後に環境変数を変更した場合、再デプロイが必要
- ビルド時に環境変数が注入されるため、ダッシュボードで設定後に再ビルドする
ビルドサイズが大きい
vite.config.tsでコード分割を設定し、不要な依存関係を削除します。
|
|
キャッシュの問題
古いビルドがキャッシュされている場合、以下を試します。
|
|
本番環境のベストプラクティス
ビルド最適化チェックリスト
- 不要なconsole.logの削除: 本番ビルドでは自動的に削除されるか確認
- ソースマップの無効化: 本番環境ではソースマップを無効にしてセキュリティを向上
- 画像の最適化: WebP形式の使用やサイズの最適化
- 依存関係の整理: 使用していないパッケージの削除
セキュリティのベストプラクティス
- 機密情報をコードにハードコードしない: すべてAPIキー等は環境変数で管理
- HTTPSの使用: VercelとNetlifyは自動的にHTTPS化
- Content Security Policyの設定: XSS攻撃への対策
パフォーマンス監視
デプロイ後は以下のツールでパフォーマンスを監視しましょう。
- Vercel Analytics: Vercelダッシュボードから確認可能
- Lighthouse: Chrome DevToolsから実行
- Web Vitals: Core Web Vitalsの測定
まとめ
本記事では、ReactアプリをVercelとNetlifyにデプロイする方法を解説しました。
学んだ内容をまとめます。
- 本番ビルド:
npm run buildで最適化されたファイルを生成 - Vercelデプロイ: GitHub連携またはCLIで簡単にデプロイ
- Netlifyデプロイ: ドラッグ&ドロップでも可能な手軽さ
- 環境変数: 機密情報を安全に管理
- 独自ドメイン: 無料SSL証明書付きで設定可能
- 自動デプロイ: Git pushで自動的に本番/プレビュー環境を更新
これで、React学習ストーリーは完結です。ここまでの17記事を通じて、Reactの基礎から実践的なアプリケーション開発、テスト、パフォーマンス最適化、そしてデプロイまでを学びました。
次のステップとして、以下のことに挑戦してみてください。
- 実際にオリジナルのReactアプリを作成して公開する
- Next.jsやRemixなどのフルスタックフレームワークを学ぶ
- GraphQLやtRPCなど、より高度なデータ取得手法を学ぶ