【超初心者向け】Firebase・Express・Node.jsの関係を理解したい!
必要に迫られて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が提供する主な機能
-
基本的なサーバー機能
- HTTPモジュールを使用したWebサーバーの作成
- ネットワーク通信の処理
-
ファイルシステム操作
- ファイルの読み書き
- ディレクトリの作成・削除
- ファイルの移動・コピーなど
-
非同期処理の実行環境
- イベントループを使用した非同期処理
- コールバック、Promise、async/awaitのサポート
また、
- サードパーティのモジュール(例:
mysql
、mongodb
、postgresql
など)を使用してデータベースに接続できる - これらのモジュールはnpm(ターミナルで打つコマンド)を通じてインストールして利用します
というような感じで、私のような5流エンジニアでも
バックエンド開発がしやすくなっているわけですが、
更に作りやすくする存在が「Expressフレームワーク」
ということになります。
Expressフレームワークとは?
- Node.jsで動作させることができる
- Webアプリケーションを作るための
- 軽量なフレームワーク
というのがExpressフレームワークの特徴です。
その機能として、
- ルーティング機能
// URLパスと処理を結びつける
app.get('/users', (req, res) => {
// GETリクエストの処理
});
app.post('/users', (req, res) => {
// POSTリクエストの処理
});
- ミドルウェア機能
// リクエストの前処理を行う
app.use((req, res, next) => {
console.log('リクエストが来ました');
next(); // 次の処理へ
});
- リクエスト/レスポンス処理の簡素化
app.get('/api/user', (req, res) => {
// クエリパラメータの取得
const userId = req.query.id;
// JSONレスポンスの送信
res.json({ name: 'John', id: userId });
});
- 静的ファイルの提供
// publicフォルダの中身を静的ファイルとして提供
app.use(express.static('public'));
- エラーハンドリング
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の機能を包含している存在で、
- サーバーレスアーキテクチャ
- Node.jsのサーバー機能を使用しているものの、サーバーの管理が不要
- Googleのインフラ上で自動的にスケーリング
- デプロイが簡単
- Express互換のAPI
exports.api = functions.https.onRequest((req, res) => {
// Expressと同様のリクエスト/レスポンスの扱い方
res.json({ message: "Hello from Firebase!" });
});
- 追加の利点
- Firebaseの他のサービス(Authentication, Firestore, Storage等)との簡単な連携
- セキュリティの自動的な管理
- モニタリングやログ機能の組み込み
といった機能を提供することで、
バックエンド開発をより簡単にしていると言えます。
おしまいに
私も全てを包み込める存在になりたい(意味不明)
Discussion