プログラミング講座

【2025年最新】React + Firebase Hostingで無料で爆速Webアプリを作る完全ガイド – 初心者でも30分で公開可能

記事内に商品プロモーションを含む場合があります

Webアプリを作ってみたいけど、サーバー管理やバックエンド開発は難しそう…そんな風に思っていませんか?

実は、ReactとFirebaseを組み合わせれば、無料で驚くほど簡単に本格的なWebアプリケーションを作って公開することができます。

この記事では、IT初心者の方でも迷わずに進められるよう、ReactとFirebase Hostingを使ったWebアプリの作成から公開まで、詳しく解説します。

30分もあれば、あなたの作ったアプリがインターネット上で動いているのを見ることができるでしょう。

なぜReact + Firebaseが最強の組み合わせなのか?

Reactの魅力

Reactは、Facebook(現Meta)が開発したJavaScriptライブラリで、現在最も人気のあるフロントエンド開発技術です。

42.26%の開発者がReactを使用しているというデータもあり、その人気の高さがうかがえます。

Reactを選ぶべき理由:

  • コンポーネント化:再利用可能な部品として開発できる
  • 仮想DOM:高速な画面更新が可能
  • 豊富なエコシステム:ライブラリや情報が充実
  • 就職・転職に有利:需要の高いスキル

Firebaseの魅力

FirebaseはGoogleが提供するバックエンドサービスで、複雑なサーバー管理を一切不要にしてくれます。

Firebaseを選ぶべき理由:

  • 無料プラン:個人開発なら十分すぎるほど使える
  • サーバー管理不要:インフラの知識が不要
  • 高速デプロイ:数秒でアプリが世界中に配信
  • 自動HTTPS:セキュリティも自動で対応
  • CDN配信:世界中どこからでも高速アクセス

開発環境の準備

必要なツール

まずは開発に必要なツールをインストールしましょう。

1. Node.js

  • Node.js公式サイトからLTS版をダウンロード
  • インストール後、ターミナルで node --version と入力して確認

2. VSCode(推奨)

3. Googleアカウント

  • Firebaseを使うために必要

プロジェクトの作成

1. Reactプロジェクトの作成

npx create-react-app my-awesome-app
cd my-awesome-app

2. 開発サーバーの起動

npm start

ブラウザで http://localhost:3000 にアクセスすると、Reactのデフォルトページが表示されます。

スタイリングの設定(Tailwind CSS)

React開発をより効率的にするために、Tailwind CSSを導入しましょう。詳しい設定方法は、以下の記事を参考にしてください。

【2025年最新】ReactとTailwind CSS v4の連携方法完全ガイド - Vite対応の新しい設定手順ReactプロジェクトでTailwind CSS v4を導入する方法を徹底解説。従来の設定方法との違いや、Viteを使った最新の実装方法まで、初心者にもわかりやすく紹介。設定エラーの対処法も含めた完全ガイド。...

Tailwind CSSを使うことで:

  • 高速な開発:CSSを書かずにスタイリング
  • レスポンシブ対応:簡単にモバイル対応
  • 一貫したデザイン:統一感のあるUI

サンプルアプリの作成

実際にWebアプリを作ってみましょう。今回は、簡単なタスク管理アプリを作成します。

src/App.js を編集:

import React, { useState } from 'react';
import './App.css';

