Node.js アプリを作成してデプロイする方法

Node.js アプリケーションの構築は、ソフトウェア開発ライフサイクルの第一歩にすぎません。本番環境において、アプリケーションへのアクセス性を確保し、高いパフォーマンスとレジリエンスを実現することこそが、アプリケーション配信の重要なポイントです。最新のウェブ アプリケーションをデプロイするには、トラフィック プロファイル、ライフサイクル ステージ、リソース予算に見合ったアーキテクチャを選択する必要があります。

AI を活用したフルスタック プロトタイプをリリースする場合でも、本番環境グレードのバックエンド サービスをデプロイする場合でも、最新のクラウド環境では、自動化された方法とコンテナ化された方法の両方が利用可能です。このガイドでは、Node.js ウェブ アーキテクチャの基本コンセプトを説明し、デプロイに関する重要な考慮事項を考察するとともに、無料枠を使用してマネージド インフラストラクチャ上で Node.js アプリを作成およびデプロイする手順を説明します。

Node.js ランタイムとは

Node.js は、Chrome V8 JavaScript エンジン上に構築された、オープンソースのクロスプラットフォーム JavaScript ランタイム環境です。JavaScript をウェブブラウザの外部でサーバーサイドで実行できるため、単一のプログラミング言語を使用して、統合されたフルスタックのコードベースを記述できます。

同時接続ごとに独立したオペレーティングシステムのスレッドを生成する従来のマルチスレッド型のウェブサーバーとは異なり、Node.js はイベント ドリブン、シングルスレッド、ノンブロッキング I/O モデルで動作します。このアーキテクチャにより、Node.js は軽量かつ効率的になり、RESTful API、リアルタイム メッセージング、ストリーミング サービス、AI エージェント オーケストレーターなど、数千もの同時接続を処理できます。

従来の Node.js デプロイとサーバーレス コンテナ プラットフォームの比較

Node.js バックエンドのデプロイを準備する際、適切なコンピューティング環境を選択することは、メンテナンスのオーバーヘッド、スケーリングの速度、費用対効果に直接影響します。

機能

仮想マシン(IaaS / VPS)

PaaS / Buildpack ホスティング

最新のサーバーレス コンテナ

インフラストラクチャ管理

OS へのパッチ適用、ファイアウォール管理、ランタイムの更新を手動で行う

ベンダー ランタイム ロックを備えたフルマネージド プラットフォーム レイヤ

フルマネージド インフラストラクチャ、OS 管理不要

スケーリング メカニズム

指標ベースの VM 自動スケーリング(インスタンスのスピンアップに数分かかる)

インスタンス数またはワーカーの上限による自動スケーリング

リクエスト ドリブン型の即時自動スケーリング(ゼロへのスケーリングを含む)

パッケージ形式

未加工のソースファイル、systemd サービス、PM2 プロセス マネージャー

Git push リポジトリと自動 Buildpack を統合

標準の OCI / Docker コンテナ イメージ

アイドルコスト プロファイル

受信 HTTP トラフィックに関係なく 24 時間 365 日課金

多くの場合、最低限のベース インスタンスの料金が必要

アクティブなリクエストの処理中は 1 秒単位で厳密に課金

ポータビリティ

ポータビリティに優れているが、環境ドリフトのリスクが高い

ポータビリティが低い、プラットフォームの規則にロックされる

ポータビリティに優れ、あらゆる環境で同一のコンテナを実行可能

機能

仮想マシン(IaaS / VPS)

PaaS / Buildpack ホスティング

最新のサーバーレス コンテナ

インフラストラクチャ管理

OS へのパッチ適用、ファイアウォール管理、ランタイムの更新を手動で行う

ベンダー ランタイム ロックを備えたフルマネージド プラットフォーム レイヤ

フルマネージド インフラストラクチャ、OS 管理不要

スケーリング メカニズム

指標ベースの VM 自動スケーリング(インスタンスのスピンアップに数分かかる)

インスタンス数またはワーカーの上限による自動スケーリング

リクエスト ドリブン型の即時自動スケーリング(ゼロへのスケーリングを含む)

パッケージ形式

未加工のソースファイル、systemd サービス、PM2 プロセス マネージャー

Git push リポジトリと自動 Buildpack を統合

標準の OCI / Docker コンテナ イメージ

アイドルコスト プロファイル

受信 HTTP トラフィックに関係なく 24 時間 365 日課金

多くの場合、最低限のベース インスタンスの料金が必要

アクティブなリクエストの処理中は 1 秒単位で厳密に課金

ポータビリティ

ポータビリティに優れているが、環境ドリフトのリスクが高い

ポータビリティが低い、プラットフォームの規則にロックされる

ポータビリティに優れ、あらゆる環境で同一のコンテナを実行可能

Node.js アプリを作成する際の主な考慮事項

