Reactアプリのデプロイ方法|無料で公開する3つの選択肢

Reactアプリを無料でデプロイする方法を解説。Netlify、Vercel、GitHub Pagesの3つの選択肢について、手順、特徴、メリット・デメリットを詳しく説明します。

Learning Next 運営
35 分で読めます

みなさん、Reactアプリを作った後どうしていますか?

「せっかく作ったアプリをみんなに見せたい」 「でもデプロイって難しそう...」 「お金をかけずに公開したい」

そんな風に思ったことはありませんか?

この記事では、Reactアプリを無料でデプロイする方法をご紹介します。 Netlify、Vercel、GitHub Pagesという3つの選択肢について、手順やメリット・デメリットを詳しく解説していきます。

初心者の方でも安心して取り組めるように、一つずつ丁寧に説明していきますね。

Reactアプリをデプロイする前に知っておきたいこと

まずは、デプロイの基本的な考え方を理解しましょう。

デプロイって何?

デプロイとは、作ったアプリをインターネット上で公開することです。 今まで自分のパソコンでしか見られなかったアプリを、世界中の人がアクセスできるようにします。

簡単に言うと、お店をオープンするような感じですね。

開発中と公開後の違い

開発中は、こんな感じでアプリを起動していましたよね。

npm start

このコマンドを実行すると、ブラウザで http://localhost:3000 が開きます。 でも、これはあなたのパソコンの中だけで動いているんです。

公開するには、まずビルドという作業が必要です。

npm run build

このコマンドを実行すると、buildフォルダが作られます。 この中に、公開用に最適化されたファイルが入っています。

buildフォルダの中身を見てみよう

ビルドが完了すると、こんな構成になります。

build/
├── index.html
├── static/
│   ├── css/
│   │   └── main.abc123.css
│   ├── js/
│   │   └── main.xyz789.js
│   └── media/
│       └── logo.png
└── manifest.json

index.htmlがメインファイルで、staticフォルダにCSS、JavaScript、画像が入っています。 ファイル名にabc123のような文字が付いているのは、キャッシュ対策のためです。

ちょっと複雑に見えるかもしれませんが、これが公開用のファイルになります。

SPAの特殊な事情

ReactアプリはSPA(Single Page Application)なので、少し特殊な設定が必要です。

通常のウェブサイトでは、/aboutにアクセスするとabout.htmlファイルを表示します。 でもReactアプリでは、すべてのページがindex.htmlから作られています。

// React Routerの例
import { BrowserRouter, Routes, Route } from 'react-router-dom';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </BrowserRouter>
  );
}

この設定だと、/aboutにアクセスしてもindex.htmlを表示する必要があります。

「なんだか面倒そう...」と思うかもしれませんが、大丈夫です! 今から紹介する3つのサービスが、この問題を簡単に解決してくれます。

選択肢1: Netlifyで簡単デプロイ

Netlifyは、GitHubと連携してデプロイできるサービスです。

Netlifyの特徴

Netlifyには、こんな特徴があります。

  • 無料プランが充実している
  • GitHubとの連携が簡単
  • 自動ビルド機能がある
  • フォーム機能も使える
  • カスタムドメインにも対応

初心者にとって一番取り組みやすいサービスだと思います。

手順1: GitHubリポジトリを準備しよう

まず、あなたのReactアプリをGitHubにアップロードします。

git init
git add .
git commit -m "Initial commit"

これでローカルでのGit管理が始まりました。

次に、GitHubでリポジトリを作成します。 GitHubのサイトで「New repository」をクリックして、リポジトリ名を入力してください。

作成したら、こんな感じでリモートリポジトリを追加します。

git remote add origin https://github.com/あなたのユーザー名/リポジトリ名.git
git push -u origin main

あなたのユーザー名リポジトリ名は、実際のものに置き換えてくださいね。

手順2: Netlifyアカウントを作成しよう

