電子契約システム~Firebaseを使う場合の実装イメージ

今までは共有レンタルサーバーでの構築を前提としていたため、バックエンドをPHPで構築していました。その他のデプロイ環境としてGoogleのFirebaseがあると思いますが、Firebaseを使う場合の構築のイメージを、今回もAIに投げかけて考察して今後の環境構築の参考にしてみたいと思います。


共有レンタルサーバー(PHP)から、GoogleのFirebaseを使ったデプロイ環境に移行する場合の構築イメージ(使用感)について、具体的にお答えします。

Firebaseはサーバーインフラの管理から解放されるサーバーレスな環境であり、PHP環境とは開発・運用のアプローチが大きく異なります。


現在のPHP/TCPDFベースのシステムをFirebaseに移行する場合、主に「ホスティング」「バックエンド(サーバー処理)」「データベース」の3つの要素が変わります。

1. フロントエンド(HTML, CSS, JS)のデプロイ

これは最も簡単な部分です。

  • 使用サービス: Firebase Hosting
  • 使用感:
    • 開発した index.php (静的コンテンツ部分のみ)、main.jsstyle.css などのファイルを、Firebase Hostingにデプロイします。
    • index.php はサーバーレス環境では動かないため、中身をindex.htmlとして静的なHTMLファイルに変換します(PHPの処理はすべてバックエンドに移動)。
    • デプロイはコマンドライン(ターミナル)で $ firebase deploy のように実行するだけで完了します。
    • CDN(Content Delivery Network)経由で配信されるため、非常に高速で、サーバーの負荷を気にする必要がありません。SSL証明書も自動で提供されます。

2. バックエンド(PHPの代替)の構築

現在 send.php で行っている「データ受信」「PDF生成」「メール送信」の処理を、Firebaseのサーバーレス機能に移行します。

  • 使用サービス: Cloud Functions for Firebase (Node.js/Python)
  • 使用感:
    • PHPではなく、Node.js (JavaScript)Python などの言語でサーバー処理を記述します。
    • send.php の処理(フォームデータ取得、PDFライブラリ呼び出し、PHPMailer呼び出し)を、Node.jsで書き換えます。
    • この機能(関数)は、外部からのHTTPリクエスト(今回の場合は main.js からのPOSTリクエスト)を受けて実行されるため、実質的に新しい send.jsのようなものです。
    • TCPDF の代わりに、Node.jsで動作する puppeteerpdfkit などのライブラリを使用してPDFを生成します。
    • デプロイは $ firebase deploy --only functions コマンドで実行します。
    • 従量課金制で、関数が実行された回数と実行時間に応じて課金されるため、使わないときは費用がかかりません。

3. データ管理(利用者別契約書の内容)の構築

前日記事の案2(データ駆動型)を採用する場合、利用者ごとの契約書別紙のデータを保存する場所が必要です。

  • 使用サービス: Cloud Firestore (NoSQL Database)
  • 使用感:
    • MySQLのようなリレーショナルデータベースではなく、JSON形式に近いデータを扱うNoSQLデータベースを使用します。
    • データを「コレクション」(テーブルに相当)と「ドキュメント」(行に相当)の階層構造で保存します。
      • 例: /users/user-id-123/contracts/contract-id-001 の中に {plan_type: "A", fee: 20000, start_date: "..."} のようにデータを保存します。
    • データの読み書きは、Cloud Functions (Node.js) から簡単に実行できます。
    • リアルタイム同期機能がありますが、今回の契約システムでは主に読み書きに利用します。
    • セキュリティルール(Firestore Security Rules)を設定することで、「このユーザーは自分のデータしか読み書きできない」といった厳密なアクセス制御を、サーバーコードを書かずに実装できます。

4. メール送信の代替

  • 使用サービス: SendGrid などの外部SMTPサービスと Cloud Functions の連携
  • 使用感:
    • PHPMailer の代わりに、SendGridなどのサービスが提供するNode.js用のSDKをCloud Functions内で利用します。
    • Firebaseは標準で大量のメール送信機能を持たないため、外部サービスとの連携が必須となります。

特徴共有レンタルサーバー (PHP)Firebase (サーバーレス)
バックエンド言語PHPNode.js (JavaScript) が主流
デプロイFTPでファイルをアップロードコマンドライン $ firebase deploy で一括デプロイ
サーバー管理OSやPHPバージョンの管理が必要不要 (自動スケーリング)
スケーリング手動でプラン変更が必要自動でアクセスに応じて拡張/縮小
課金形態月額固定費用従量課金制 (使った分だけ)
データベースMySQL (リレーショナル)Cloud Firestore (NoSQL) が主流
使用ライブラリPHPMailer, TCPDFNode.jsのSDK (puppeteer, SendGridなど)
  • 初期構築: Firebase CLIのセットアップやNode.js環境の構築が必要になるため、PHPのみの場合より少し複雑です。
  • 開発: バックエンドとフロントエンドの両方でJavaScriptを使うことになるため、言語の統一感があります。
  • 運用: サーバーが落ちる心配やアクセス集中による負荷を気にする必要がなくなり、保守・運用が格段に楽になります。その代わり、外部サービス(Google Cloudのサービス)の仕様変更などに追従する必要があります。

とりあえず、今の段階でも実務で使えるレベルの環境は構築できていますし、PDFファイルを電子データもしくは紙で保存しておけば良いのですが、今後の拡張の方向性を考えてみるのも楽しいものですね!

コメント