プロダクション レディな Node.js アプリケーションを開発するには、ボトルネックを防ぎ、稼働時間を確保するアーキテクチャ パターンに取り組む必要があります。

  • ステートレス アプリケーションの状態: 最新のサーバーレス プラットフォームは、受信トラフィックに応じてコンテナ インスタンスを動的にスピンアップおよびスピンダウンします。コンテナの一時ディスクに書き込まれたファイルは、再デプロイやスケールダウン時に消去されるため、ユーザー セッションの状態、アップロードしたメディア ファイル、バックグラウンド キューをローカルのコンテナメモリやローカル ディスクパスに保存することは避けてください。永続状態の管理には、Cloud Firestore、Cloud SQL for PostgreSQL、Cloud Storage などの専用のマネージド サービスを使用します。
  • 環境変数とシークレットの分離: API キー、データベース認証情報、シークレット キーをソース管理にハードコードすると、重大なセキュリティ上の脆弱性が生じます。ランタイム構成は常に環境変数(process.env)に分離し、コンテナのランタイム レベルで安全に挿入するようにしてください。
  • ポート バインディングとヘルスプローブ: サーバーレス コンテナ環境では、PORT 環境変数(通常はポート 8080)などのデフォルトのターゲット ポートを挿入することで HTTP トラフィックをルーティングします。Node.js サーバーは、ヘルスチェックと準備状況チェックに合格するために、process.env.PORT || 8080 を動的にリッスンする必要があります。
  • 正常なシャットダウンとシグナルの捕捉: Node.js アプリケーションは、オペレーティング システム シグナルの SIGTERM と SIGINT をインターセプトする必要があります。インフラストラクチャのオートスケーラーがスケールダウンを開始した際に、これらのシグナルを適切に処理することで、データベース接続を閉じ、コンテナが終了する前に、既存の HTTP リクエストの処理が完了するようにします。

Node.js アプリを作成してデプロイする方法

Node.js アプリケーションを作成およびデプロイするには、主に、AI を活用した迅速なプロトタイピング(ローカル設定は不要)または標準的なコンテナベースのデプロイ(既存のコードベース用)という、2 つのワークフローを使用できます。

手段 A: 迅速なプロトタイピング(AI Studio のビルドモードやスターター ティア(無料プロビジョニング)など)

迅速なプロトタイピングや AI アプリケーションにおいて、デベロッパーは Google AI Studio のビルドモードで、フルスタックの Node.js アーキテクチャを自然言語で記述できるほか、ローカルのコマンドライン ツールや必須の課金設定なしで Cloud Run にデプロイできます。

ステップ 1: ビルドモードでアプリケーションを初期化する

  1. Google AI Studio にアクセスし、ビルドモードに切り替えます。
  2. 必要なビジネス ロジックとフロントエンド インターフェースを説明するアプリケーション プロンプトを入力します(例: 「Node.js バックエンドと永続的なタスク管理を備えた在庫追跡ダッシュボードを構築して」)。
  3. 統合エージェントがアプリケーション ファイルを生成し、サーバーのルートを構成して、関連する npm 依存関係をインストールし、インタラクティブなプレビューを起動します。

ステップ 2: 組み込みのデータと認証を構成する

  • 永続ストレージの場合: プロンプトでデータ ストレージが必要な場合は、Cloud Firestore または Cloud SQL for PostgreSQL(デベロッパー エディション)を有効にします。AI Studio がスキーマ、モデル、クライアント接続ファイルのドラフトを自動的に作成します。
  • ユーザー ID の場合: Firebase Authentication を切り替えて、個別の OAuth リダイレクト ハンドラを手動で設定することなく、事前構成された Google ログインフローを有効にします。

ステップ 3: マネージド Cloud Run に公開する

  1. 上部にあるインターフェースで [公開] > [使ってみる] > [アプリを公開] をクリックします。
  2. デプロイするリージョンを選択します。
  3. アプリケーションにカスタムの <ユーザー定義>.ai.studio URL を指定して公開します。
  4. このプラットフォームは、コンテナをパッケージ化し、基盤となるコンピューティングをプロビジョニングして、数秒以内に本番環境用のライブ <ユーザー定義>.ai.studio HTTPS URL を提供します。

手段 B: カスタム Node.js アプリケーションのデプロイ(Docker、Cloud Run など)

既存のコードベースやカスタム マイクロサービスの場合は、Node.js アプリケーションを OCI 準拠のコンテナにパッケージ化し、Cloud Run に直接デプロイします。

ステップ 1: Node.js サーバーコードを構造化する

Express、Fastify、標準の Node.js ライブラリ(index.js)のいずれかを使用して、最小限の HTTP サーバーを作成します。

  • JavaScript
読み込んでいます...

 注: Cloud Run は、実行時に PORT 環境変数を自動的に挿入します。上記のコードにあるフォールバック || 8080 は、主に、デプロイ前にマシンで簡単にローカルテストを行えるようにするために含まれています。

ステップ 2: 安全なマルチステージ Dockerfile を作成する

