MENU

Webアプリのデプロイとは何か?基本的な流れを理解する

Webアプリのデプロイとは何か?基本的な流れを理解する

Webアプリのデプロイとは、手元で動いているアプリを、インターネット越しに他の人も使える状態へ出す作業のことです。単にファイルを置くだけでは終わりません。ビルド、起動設定、環境変数、公開URL、ログ確認まで含めて初めて「使える公開環境」になります。

たとえばローカルでは http://localhost:3000 で動いていたアプリも、そのままでは自分のPCからしか見えません。デプロイでは、そのアプリをクラウド上で起動し、公開URLや独自ドメインからアクセスできるようにします。

ここがポイント: デプロイの中心は「コードを公開すること」ではなく、公開先で正しく起動し、更新し、障害時に確認できる状態を作ることです。

  • できること: ローカルのWebアプリを公開URLで使えるようにする
  • 使う場面: 社内ツール公開、ポートフォリオ公開、APIサーバー運用、テスト環境の共有
  • 最低限必要な要素: ソースコード、起動コマンド、環境変数、公開先、動作確認手順
  • 初心者が最初に見るべき順番: ローカル動作確認 → ビルド → 公開先設定 → デプロイ → ログ確認
目次

デプロイとは何をしているのか

言い換えると、デプロイは「このアプリを、この環境で、この設定で起動してください」と公開先に渡す作業です。

具体的には、次の処理が並びます。

  • Gitリポジトリやアップロードしたファイルを公開先に渡す
  • 必要なら依存関係をインストールする
  • ビルドを実行して本番用ファイルを作る
  • アプリを起動する
  • URLやドメインで外部アクセスを受ける
  • ログやヘルスチェックで稼働状態を監視する

静的サイトなら「ビルド済みHTMLを配信する」で済むこともあります。一方、APIやログイン機能を持つWebアプリでは、Node.jsやPythonのプロセスを起動し、データベースや環境変数も揃えないと動きません。この差を理解すると、デプロイの手順が急に整理しやすくなります。

基本的な流れ

長く見えても、流れ自体はかなり定型です。まずは6段階で捉えるのがわかりやすいです。

1. ローカルで動く状態を作る

最初にやるのは本番ではなくローカル確認です。

  • 開発用サーバーが起動するか
  • エラーなく画面が開くか
  • APIが期待どおり返るか
  • .env などに秘密情報を直書きしていないか

ここが不安定なまま公開先に送ると、失敗の原因がローカル由来なのか公開先由来なのか切り分けにくくなります。

2. 本番用の設定を分ける

本番環境では、ローカルと同じ設定をそのまま使えないことがよくあります。

代表例は次のとおりです。

  • ポート番号: 公開先が指定する PORT を使う
  • 環境変数: APIキーやDB接続情報は管理画面で設定する
  • 実行モード: NODE_ENV=production など本番向け設定を使う
  • 接続先: 開発用DBではなく本番用DBを使う

Node.jsでは環境変数を process.env から参照できます。秘密情報をコードやGitに含めないためにも、この形は基本です。

3. 公開先を選ぶ

デプロイ先は、アプリの種類で考えると選びやすくなります。

  • フロントエンド中心のサイト: Vercel、Netlify
  • APIやSSRを含むWebアプリ: Render、各種PaaS、コンテナ実行環境
  • 複数サービスをまとめて動かす: Docker対応の環境やクラウド基盤

VercelやNetlifyはGit連携でデプロイしやすく、ブランチごとのプレビューもしやすい設計です。RenderはNode.jsやPythonのWebサービスをGit連携で継続デプロイしやすく、ポートやヘルスチェックの考え方も押さえやすいので、学習用にも向いています。

4. ビルドと起動コマンドを決める

ここは初心者がつまずきやすいところです。

  • ビルドコマンド: 依存関係の取得や本番用ファイルの生成
  • 起動コマンド: 公開環境で実際にアプリを立ち上げる命令

たとえばNode.jsなら次のようなイメージです。

  • ビルド: npm ci && npm run build
  • 起動: npm start

静的サイトでは「ビルド結果の出力先ディレクトリ」も必要です。React系なら distbuild を指定する場面が多く、ここを間違えるとビルドは通っても画面が空になります。

5. デプロイを実行する

最近の主要サービスでは、Git連携が基本です。

  • GitHubなどのリポジトリを接続する
  • 対象ブランチを選ぶ
  • ビルド設定と環境変数を入れる
  • git push でデプロイを走らせる

VercelはGit接続したリポジトリへの push や pull request ごとに新しいデプロイを作れます。NetlifyもGit連携後は push ごとにビルドして公開できます。つまり、手動アップロードよりも「リポジトリを更新したら反映」の形が基本になっています。

6. 公開後に確認する

デプロイ完了の表示だけでは足りません。ここで見るべきものがあります。

  • トップページが開くか
  • APIが200系で返るか
  • 環境変数が効いているか
  • ログインやフォーム送信が通るか
  • ログに例外が出ていないか
  • ヘルスチェックが成功しているか

本番の不具合は、デプロイ直後の5分で見つかるものが多いです。公開後確認までを手順に含めておくと、作業品質が大きく変わります。

最小構成のサンプル

ここでは、Node.js + Express の最小例で「デプロイに必要な形」を見ます。確認時点は2026年4月です。画面名や設定項目はサービス更新で変わることがあります。

ファイル例

server.js

const express = require('express');

const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('Deploy success');
});

app.get('/healthz', (req, res) => {
  res.status(200).json({ ok: true });
});

app.listen(port, '0.0.0.0', () => {
  console.log(`Server running on ${port}`);
});

