開発環境の構築で消耗するな。Docker Composeを「使い捨て」て爆速で開発を始める技術

開発環境の構築で消耗するな。Docker Composeを「使い捨て」て爆速で開発を始める技術

「環境構築に半日かかりました」なんて、エンジニアとして一番ダサい告白だぞ。PCを買い替えるたびに地獄のセットアップを繰り返して、挙句の果てに「自分のPCでは動く」という呪いにかかる。そんな無駄な作業、今すぐ卒業しろ。

Docker Composeは、単なるコンテナ管理ツールじゃない。「いつでも、どこでも、誰でも、コマンド一発で開発を開始できる」という最強の権利を勝ち取るための武器だ。


1. 「手動マイグレーション」という負の遺産を捨てろ

コンテナを立ち上げた後、「おっと、マイグレーションを叩かなきゃ」なんて手動作業をしてる奴は、チームの生産性をドブに捨てているのと同じだ。そんなもん、人間がやる作業じゃない。

`depends_on`の`condition`を活用して、DBの準備が整った瞬間にマイグレーションが走る仕組みを構築しろ。

services:
  db:
    image: postgres:15-alpine
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_DB: dev_db

  app:
    build: .
    depends_on:
      db:
        condition: service_healthy
    # マイグレーション完了後にアプリを起動する
    command: sh -c "npx prisma migrate deploy && npm run start"

これなら、`docker-compose up`を叩いてコーヒーを淹れて戻ってくる頃には、DBもスキーマも整った完璧な環境が目の前に出来上がっている。これが「エンジニアの怠惰」の正しい方向性だ。


2. なぜお前のビルドは遅いのか?「.dockerignore」の盲点

「ビルドが遅い」と嘆く奴の9割は、`.dockerignore`をサボっている。`node_modules`や`.git`をコンテナに送るなんて、重い荷物を背負ってマラソンするようなものだ。

ビルドコンテキストに不要なゴミを混ぜると、Dockerは毎回数GBものデータをデーモンに送りつけることになる。これが「死のロード」の正体だ。

`.dockerignore`の鉄則:

node_modules
dist
.git
.env
.DS_Store
*.log

これだけで、ビルドのコンテキスト送信時間は劇的に短縮される。体感で2倍速くなるなんて当たり前だ。初心者が躓く「謎のビルド失敗」の多くは、この無視設定の欠如によるキャッシュの汚染から始まる。


3. 初期データの投入は「コード」で管理しろ

`init.sql`を置いて運用するのは、小規模なうちはいいが、スキーマが頻繁に変わる開発中にはただの足枷になる。

ORM(Prismaなど)を使って、アプリケーション起動時にシード値を流し込むスクリプトを書いておけ。型定義と同期できるから、テーブル構成が変わってもスクリプトの修正が即座に完了する。

// seed.ts の例
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();

async function main() {
  await prisma.user.upsert({
    where: { email: '[email protected]' },
    update: {},
    create: { email: '[email protected]', name: 'Admin' },
  });
}

main().catch(e => { console.error(e); process.exit(1); });

これをマイグレーション後のタスクとして組み込めば、DBの整合性に悩む夜はもう二度と来ない。


4. 複雑にするな、シンプルに殴れ

巷の技術記事は「Kubernetesを導入しよう」「マイクロサービス化しよう」と、耳障りのいい言葉で初心者のやる気を削ぐ。だが、個人開発や小規模プロダクトにおいて、過剰な抽象化は「悪」だ。

Docker Composeで環境を完結させ、使い捨て可能な状態にしておく。これだけで、お前の開発体験(DX)は劇的に向上する。

最後に一つだけ忠告しておく。

技術選定の基準は、「どれだけ流行っているか」ではなく「どれだけ自分がサボれるか」だ。Docker Composeは、頑張って設定を書く場所じゃない。脳死で開発を始めるための「最強のスイッチ」だと思え。

明日から「環境構築に1分以上かけている」という事実に対して、もっと危機感を持て。自動化は、怠惰で賢いエンジニアのためにあるんだからな。