マルチステージ ビルドを使用してアプリケーションをパッケージ化し、最小限の安全な本番環境イメージを確保します。

ベスト プラクティス: ルート ディレクトリに .dockerignore ファイルを作成し、node_modules と .env を追加します。これにより、ローカル開発ファイルが誤ってコンテナ イメージにバンドルされるのを防ぎ、イメージをクリーンで安全な状態に保つことができます。

ルート ディレクトリに Dockerfile という名前のファイルを作成します。

  • Dockerfile
読み込んでいます...

ステップ 3: Cloud Run にデプロイする

ローカルのルートフォルダから Google Cloud CLI を使用してデプロイを実行します。必要に応じて、アプリケーション用に <ユーザー定義>.cloud.run 形式のカスタム URL を作成することもできます。

  • Bash
読み込んでいます...

後でカスタム ドメインをマッピングするには、次のコマンドを使用します。

  • Bash
読み込んでいます...

無料枠とスターター ティアの料金メカニズム

無料枠の仕組みを理解することで、Node.js アプリケーションのプロトタイピングとスケーリングを予測どおりに行うことができます。

ティアのタイプ

コンピューティングとリソースの割り当て

要件 / 制限

Google Cloud スターター ティア(プロトタイピング)

• Cloud Run: 最大 2 つのアクティブなウェブ アプリケーション

• Cloud Firestore: 1 GiB のストレージ、50,000 回の読み取り/日、40,000 回の書き込み/日

• Cloud SQL: PostgreSQL デベロッパー エディション(ゼロへのスケーリング)

• Firebase Auth: Google ログインを含む

• 有効な Google アカウント

• クレジット カードや請求先アカウントは不要

• 単一のデプロイ リージョン ロック

標準の Google Cloud 無料枠(標準アカウント)

• Cloud Run: 200 万リクエスト/月、180,000 vCPU 秒/月、360,000 GiB 秒/月、1 GB の北米からの外向きネットワーク/月

• 最初の 90 日間は $300 分のウェルカム クレジットを利用可能



• リンクされた Cloud 請求先アカウント

• すべてのリージョンでプラットフォーム API への完全アクセス

ティアのタイプ

コンピューティングとリソースの割り当て

要件 / 制限

Google Cloud スターター ティア(プロトタイピング)

• Cloud Run: 最大 2 つのアクティブなウェブ アプリケーション

• Cloud Firestore: 1 GiB のストレージ、50,000 回の読み取り/日、40,000 回の書き込み/日

• Cloud SQL: PostgreSQL デベロッパー エディション(ゼロへのスケーリング)

• Firebase Auth: Google ログインを含む

• 有効な Google アカウント

• クレジット カードや請求先アカウントは不要

• 単一のデプロイ リージョン ロック

標準の Google Cloud 無料枠(標準アカウント)

• Cloud Run: 200 万リクエスト/月、180,000 vCPU 秒/月、360,000 GiB 秒/月、1 GB の北米からの外向きネットワーク/月

• 最初の 90 日間は $300 分のウェルカム クレジットを利用可能



• リンクされた Cloud 請求先アカウント

• すべてのリージョンでプラットフォーム API への完全アクセス

Google Cloud でビジネスの課題を解決する

新規のお客様には、Google Cloud で使用できる無料クレジット $300 分を差し上げます。
お客様独自の課題については、Google Cloud のセールス スペシャリストまで詳しくご相談ください。

サーバーレス環境で Node.js を実行するためのベスト プラクティス

  1. 依存関係を最小限に抑えてコールド スタートを最適化する: 使用されていない開発用パッケージを削除し(npm prune --production)、最新のモジュール ツリー シェイカー(esbuild や tsup など)を使用してサーバーコードをバンドルすることで、イメージサイズを縮小し、コンテナの初期化を高速化します。
  2. インスタンスの上限を設定する: サンドボックスから本番環境プロジェクトに移行する際は、同時実行のしきい値を指定し、--max-instances(例: --max-instances 5)を設定して、予期しないトラフィックの急増によって目標の運用予算を超えないようにします。
  3. ログを構造的に永続化する: 構造化 JSON 形式を使用して、ログを stdout と stderr にストリーミングします。マネージド ロギング システムは JSON オブジェクトを自動的に解析するため、HTTP ステータス コード、重大度レベル、実行レイテンシに基づいてフィルタできます。
  4. ネイティブのヘルスチェックを使用する: 明確な HTTP エンドポイント プローブ(/healthz など)を実装し、受信ルーティング プロキシに準備完了を通知する前に、ダウンストリーム データベースへの接続性を検証します。

次のステップ

$300 分の無料クレジットと 20 種類以上の無料枠プロダクトを活用して Google Cloud で構築を開始しましょう。

  • Google Cloud プロダクト
  • 100 種類を超えるプロダクトをご用意しています。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。また、すべてのお客様に 25 以上のプロダクトを無料でご利用いただけます(毎月の使用量上限があります)。
Google Cloud