Skip to content
⚠️ This article was written in 2020. Some content may be outdated.

Dockerを使ったフロントエンド開発環境の構築

日々の開発において Docker のフロントエンド開発環境の構築頻度は高まっている。本記事ではその使い方、原理、最適化戦略を体系的に解説する。

クイックスタート ​

まずは基本的な実装方法を見てみよう:

dockerfile
FROM node:20-alpine AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile

FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm build

FROM nginx:alpine AS runner
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

このコードは基本的な使い方を示す。実際のプロジェクトではエラー処理と境界条件も考慮が必要だ。

内部原理 ​

この基盤の上でさらに最適化できる:

dockerfile
FROM node:20-alpine AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile

FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm build

FROM nginx:alpine AS runner
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

このパターンは大規模プロジェクトで実用的で、保守コストを大幅に削減できる。

ビジネス実践 ​

実際のプロジェクトでは使い方はもう少し複雑になる:

dockerfile
FROM node:20-alpine AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile

FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm build

FROM nginx:alpine AS runner
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

この方法によりコードのテスト容易性と拡張性が向上した。

パフォーマンス比較 ​

以下は全体のサンプルだ:

dockerfile
FROM node:20-alpine AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile

FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm build

FROM nginx:alpine AS runner
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

境界条件の処理に注意せよ。本番環境で極めて重要だ。

まとめ ​

  • コード例は参考用。実際のビジネス場面に合わせ調整せよ
  • Docker のフロントエンド開発環境の構築は銀の弾丸ではない。プロジェクト規模と技術スタックに応じて選ぶべきだ
  • API を暗記するより基礎原理を理解する方が重要だ

MIT Licensed