SES現場で即戦力になるDocker開発環境構築スクリプト集【2026年版】
SES現場で新しいプロジェクトにジョインする際、開発環境のセットアップに時間を取られることは珍しくありません。プロジェクトごとに異なる技術スタック、バージョン違い、依存関係の複雑さ―これらの課題を解決するために、2026年現在多くのSES現場でDockerを活用した環境構築が標準化されています。
本記事では、SES現場で実際に使われている実践的なDockerスクリプト集を紹介し、新しい現場で最速で開発環境を構築できるテクニックを解説します。
SES現場でよくある開発環境の課題
環境構築の時間的コスト
SES現場では、プロジェクトの参画期間が限られているため、環境構築に時間をかけすぎることはできません。経済産業省の「IT人材需給に関する調査」(2026年版)によると、SES案件の平均参画期間は6.2ヶ月となっており、初期の環境構築フェーズを短縮することの重要性が増しています。
技術スタックの多様性
- フロントエンド:React 18.x、Vue 3.x、Next.js 14.x
- バックエンド:Node.js 20.x、Python 3.12、Java 21
- データベース:PostgreSQL 16、MySQL 8.0、MongoDB 7.0
- インフラ:AWS、Azure、GCP
よくある環境構築の問題
- バージョン不整合:ローカル環境とプロダクション環境のバージョン違い
- 依存関係の競合:複数プロジェクト間でのライブラリ競合
- OS差異:Windows、macOS、Linux間での動作違い
- 設定の属人化:個別に調整された設定の共有困難
Docker化による解決アプローチ
コンテナ化のメリット
- 環境の標準化:開発・テスト・本番環境の一致
- ポータビリティ:どのマシンでも同じ環境を再現
- 分離:プロジェクト間の依存関係を分離
- スケーラビリティ:必要に応じてリソースを調整
実践的Dockerスクリプト集
1. フルスタックWeb開発環境(React + Node.js + PostgreSQL)
SES現場で最も多く見かけるフルスタック構成の環境を、一つのコマンドで構築できるスクリプトです。
# docker-compose.yml
version: '3.8'
services:
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ./frontend:/app
- /app/node_modules
environment:
- REACT_APP_API_URL=http://localhost:8000
depends_on:
- backend
backend:
build:
context: ./backend
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- ./backend:/app
- /app/node_modules
environment:
- DATABASE_URL=postgresql://postgres:password@db:5432/app_db
- NODE_ENV=development
depends_on:
- db
db:
image: postgres:16
environment:
- POSTGRES_DB=app_db
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
redis:
image: redis:7.2
ports:
- "6379:6379"
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
2. 開発環境自動セットアップスクリプト
新しい現場にジョインした際、一つのコマンドで完全な開発環境を構築できるシェルスクリプトです。
#!/bin/bash
# setup-dev-env.sh - SES現場対応開発環境セットアップスクリプト
set -e # エラー時に終了
echo "🚀 SES開発環境セットアップを開始します..."
# カラー出力の設定
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# プロジェクト情報の確認
read -p "プロジェクト名を入力してください: " PROJECT_NAME
read -p "使用する技術スタック (react/vue/next): " TECH_STACK
read -p "データベース (postgres/mysql/mongodb): " DATABASE
echo -e "${YELLOW}環境構築中...${NC}"
# ディレクトリ構造の作成
create_directory_structure() {
echo "📁 ディレクトリ構造を作成中..."
mkdir -p ${PROJECT_NAME}/{frontend,backend,database,scripts,docs}
mkdir -p ${PROJECT_NAME}/docker/{nginx,redis}
mkdir -p ${PROJECT_NAME}/.github/workflows
echo -e "${GREEN}✅ ディレクトリ構造作成完了${NC}"
}
# Dockerファイルの生成
generate_dockerfiles() {
echo "🐳 Dockerファイルを生成中..."
# フロントエンド用Dockerfile
cat > ${PROJECT_NAME}/frontend/Dockerfile << EOF
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
EOF
# バックエンド用Dockerfile
cat > ${PROJECT_NAME}/backend/Dockerfile << EOF
FROM node:20-alpine
WORKDIR /app
# 開発用ツールのインストール
RUN apk add --no-cache git
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8000
CMD ["npm", "run", "dev"]
EOF
echo -e "${GREEN}✅ Dockerfile生成完了${NC}"
}
# 開発用スクリプトの生成
generate_dev_scripts() {
echo "📝 開発用スクリプトを生成中..."
# 開発サーバー起動スクリプト
cat > ${PROJECT_NAME}/scripts/dev.sh << 'EOF'
#!/bin/bash
echo "🚀 開発サーバーを起動しています..."
docker-compose up --build
EOF
# テスト実行スクリプト
cat > ${PROJECT_NAME}/scripts/test.sh << 'EOF'
#!/bin/bash
echo "🧪 テストを実行しています..."
docker-compose exec backend npm test
docker-compose exec frontend npm test
EOF
# データベースマイグレーションスクリプト
cat > ${PROJECT_NAME}/scripts/migrate.sh << 'EOF'
#!/bin/bash
echo "🗄️ データベースマイグレーションを実行しています..."
docker-compose exec backend npm run migrate
EOF
chmod +x ${PROJECT_NAME}/scripts/*.sh
echo -e "${GREEN}✅ 開発用スクリプト生成完了${NC}"
}
# 環境変数ファイルの生成
generate_env_files() {
echo "🔧 環境変数ファイルを生成中..."
cat > ${PROJECT_NAME}/.env << EOF
# プロジェクト設定
PROJECT_NAME=${PROJECT_NAME}
NODE_ENV=development
# データベース設定
DB_HOST=db
DB_PORT=5432
DB_NAME=app_db
DB_USER=postgres
DB_PASSWORD=password
# Redis設定
REDIS_HOST=redis
REDIS_PORT=6379
# API設定
API_PORT=8000
API_URL=http://localhost:8000
# フロントエンド設定
REACT_APP_API_URL=http://localhost:8000
PORT=3000
EOF
echo -e "${GREEN}✅ 環境変数ファイル生成完了${NC}"
}
# メイン処理の実行
main() {
create_directory_structure
generate_dockerfiles
generate_dev_scripts
generate_env_files
cd ${PROJECT_NAME}
echo -e "${GREEN}🎉 環境構築が完了しました!${NC}"
echo -e "${YELLOW}次のステップ:${NC}"
echo "1. cd ${PROJECT_NAME}"
echo "2. ./scripts/dev.sh"
echo "3. ブラウザで http://localhost:3000 にアクセス"
}
# スクリプト実行
main
3. マイクロサービス対応Docker Compose設定
大規模なSES案件でよく見られるマイクロサービス構成に対応したDocker Compose設定です。
# docker-compose.microservices.yml
version: '3.8'
services:
# API Gateway
api-gateway:
image: nginx:1.25
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/ssl:/etc/nginx/ssl
depends_on:
- user-service
- product-service
- order-service
networks:
- microservices-network
# User Service
user-service:
build:
context: ./services/user-service
dockerfile: Dockerfile
environment:
- DATABASE_URL=postgresql://postgres:password@user-db:5432/user_db
- REDIS_URL=redis://redis:6379/0
- JWT_SECRET=your_jwt_secret_here
depends_on:
- user-db
- redis
networks:
- microservices-network
deploy:
replicas: 2
resources:
limits:
cpus: '0.5'
memory: 512M
# Product Service
product-service:
build:
context: ./services/product-service
dockerfile: Dockerfile
environment:
- DATABASE_URL=postgresql://postgres:password@product-db:5432/product_db
- ELASTICSEARCH_URL=http://elasticsearch:9200
depends_on:
- product-db
- elasticsearch
networks:
- microservices-network
deploy:
replicas: 2
# Order Service
order-service:
build:
context: ./services/order-service
dockerfile: Dockerfile
environment:
- DATABASE_URL=postgresql://postgres:password@order-db:5432/order_db
- RABBITMQ_URL=amqp://rabbitmq:5672
depends_on:
- order-db
- rabbitmq
networks:
- microservices-network
# Databases
user-db:
image: postgres:16
environment:
- POSTGRES_DB=user_db
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
volumes:
- user_db_data:/var/lib/postgresql/data
networks:
- microservices-network
product-db:
image: postgres:16
environment:
- POSTGRES_DB=product_db
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
volumes:
- product_db_data:/var/lib/postgresql/data
networks:
- microservices-network
order-db:
image: postgres:16
environment:
- POSTGRES_DB=order_db
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
volumes:
- order_db_data:/var/lib/postgresql/data
networks:
- microservices-network
# Infrastructure Services
redis:
image: redis:7.2
volumes:
- redis_data:/data
networks:
- microservices-network
elasticsearch:
image: elasticsearch:8.11.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
networks:
- microservices-network
rabbitmq:
image: rabbitmq:3.12-management
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=password
ports:
- "15672:15672" # Management UI
volumes:
- rabbitmq_data:/var/lib/rabbitmq
networks:
- microservices-network
# Monitoring
prometheus:
image: prom/prometheus:v2.48.0
ports:
- "9090:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
networks:
- microservices-network
grafana:
image: grafana/grafana:10.2.0
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana_data:/var/lib/grafana
networks:
- microservices-network
volumes:
user_db_data:
product_db_data:
order_db_data:
redis_data:
elasticsearch_data:
rabbitmq_data:
prometheus_data:
grafana_data:
networks:
microservices-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
応用パターンと実践テクニック
1. 環境固有の設定管理
SES現場では、開発・ステージング・本番環境で異なる設定が必要になることがよくあります。
# 環境別Docker Compose設定の管理
# 開発環境
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
# ステージング環境
docker-compose -f docker-compose.yml -f docker-compose.staging.yml up
# 本番環境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
2. ヘルスチェックの実装
サービスの状態監視は、特に複数のサービスが連携するSES案件では重要です。
# healthcheck付きのサービス定義例
services:
backend:
build: ./backend
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
depends_on:
db:
condition: service_healthy
db:
image: postgres:16
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
3. 開発効率を向上させるMakefile
よく使うDockerコマンドをMakefileにまとめることで、チーム全体の開発効率が向上します。
# Makefile
.PHONY: help build up down logs shell test clean
# デフォルトターゲット
help: ## このヘルプを表示
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
build: ## Dockerイメージをビルド
docker-compose build
up: ## 開発サーバーを起動
docker-compose up -d
@echo "🚀 開発サーバーが起動しました"
@echo "Frontend: http://localhost:3000"
@echo "Backend API: http://localhost:8000"
@echo "Database: localhost:5432"
down: ## サーバーを停止
docker-compose down
logs: ## ログを表示
docker-compose logs -f
shell-backend: ## バックエンドコンテナにシェル接続
docker-compose exec backend sh
shell-frontend: ## フロントエンドコンテナにシェル接続
docker-compose exec frontend sh
shell-db: ## データベースに接続
docker-compose exec db psql -U postgres -d app_db
test: ## テストを実行
docker-compose exec backend npm test
docker-compose exec frontend npm test
migrate: ## データベースマイグレーション
docker-compose exec backend npm run migrate
seed: ## テストデータを投入
docker-compose exec backend npm run seed
clean: ## 未使用のDockerリソースを削除
docker system prune -f
docker volume prune -f
reset: ## 完全リセット(データも削除)
docker-compose down -v
docker-compose build --no-cache
docker-compose up -d
monitor: ## システムリソースを監視
docker stats
パフォーマンス最適化のポイント
1. マルチステージビルドの活用
本番環境のイメージサイズを削減し、セキュリティを向上させます。
# フロントエンド用マルチステージDockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# 本番用の軽量イメージ
FROM nginx:1.25-alpine AS production
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
2. Dockerキャッシュの最適化
# 最適化されたDockerfile例
FROM node:20-alpine
WORKDIR /app
# 依存関係の情報を先にコピー(キャッシュ効率化)
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force
# アプリケーションコードをコピー
COPY . .
# 不要なファイルを削除
RUN rm -rf /tmp/* /var/cache/apk/*
EXPOSE 8000
USER node
CMD ["node", "server.js"]
SES現場でのDocker活用のベストプラクティス
1. セキュリティの考慮
- 本番環境では非rootユーザーでコンテナを実行
- 機密情報は環境変数やSecretで管理
- 定期的なベースイメージの更新
2. チーム協力の促進
- 標準化されたディレクトリ構造
- 分かりやすいREADME.mdの作成
- Makefileによるコマンドの統一
3. トラブルシューティング
# よく使うデバッグコマンド
# コンテナの状態確認
docker-compose ps
# ログの確認
docker-compose logs -f [service_name]
# コンテナ内でのコマンド実行
docker-compose exec [service_name] sh
# ネットワークの確認
docker network ls
docker network inspect [network_name]
# ボリュームの確認
docker volume ls
docker volume inspect [volume_name]
まとめ
SES現場でのDocker活用は、2026年現在ますます重要になっています。本記事で紹介したスクリプト集を活用することで:
- 環境構築時間の大幅短縮:従来の手動設定から自動化への移行
- チーム間の設定統一:属人化の防止と知識共有の促進
- プロジェクト間のポータビリティ向上:異なる現場でも同じ手法を適用可能
- 運用の安定性向上:再現可能な環境構築による障害減少
SES業界のトレンドとして、Docker化されたプロジェクトの経験は市場価値を大きく向上させます。これらのテクニックを身につけることで、新しい現場でも即戦力として活躍できるでしょう。
今後もクラウドネイティブ技術の進歩とともに、SES現場でのコンテナ活用はさらに加速していくと予想されます。継続的な学習とスキルアップを心がけ、変化に対応できるエンジニアを目指しましょう。