Netlifyの公式サイト(https://netlify.com)にアクセスします。 「Sign up」をクリックして、アカウントを作成してください。

GitHubアカウントで連携することをおすすめします。 こうすることで、後の設定がとても簡単になります。

手順3: サイトを作成しよう

Netlifyにログインしたら、ダッシュボードが表示されます。 「New site from Git」という青いボタンをクリックしてください。

次に、こんな手順で進みます。

  1. GitHubを選択する
  2. リポジトリを選択する
  3. ブランチを確認する(通常はmain
  4. ビルド設定を確認する

ビルド設定では、以下のように入力します。

Build command: npm run build
Publish directory: build

これで、Netlifyが自動的にビルドしてくれます。

手順4: デプロイを実行しよう

設定が完了したら、「Deploy site」をクリックします。

初回のデプロイには3-5分程度かかります。 コーヒーでも飲みながら待ちましょう。

デプロイが完了すると、こんな感じのURLが表示されます。

https://awesome-app-123456.netlify.app

このURLをクリックすると、あなたのReactアプリが表示されます!

手順5: React Routerの設定

React Routerを使っている場合は、追加設定が必要です。

プロジェクトのpublicフォルダに_redirectsファイルを作成してください。

/*    /index.html   200

この1行を書くだけで、すべてのページが正しく表示されます。

たった1行ですが、これがないと/aboutなどのページで404エラーが出てしまいます。

自動デプロイの仕組み

Netlifyの素晴らしいところは、自動デプロイ機能です。

GitHubにコードをプッシュすると、自動的にビルドとデプロイが実行されます。

git add .
git commit -m "新機能を追加"
git push origin main

このプッシュをするだけで、数分後にはサイトが更新されます。

便利だと思いませんか?

Netlifyの便利な機能

Netlifyには、他にも便利な機能があります。

フォーム機能を使えば、お問い合わせフォームも簡単に作れます。

function ContactForm() {
  return (
    <form name="contact" method="POST" data-netlify="true">
      <input type="hidden" name="form-name" value="contact" />
      <div>
        <label>お名前:</label>
        <input type="text" name="name" required />
      </div>
      <div>
        <label>メールアドレス:</label>
        <input type="email" name="email" required />
      </div>
      <div>
        <label>メッセージ:</label>
        <textarea name="message" required></textarea>
      </div>
      <button type="submit">送信</button>
    </form>
  );
}

data-netlify="true"を追加するだけで、フォームが動作します。

送信されたデータは、Netlifyの管理画面で確認できます。

Netlifyのメリット・デメリット

メリット

  • GitHubとの連携が簡単
  • 自動ビルド・デプロイ
  • フォーム機能が無料で使える
  • 設定が分かりやすい

デメリット

  • 無料プランではビルド時間に制限がある
  • 大量のアクセスがあると有料プランが必要

選択肢2: Vercelで高速デプロイ

Vercelは、高速なCDN優秀なパフォーマンスで人気のサービスです。

Vercelの特徴

Vercelには、こんな特徴があります。

  • 非常に高速なCDN
  • 自動HTTPS化
  • プレビューデプロイ機能
  • Next.jsとの親和性が高い
  • 解析機能も充実

パフォーマンスにこだわりたい方におすすめです。

手順1: Vercel CLIをインストール

まず、Vercel CLIをインストールします。

npm install -g vercel

これで、vercelコマンドが使えるようになります。

もし、グローバルインストールが嫌な場合は、npxでも使えます。

npx vercel

どちらでも同じ結果になるので、お好みで選んでください。

手順2: Vercelにログイン

次に、Vercelアカウントを作成してログインします。

vercel login

このコマンドを実行すると、ブラウザでVercelのサイトが開きます。

GitHubアカウントでログインすることをおすすめします。 連携がスムーズになります。

手順3: プロジェクトをデプロイ

Reactアプリのフォルダで、以下のコマンドを実行します。

vercel

初回実行時は、いくつか質問されます。

? Set up and deploy "my-react-app"? [Y/n] y
? Which scope do you want to deploy to? あなたのアカウント
? Link to existing project? [y/N] n
? What's your project's name? my-react-app
? In which directory is your code located? ./

基本的には、Enterを押すだけで進めます。

Vercelが自動的に設定を検出してくれるので、とても簡単です。

手順4: 自動設定を確認

Vercelは、あなたのプロジェクトを見て自動的に設定してくれます。

Framework Preset: Create React App
Build Command: npm run build
Output Directory: build
Install Command: npm install

この設定が表示されたら、正しく認識されています。

間違いがなければ、そのまま進みましょう。

手順5: デプロイ完了

設定が完了すると、自動的にデプロイが始まります。

数分後、こんな感じのURLが表示されます。

https://my-react-app-username.vercel.app

このURLをクリックすると、あなたのReactアプリが表示されます。

とても簡単だったでしょう?

GitHubとの連携

CLI以外にも、GitHubと連携する方法があります。

Vercelのダッシュボードで「New Project」をクリックします。 「Import Git Repository」から、GitHubリポジトリを選択してください。

これで、GitHubにプッシュするたびに自動デプロイされます。

プレビューデプロイ機能

Vercelのプレビューデプロイ機能は、とても便利です。

新しいブランチを作成してプッシュすると、自動的にプレビューURLが作成されます。

git checkout -b feature/new-component
git add .
git commit -m "新しいコンポーネントを追加"
git push origin feature/new-component

このプッシュをすると、こんな感じのプレビューURLが作成されます。

https://my-react-app-git-feature-username.vercel.app

本番環境に影響を与えずに、新機能をテストできます。

環境変数の設定

環境変数が必要な場合は、ダッシュボードで設定できます。

Project Settings → Environment Variables から追加してください。

または、CLIからも設定できます。

vercel env add REACT_APP_API_URL

値を入力すると、デプロイ時に自動的に反映されます。

カスタムドメインの設定

独自ドメインを使いたい場合は、ダッシュボードで設定できます。

Project Settings → Domains から、ドメインを追加してください。

例:
- myapp.vercel.app (無料)
- myapp.com (独自ドメイン)

独自ドメインを使う場合は、DNS設定も必要です。

Vercelのメリット・デメリット

メリット

  • 非常に高速なCDN
  • 自動最適化機能
  • プレビューデプロイが便利
  • 設定が簡単

デメリット

  • 無料プランでは帯域制限がある
  • 関数実行時間に制限がある

選択肢3: GitHub Pagesで完全無料デプロイ

GitHub Pagesは、完全無料で使えるサービスです。

GitHub Pagesの特徴

GitHub Pagesには、こんな特徴があります。

  • 完全無料
  • GitHubアカウントがあれば利用可能
  • 自動デプロイに対応
  • カスタムドメインも設定可能
  • HTTPS対応

コストを抑えたい方には、最適な選択肢です。

手順1: gh-pagesパッケージをインストール

まず、gh-pagesパッケージをインストールします。

npm install --save-dev gh-pages

このパッケージが、GitHub Pagesへのデプロイを自動化してくれます。

手順2: package.jsonを設定

package.jsonに設定を追加します。

{
  "name": "my-react-app",
  "version": "0.1.0",
  "homepage": "https://あなたのユーザー名.github.io/リポジトリ名",
  "private": true,
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "predeploy": "npm run build",
    "deploy": "gh-pages -d build"
  },
  "devDependencies": {
    "gh-pages": "^4.0.0"
  }
}

homepageの部分は、あなたの情報に置き換えてください。

predeploydeployのスクリプトが、デプロイを自動化してくれます。

手順3: デプロイを実行

設定が完了したら、デプロイを実行します。

npm run deploy

このコマンドを実行すると、以下の処理が自動的に実行されます。

  1. npm run buildでビルド
  2. gh-pages -d buildでデプロイ

初回のデプロイには、3-5分程度かかります。

手順4: GitHub Pagesの設定を確認

GitHubのリポジトリページで、設定を確認しましょう。

  1. Settingsタブをクリック
  2. 左サイドバーのPagesをクリック
  3. Sourceで「Deploy from a branch」を選択
  4. Branchで「gh-pages」を選択
  5. Saveをクリック

この設定で、GitHub Pagesが有効になります。

手順5: URLを確認

設定が完了すると、こんな感じのURLが表示されます。

https://あなたのユーザー名.github.io/リポジトリ名

このURLをクリックすると、あなたのReactアプリが表示されます。

GitHub Actionsで自動デプロイ

より高度な方法として、GitHub Actionsを使った自動デプロイもあります。

.github/workflows/deploy.ymlファイルを作成してください。

name: Deploy to GitHub Pages

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout
      uses: actions/checkout@v3
      
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
        cache: 'npm'
        
    - name: Install dependencies
      run: npm ci
      
    - name: Build
      run: npm run build
      
    - name: Deploy to GitHub Pages
      uses: peaceiris/actions-gh-pages@v3
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        publish_dir: ./build

このファイルを作成すると、mainブランチにプッシュするたびに自動デプロイされます。

GitHub Actionsについて詳しく知らなくても、コピペで使えます。

React Routerの対応

React Routerを使っている場合は、特別な設定が必要です。

方法1: HashRouterを使う

import { HashRouter, Routes, Route } from 'react-router-dom';

function App() {
  return (
    <HashRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </HashRouter>
  );
}

BrowserRouterの代わりにHashRouterを使います。

URLに#が入りますが、GitHub Pagesでは確実に動作します。

方法2: 404.htmlを作成

public/404.htmlファイルを作成して、リダイレクト処理を追加します。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>My React App</title>
    <script type="text/javascript">
      var pathSegmentsToKeep = 1;
      var l = window.location;
      l.replace(
        l.protocol + '//' + l.hostname + (l.port ? ':' + l.port : '') +
        l.pathname.split('/').slice(0, 1 + pathSegmentsToKeep).join('/') + 
        '/?/' +
        l.pathname.slice(1).split('/').slice(pathSegmentsToKeep).join('/').replace(/&/g, '~and~') +
        (l.search ? '&' + l.search.slice(1).replace(/&/g, '~and~') : '') +
        l.hash
      );
    </script>
  </head>
  <body>
  </body>
</html>

このファイルがあると、404エラーを避けることができます。

ちょっと複雑に見えますが、コピペで使えます。

カスタムドメインの設定

独自ドメインを使いたい場合は、public/CNAMEファイルを作成します。

echo "myapp.com" > public/CNAME

または、GitHubのリポジトリ設定で追加することもできます。

Settings → Pages → Custom domain から設定してください。

GitHub Pagesのメリット・デメリット

メリット

  • 完全無料
  • GitHubとの完全統合
  • 設定が比較的簡単
  • GitHub Actionsとの連携

デメリット

  • 静的サイトのみ(サーバーサイド機能なし)
  • 容量制限(1GB)
  • 転送量制限(月100GB)

3つのサービスを比較してみよう

どのサービスを選ぶか迷っている方のために、比較してみました。

機能比較表

項目NetlifyVercelGitHub Pages
無料プラン
自動デプロイ
カスタムドメイン
HTTPS
CDN
ビルド時間制限300分/月6000分/月制限なし
帯域制限100GB/月100GB/月100GB/月
関数機能×
フォーム機能××

用途別のおすすめ

ポートフォリオサイト

  • GitHub Pages がおすすめ
  • 完全無料で使える
  • 設定が簡単

ビジネスサイト

  • Netlify がおすすめ
  • フォーム機能が使える
  • 初心者にも優しい

高性能Webアプリ

  • Vercel がおすすめ
  • 非常に高速
  • 解析機能が充実

デプロイ時間の比較

初回デプロイ時間(目安):

  • GitHub Pages: 3-5分
  • Netlify: 2-4分
  • Vercel: 1-3分

更新デプロイ時間(目安):

  • GitHub Pages: 2-3分
  • Netlify: 1-2分
  • Vercel: 30秒-1分

Vercelが最も高速ですが、どのサービスも十分実用的です。

学習コストの比較

学習コストの低い順:

  1. GitHub Pages(GitHubの基本操作ができれば可能)
  2. Netlify(Git連携の理解が必要)
  3. Vercel(CLI操作の理解が必要)

初心者の方は、GitHub Pagesから始めることをおすすめします。

デプロイ前にやっておきたい最適化

デプロイ前に、アプリを最適化しましょう。

ビルドサイズを確認しよう

まず、ビルドサイズを確認してみましょう。

npm run build

ビルドが完了すると、こんな感じの結果が表示されます。

File sizes after gzip:

  41.23 KB  build/static/js/main.12345678.js
  1.78 KB   build/static/css/main.87654321.css

この数字が大きすぎる場合は、最適化が必要です。

バンドルサイズを分析しよう

何が容量を占めているか分析するには、webpack-bundle-analyzerを使います。

npm install --save-dev webpack-bundle-analyzer

package.jsonにスクリプトを追加します。

{
  "scripts": {
    "analyze": "npm run build && npx webpack-bundle-analyzer build/static/js/*.js"
  }
}

そして、分析を実行します。

npm run analyze

ブラウザで分析結果が表示されます。

大きなライブラリが見つかったら、本当に必要か確認してみましょう。

不要なパッケージを削除しよう

使っていないパッケージを確認するには、depcheckを使います。

npx depcheck

未使用のパッケージが表示されたら、削除しましょう。

npm uninstall 不要なパッケージ名

これで、ビルドサイズを削減できます。

画像を最適化しよう

画像は、アプリのサイズに大きく影響します。

適切なサイズに変換して、WebP形式を使うことをおすすめします。

function OptimizedImage() {
  return (
    <img 
      src="/images/photo-small.jpg" 
      srcSet="/images/photo-small.jpg 320w,
              /images/photo-medium.jpg 768w,
              /images/photo-large.jpg 1024w"
      sizes="(max-width: 320px) 280px,
             (max-width: 768px) 720px,
             1024px"
      alt="最適化された画像"
      loading="lazy"
    />
  );
}

srcSetsizesを使うことで、デバイスに応じて最適な画像が表示されます。

loading="lazy"を追加すると、画像の遅延読み込みが有効になります。

環境変数を設定しよう

環境別に設定を変えたい場合は、環境変数を使います。

const config = {
  apiUrl: process.env.REACT_APP_API_URL || 'http://localhost:3001',
  debug: process.env.NODE_ENV !== 'production'
};

export default config;

各デプロイサービスで、環境変数を設定してください。

Netlify、Vercel、GitHub Actionsすべてで対応しています。

よくあるトラブルと解決方法

デプロイ時に起こりやすい問題を紹介します。

1. ビルドエラーで止まる

問題npm run buildでエラーが出る

解決方法:警告をエラーとして扱わない設定を追加

{
  "scripts": {
    "build": "CI=false react-scripts build"
  }
}

CI=falseを追加することで、警告でビルドが止まらなくなります。

2. ページにアクセスすると404エラー

問題/aboutにアクセスすると404エラーが出る

解決方法:各サービスに応じた設定を追加

Netlifypublic/_redirectsファイルを作成

/*    /index.html   200

Vercelvercel.jsonファイルを作成

{
  "routes": [
    { "src": "/(.*)", "dest": "/index.html" }
  ]
}

GitHub PagesHashRouterを使用

import { HashRouter } from 'react-router-dom';

3. 環境変数が読み込まれない

問題process.env.REACT_APP_API_URLundefinedになる

解決方法:正しいプレフィックスを使用

# ✅ 正しい
REACT_APP_API_URL=https://api.example.com

# ❌ 間違い
API_URL=https://api.example.com

Reactアプリでは、REACT_APP_プレフィックスが必要です。

4. 画像やファイルが表示されない

問題:画像が表示されない

解決方法:正しいパスを使用

// ❌ 間違い
<img src="/images/photo.jpg" alt="写真" />

// ✅ 正しい方法1:インポート
import photo from '../images/photo.jpg';
<img src={photo} alt="写真" />

// ✅ 正しい方法2:publicフォルダ
<img src={process.env.PUBLIC_URL + '/images/photo.jpg'} alt="写真" />

5. デプロイが遅い

問題:デプロイに時間がかかる

解決方法:不要なファイルを除外

.gitignoreに以下を追加:

node_modules/
build/
.env.local
.env.development.local
.env.test.local
.env.production.local

また、package-lock.jsonを削除せずに、キャッシュを活用しましょう。

6. CORSエラーが出る

問題:APIへのアクセスでCORSエラーが出る

解決方法:開発時はプロキシを設定

{
  "proxy": "http://localhost:3001"
}

本番環境では、バックエンド側でCORSの設定が必要です。

app.use(cors({
  origin: ['https://myapp.netlify.app', 'https://myapp.vercel.app'],
  credentials: true
}));

セキュリティ対策も忘れずに

デプロイ時のセキュリティ対策について説明します。

環境変数の適切な管理

絶対にやってはいけないこと

// ❌ 危険:秘密情報をコードに含める
const API_SECRET = 'secret-key-123';

Reactアプリは、ブラウザで動作するため、すべてのコードが公開されます。

安全な方法

// ✅ 安全:公開しても問題ない情報のみ
const API_URL = process.env.REACT_APP_API_URL;
const APP_VERSION = process.env.REACT_APP_VERSION;

秘密情報は、バックエンド側で管理しましょう。

HTTPS化の確認

現在のデプロイサービスは、すべて自動的にHTTPS化されます。

でも、念のため確認してみましょう。

// HTTPS化の強制(必要に応じて)
if (location.protocol !== 'https:' && location.hostname !== 'localhost') {
  location.replace(`https:${location.href.substring(location.protocol.length)}`);
}

依存関係のセキュリティ確認

定期的に、セキュリティ脆弱性を確認しましょう。

npm audit

問題が見つかったら、修正します。

npm audit fix

手動での対応が必要な場合は、パッケージのアップデートを検討してください。

CSP(Content Security Policy)の設定

より高度なセキュリティ対策として、CSPを設定できます。

<!-- public/index.html -->
<meta http-equiv="Content-Security-Policy" 
      content="default-src 'self'; 
               script-src 'self' 'unsafe-inline'; 
               style-src 'self' 'unsafe-inline'; 
               img-src 'self' data: https:;">

この設定により、悪意のあるスクリプトの実行を防げます。

まとめ

Reactアプリの無料デプロイ方法について、詳しく解説しました。

重要なポイント

  1. 3つの選択肢があり、それぞれに特徴がある
  2. 用途に応じて最適なサービスを選ぶ
  3. デプロイ前の最適化が重要
  4. セキュリティ対策も忘れずに

サービス選択の指針

  • GitHub Pages:学習目的やシンプルなポートフォリオ
  • Netlify:フォーム機能が必要なサイト
  • Vercel:高性能が求められるアプリ

次のステップ

まずは、一番簡単なGitHub Pagesから始めてみませんか?

慣れてきたら、NetlifyやVercelも試してみてください。

どのサービスも無料プランが充実しているので、気軽に試せるのが嬉しいですね。

あなたのReactアプリが、世界中の人に見てもらえる日が楽しみです!

ぜひこのガイドを参考に、デプロイに挑戦してみてください。

関連記事