package.json

{
  "name": "deploy-sample",
  "private": true,
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^5.1.0"
  }
}

この例で重要なのは3点です。

  • process.env.PORT を使っている
  • 0.0.0.0 で待ち受けている
  • /healthz のような確認用エンドポイントを持っている

RenderのWebサービスは外部からのHTTPリクエストを受けるために 0.0.0.0 でポート待ち受けする必要があります。ヘルスチェックURLを用意しておくと、デプロイ後の死活確認もしやすくなります。

入力例と出力例

ローカルでの確認例です。

入力:

npm install
npm start
curl http://localhost:3000/
curl http://localhost:3000/healthz

出力例:

Deploy success
{"ok":true}

この状態までできていれば、次は公開先に同じアプリを持っていくだけです。

実務での使いどころ

デプロイを覚えると、単に公開できるだけではありません。チーム作業でも効きます。

テスト環境をすぐ共有できる

ブランチごとにプレビューURLが発行される環境では、レビュー担当者はローカル構築なしで画面確認できます。修正のたびにURL上で差分が見えるので、口頭説明だけで進めるより早いです。

社内ツールを小さく始めやすい

CSV変換や簡易フォームのような小規模ツールでも、デプロイしてURL化すると利用者が増えます。配布用ZIPを都度渡すより、1か所を更新するほうが管理しやすいからです。

API公開やWebhook受け口を作れる

ローカルサーバーでは外部サービスから叩けません。デプロイすればWebhook受信用URLや社内APIの試験環境をすぐ用意できます。

デプロイ先の考え方

どこに出すかは、機能より運用形態で決めると失敗しにくいです。

静的フロントエンド向け

  • 向いているもの: HTML/CSS/JS、ReactやVueのビルド成果物
  • 代表的な使い方: Git連携で push ごとにビルドして配信
  • 候補: Vercel、Netlify

公開が速く、プレビューも作りやすいです。問い合わせフォームや会員機能のようにサーバー処理が増えると、別のバックエンドも必要になります。

Webアプリ・API向け

  • 向いているもの: Express、Django、FastAPI、SSRアプリ
  • 必要になりやすいもの: 起動コマンド、環境変数、ヘルスチェック
  • 候補: Render、各種PaaS

「コードを置けば終わり」ではなく、どのコマンドで立ち上げるかまで指定するのが前提です。

コンテナでまとめたい場合

Dockerを使うと、アプリに必要な実行環境をイメージとして固められます。ローカル、CI、公開先で差が出にくくなるのが強みです。

FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "server.js"]

Dockerfileでは FROMWORKDIRCOPYRUNCMD のような命令で、ビルド手順と起動方法を定義します。複数人開発で「手元では動くのに本番で動かない」を減らしたいときに強い方法です。

よくある失敗と対処

デプロイ失敗の原因は、実はかなり定番です。

PORT を無視している

ローカル用に 3000 固定で書くと、公開先が割り当てたポートで待ち受けできず起動失敗になります。

対処:

  • process.env.PORT || 3000 を使う
  • 固定ポート前提の設定を消す

localhost でしか待ち受けていない

公開環境では 127.0.0.1 だけにバインドすると外から届きません。

対処:

  • 0.0.0.0 で待ち受ける
  • 公開先の推奨設定を確認する

環境変数をGitに入れてしまう

APIキーや接続情報をコードに埋め込むと、漏えいと設定差分の両方で困ります。

対処:

  • 秘密情報は管理画面の環境変数に入れる
  • .env をそのままコミットしない
  • ログに秘密情報を出さない

ビルドは成功したのに画面が404になる

404は、要求されたURLのリソースが見つからない状態です。静的サイトでは公開ディレクトリの指定ミス、SPAではルーティング設定不足、APIではパスの食い違いがよくあります。

対処:

  • publish directory や build output の設定を見直す
  • ルーティング先のパスを確認する
  • フロント側のAPIベースURLを本番向けに切り替える

500エラーで落ちる

500はサーバー側の想定外エラーです。未処理例外、設定不足、メモリ不足、接続失敗など原因が広いので、まずログを見るのが先です。

対処:

  • デプロイログと実行ログを確認する
  • DB接続文字列やAPIキーの設定漏れを疑う
  • 起動直後に落ちるなら start コマンドを見直す
  • ヘルスチェックURL単体で応答するか試す

最低限のチェックリスト

本番に出す前後で、次だけは毎回確認すると事故が減ります。

  • ローカルで起動確認したか
  • 本番用の環境変数を管理画面に設定したか
  • start コマンドが本番向けになっているか
  • PORT と待ち受けアドレスを公開先に合わせたか
  • デプロイ後にトップページと主要機能を触ったか
  • ログとヘルスチェックを見たか
  • 独自ドメインやHTTPS設定が必要なら最後に確認したか

まず何から始めればいいか

初めてなら、いきなり複雑な構成にしないほうが早いです。

おすすめの順番は次のとおりです。

  1. Expressなどで最小のWebアプリを作る
  2. GitHubに置く
  3. RenderかVercel/Netlifyに接続する
  4. git push で公開する
  5. ログとURL確認までやる

ここまで一度通すと、次に学ぶべきことがかなり明確になります。データベース接続、独自ドメイン、CI/CD、自動ロールバックといった実務的な話も、この土台があると理解しやすくなります。

最後に見るべき点は一つです。デプロイは「公開ボタンを押す作業」ではなく、更新しても壊れにくい運用の入口だということです。次に学ぶなら、環境変数管理とデプロイログの読み方から進めると、実務での失敗がかなり減ります。

参照リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次