メインコンテンツまでスキップ

第20章:オプションサービスを“必要なときだけ”起動する(profiles)🎛️🧩

この章は「普段は軽く、必要なときだけ便利ツールを足す」ための仕組み=profilesを覚える回だよ〜!😺✨ DB管理UIやRedis管理UIみたいな“補助輪ツール”を、いつも起動しないで済むようにして、開発スタックをスッキリ保つのがゴール👍


1) profilesって何?(超ざっくり)🧠💡

Composeでは、サービスに profiles を付けると「そのprofileが有効なときだけ、そのサービスを起動対象にする」ってできるよ〜🎚️✨ 逆に、profiles を付けてないサービスは いつでも有効(常に起動対象) になるのが基本ルール!(Docker Documentation)

  • ✅ いつも起動する:API / DB / Redis / Worker など(profiles なし)
  • ✅ 必要なときだけ起動する:pgAdmin / Redis Insight / MailHog など(profiles あり)

しかも大事ポイント👇 profilesは services にだけ効くnetworks:volumes: みたいなトップレベル要素は、profilesに関係なく“常に有効”)だよ!(Docker Documentation)


2) まずは最強にありがちな例:管理UIを“必要なときだけ”🛠️🧩

たとえばこんな気持ち👇

  • ふだん:API/DB/Redisだけで軽く開発したい💨
  • 必要なとき:DBの中身見たい→pgAdmin起動したい👀🐘
  • Redisの中身見たい→RedisInsight起動したい👀🟥

そこで admin profile を作って、管理UIをまとめてオン/オフする!


3) compose.yaml 例(admin profile)📄✨

ここでは「pgAdmin と RedisInsight を admin profile に入れる」例だよ🎛️ ふだんは起動しないから、PCも気持ちも軽い😆🪶

services:
api:
build: ./api
ports:
- "3000:3000"
depends_on:
- db
- redis

db:
image: postgres:17
environment:
POSTGRES_PASSWORD: postgres
volumes:
- pgdata:/var/lib/postgresql/data

redis:
image: redis:7

# --- ここから「必要なときだけ」組 ---
pgadmin:
image: dpage/pgadmin4:8
profiles: ["admin"]
ports:
- "5050:80"
environment:
PGADMIN_DEFAULT_EMAIL: admin@example.com
PGADMIN_DEFAULT_PASSWORD: admin
depends_on:
- db

redisinsight:
image: redis/redisinsight:2
profiles: ["admin"]
ports:
- "5540:5540"
depends_on:
- redis

volumes:
pgdata:

ポイントはこれだけ👇😺

  • pgadminredisinsightprofiles: ["admin"] を付けた
  • それ以外(api/db/redis)は普段から必要だから profile を付けない

profilesの基本仕様はこの挙動でOK!(Docker Documentation)


4) 起動のしかた(3パターン)🚀🎚️

パターンA:普段どおり(adminなし)🏃‍♂️💨

docker compose up -d

api/db/redis だけ起動(軽い!)✨


パターンB:admin profile を有効化して起動🎛️✨

docker compose --profile admin up -d

api/db/redis に加えて、pgadmin/redisinsight も起動するよ! --profile で有効化できるのが公式のやり方👍(Docker Documentation)


パターンC:環境変数でprofileを有効化(手元の切り替え用)🔁🧪

PowerShellだとこんな感じ👇

$env:COMPOSE_PROFILES="admin"
docker compose up -d

これも公式にある方法だよ〜!(matsuand.github.io)


5) 「サービス名を直接指定」するとどうなる?(地味に便利)🎯🧰

実は… profiles が付いてても、コマンドでサービス名を明示的に指定すると、そのサービスは起動できる!😳✨ そして、そのとき profileが自動的に有効扱いになるよ。(Docker Documentation)

例:pgAdminだけ欲しい!ってとき👇

docker compose up -d pgadmin

このときの注意👇⚠️

  • 起動するのは「指定したサービス + depends_on の依存」だけ
  • 同じprofile仲間の他サービス(例:redisinsight)は勝手に起動しないことがある → “profile丸ごと起動”したいなら --profile admin が安定!(Docker Documentation)

6) 罠ポイント:depends_on と profiles の相性⚠️🧨

ここ、初学者が一番ハマるやつ!!😵‍💫💥

ありがちな事故

「AサービスがBサービスに depends_on してるのに、Bがprofileで無効」だと、 **“必要なのに無効だよ”**ってエラーになることがあるよ。 (実際、そういう挙動の説明が公式側にもある)(docs.docker.jp)

回避の基本ルール(これだけ覚える)🧠✨

  • 本体が依存するサービス(DB/Redis等)は profile に入れない(常時有効にする)
  • profileに入れるのは、基本「なくても本体が動く補助ツール」だけ🎛️🧩

つまりこう👇

  • ✅ DBは常時起動(profileなし)
  • ✅ pgAdminはadmin profile(なくてもAPIは動く)

この設計にすると、ほぼ平和🕊️✨


7) “設計センス”としてのprofiles(超大事)🏗️✨

profilesは、ただの便利機能じゃなくて「構成を読みやすくする設計」でもあるよ😺

✅ こう分けると気持ちいい

  • core(常時):API / DB / Redis / Worker
  • admin(必要時):管理UI系(pgAdmin / RedisInsight)
  • debug(必要時):デバッグ用のツールコンテナ(shell、HTTPクライアントなど)
  • perf/obs(必要時):監視・トレース系(必要になってからでOK)📈

8) ミニ演習(手が覚えるやつ)✍️🔥

演習1:admin profile を作る🎛️

  1. pgadmin サービスを追加して profiles: ["admin"] を付ける
  2. ふつうに docker compose up -d
  3. docker compose pspgadminがいないことを確認👀✅
  4. docker compose --profile admin up -dpgadminが出ることを確認👀✅

演習2:サービス名指定の挙動を確認🎯

  1. docker compose down
  2. docker compose up -d pgadmin
  3. pgadminとdbだけが起動するか観察(depends_on込み)👀
  4. redisinsight が起動しないことがあるのも観察(だから丸ごとは --profile がラク)😺(Docker Documentation)

演習3:profilesを複数にしてみる🎚️🎚️

  • admindebug の2つを作って、両方起動してみよう!
docker compose --profile admin --profile debug up -d

複数指定できるのも公式どおりだよ〜!(matsuand.github.io)


9) すぐ使えるチートシート🧾✨

  • 普段:

    docker compose up -d
  • 管理UIも起動:

    docker compose --profile admin up -d
  • 状態確認:

    docker compose ps
  • ログ:

    docker compose logs -f
  • 停止(データは残る):

    docker compose down
  • 停止+ボリューム削除(DBデータ消える!)⚠️

    docker compose down -v

10) AIで爆速にするコツ(でも最後は人間がチェック)🤖🧠

GitHub Copilot や OpenAI 系のAIに、こんな感じで投げると強いよ💪✨

  • 「pgAdminとRedisInsightを admin profile に入れた compose.yaml の例を出して」
  • 「普段はcoreだけ起動、必要なときだけadminを有効化、コマンド例も付けて」
  • 「depends_on と profiles のハマりどころも注意書きして」

ただし、AIはたまにポート衝突パスワード直書きを雑に出すから、そこだけは人間が最後に整えると安全😺🛡️


次の章(ホットリロードをCompose運用に組み込む🔥♻️)に行くと、 「普段は core + ホットリロード、必要なときだけ admin」みたいに、さらに開発が快適になるよ〜!🚀✨

(なお、profiles の基本挙動はCompose公式の how-to と file reference に沿ってるよ)(Docker Documentation)