function App() {
  const [tasks, setTasks] = useState([]);
  const [inputValue, setInputValue] = useState('');

  const addTask = () => {
    if (inputValue.trim() !== '') {
      setTasks([...tasks, { id: Date.now(), text: inputValue, completed: false }]);
      setInputValue('');
    }
  };

  const toggleTask = (id) => {
    setTasks(tasks.map(task => 
      task.id === id ? { ...task, completed: !task.completed } : task
    ));
  };

  const deleteTask = (id) => {
    setTasks(tasks.filter(task => task.id !== id));
  };

  return (
    <div className="min-h-screen bg-gray-100 py-8">
      <div className="max-w-md mx-auto bg-white rounded-lg shadow-md p-6">
        <h1 className="text-2xl font-bold text-center mb-6 text-gray-800">
          タスク管理アプリ
        </h1>
        
        <div className="flex mb-4">
          <input
            type="text"
            value={inputValue}
            onChange={(e) => setInputValue(e.target.value)}
            onKeyPress={(e) => e.key === 'Enter' && addTask()}
            placeholder="新しいタスクを入力..."
            className="flex-1 px-3 py-2 border border-gray-300 rounded-l-md focus:outline-none focus:ring-2 focus:ring-blue-500"
          />
          <button
            onClick={addTask}
            className="px-4 py-2 bg-blue-500 text-white rounded-r-md hover:bg-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-500"
          >
            追加
          </button>
        </div>

        <ul className="space-y-2">
          {tasks.map(task => (
            <li key={task.id} className="flex items-center justify-between p-3 bg-gray-50 rounded-md">
              <div className="flex items-center">
                <input
                  type="checkbox"
                  checked={task.completed}
                  onChange={() => toggleTask(task.id)}
                  className="mr-3"
                />
                <span className={task.completed ? 'line-through text-gray-500' : 'text-gray-800'}>
                  {task.text}
                </span>
              </div>
              <button
                onClick={() => deleteTask(task.id)}
                className="px-2 py-1 bg-red-500 text-white rounded text-sm hover:bg-red-600"
              >
                削除
              </button>
            </li>
          ))}
        </ul>

        {tasks.length === 0 && (
          <p className="text-center text-gray-500 mt-6">
            タスクを追加してみましょう!
          </p>
        )}
      </div>
    </div>
  );
}

export default App;

Firebase Hostingの設定

1. Firebaseプロジェクトの作成

Firebase Console での作業:

  1. Firebase Consoleにアクセス
  2. 「プロジェクトを作成」をクリック
  3. プロジェクト名を入力(例:my-awesome-app)
  4. Google Analyticsは不要なので無効にして続行
  5. プロジェクトが作成されるまで待機

2. Firebase CLIのインストール

npm install -g firebase-tools

3. Firebaseにログイン

firebase login

ブラウザが開くので、Googleアカウントでログインしてください。

4. Firebaseプロジェクトの初期化

プロジェクトディレクトリで以下を実行:

firebase init hosting

以下の質問に答えてください:

  • プロジェクトを選択: 先ほど作成したプロジェクトを選択
  • 公開ディレクトリ: build と入力
  • シングルページアプリ: y と入力
  • GitHub連携: 今回は N と入力

アプリのビルドとデプロイ

1. 本番用ビルド

npm run build

このコマンドを実行すると、buildディレクトリが作成されリリース用ファイルが出力されます。

2. デプロイの実行

いよいよ、あなたのアプリを世界に公開しましょう!

firebase deploy

デプロイが完了すると、以下のような形式のURLが表示されます:

Hosting URL: https://your-project-id.web.app

このURLにアクセスすると、あなたが作ったタスク管理アプリが動いているのを確認できます!

無料プランの制限と実用性

Firebase Hosting によるホスティングサービスも使えて、ドキュメント型 NoSQL のデータベースである Firestore も以下の範囲で利用できます。

マイクロなものを作る分なら困りません。

Spark プラン(無料)の制限

  • ストレージ: 1GB
  • 転送量: 月10GB
  • 独自ドメイン: 対応
  • SSL証明書: 自動対応

実際にどのくらい使える?

一般的な個人サイトやポートフォリオサイトなら、無料プランで十分すぎるほど使えます。月間数万ページビューでも問題ありません。

便利な機能の追加

Firebase Firestore

データベース機能を追加したい場合:

Firebase Realtime Databaseからデータを取得します。

プッシュ通知

Firebase Cloud Messagingを使えば、プッシュ通知も簡単に実装できます。

まとめ

ReactとFirebase Hostingを組み合わせることで、無料で高品質なWebアプリケーションを爆速で作成・公開することができます。

この組み合わせのメリット

  • 開発速度:フロントエンドに集中できる
  • コスト:無料で始められる
  • スケーラビリティ:Googleの強力なインフラを活用
  • 学習コスト:豊富な情報とコミュニティ

ReactとFirebaseを使えば、プログラミング初心者でも本格的なWebアプリケーションを無料で作成・公開できます。

サーバー管理の知識がなくても、たった30分でインターネット上にあなたのアプリを公開することができるのです。

ぜひ、ReactとFirebaseでWebアプリを作成してみてください!