🔥

【超初心者向け】Firebase・Express・Node.jsの関係を理解したい!

2025/02/25に公開

必要に迫られてFirebase Cloud Functionsを勉強し始めたところ、
初っ端のJavaScriptの記述である、

const express = require('express');

という
「Expressフレームワークをインポートするための記述」
の意味が全くわからないことってありますよね(私のこと)

ということで、今回は、

  • Firebase Cloud Functions
  • Expressフレームワーク
  • Node.js

などの関係について、概念図やその意味などをまとめてみました(自分のため)

const express = require('express') という記述について

エンドポイント(リクエスト(API呼び出し)が実行される場所)を定義している、
functions/src/api/routes/events.routes.jsの中の

const express = require('express');
const router = express.Router();
const { createEvent } = require('../controllers/events.controller');

router.post('/events', createEvent); 

module.exports = router;

というソースの初っ端に(大抵の場合)書かれているのが
const express = require('express')
という処理になります。

この処理、
「Expressフレームワークをインポートするための記述」
ですが、これを理解するために、
まずは、

  • Firebase Cloud Functions
  • Expressフレームワーク
  • Node.js

の大まかな関係図を見ていきましょう。

関係図

まず、ざっくりまとめ

  • Node.js → 基本的なサーバー機能を提供し、
  • Express → Web開発をより簡単にできて、
  • Firebase Cloud Functions → サーバーレスでより手軽に

バックエンド構築ができるようになります。
では順番に、それぞれの役割について詳しく見ていきましょう。

Node.jsとは?

「バックエンド開発をしやすくするための道具箱」のようなもの、
と考えると分かりやすいと思います。

Node.jsが提供する主な機能

  1. 基本的なサーバー機能

    • HTTPモジュールを使用したWebサーバーの作成
    • ネットワーク通信の処理
  2. ファイルシステム操作

    • ファイルの読み書き
    • ディレクトリの作成・削除
    • ファイルの移動・コピーなど
  3. 非同期処理の実行環境

    • イベントループを使用した非同期処理
    • コールバック、Promise、async/awaitのサポート

また、

  • サードパーティのモジュール(例:mysqlmongodbpostgresqlなど)を使用してデータベースに接続できる
  • これらのモジュールはnpm(ターミナルで打つコマンド)を通じてインストールして利用します

というような感じで、私のような5流エンジニアでも
バックエンド開発がしやすくなっているわけですが、
更に作りやすくする存在が「Expressフレームワーク」
ということになります。

Expressフレームワークとは?

  • Node.jsで動作させることができる
  • Webアプリケーションを作るための
  • 軽量なフレームワーク

というのがExpressフレームワークの特徴です。
その機能として、

  1. ルーティング機能
// URLパスと処理を結びつける
app.get('/users', (req, res) => {
  // GETリクエストの処理
});

app.post('/users', (req, res) => {
  // POSTリクエストの処理
});
  1. ミドルウェア機能
// リクエストの前処理を行う
app.use((req, res, next) => {
  console.log('リクエストが来ました');
  next(); // 次の処理へ
});
  1. リクエスト/レスポンス処理の簡素化
app.get('/api/user', (req, res) => {
  // クエリパラメータの取得
  const userId = req.query.id;
  
  // JSONレスポンスの送信
  res.json({ name: 'John', id: userId });
});
  1. 静的ファイルの提供
// publicフォルダの中身を静的ファイルとして提供
app.use(express.static('public'));
  1. エラーハンドリング
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('エラーが発生しました');
});

Expressを使用する利点:

  • シンプルで学習コストが低い
  • 豊富なミドルウェアエコシステム
  • 高い自由度とカスタマイズ性
  • 大きなコミュニティのサポート
  • 高いパフォーマンス

というような感じで、私のような6流エンジニアでも
バックエンド開発が更にしやすくなっているわけですが、
それらを包みこんでいる温かい存在が
「Firebase Cloud Functions」というわけですね。
どうりで「Fire」なわけです。

Firebase Cloud Functionsの役割

Firebase Cloud Functionsは、
Node.jsとExpressの機能を包含している存在で、

  1. サーバーレスアーキテクチャ
  • Node.jsのサーバー機能を使用しているものの、サーバーの管理が不要
  • Googleのインフラ上で自動的にスケーリング
  • デプロイが簡単
  1. Express互換のAPI
exports.api = functions.https.onRequest((req, res) => {
  // Expressと同様のリクエスト/レスポンスの扱い方
  res.json({ message: "Hello from Firebase!" });
});
  1. 追加の利点
  • Firebaseの他のサービス(Authentication, Firestore, Storage等)との簡単な連携
  • セキュリティの自動的な管理
  • モニタリングやログ機能の組み込み

といった機能を提供することで、
バックエンド開発をより簡単にしていると言えます。

おしまいに

私も全てを包み込める存在になりたい(意味不明)

Discussion