Skip to main content

第28章:Compose操作もワンコマンドにまとめる🧱➡️🖱️

この章は「長い docker compose ... を暗記しない」で勝ちます😎✨ やることはシンプル👇

  • よく使うCompose操作(up/down/logs/exec/watch)を “短いコマンド入口” に集約
  • ✅ 迷わず回る「開発ループ」を作る(起動→ログ→中に入る→更新→終了)🔁🔥
  • ✅ 事故りやすい操作(特に down -v)に“安全ガード”を付ける🧯💥

1) まず「よくやる5操作」だけを固定する🧠✨

あなたが毎日やるのって、だいたいこの5つです👇

  1. 起動する ▶️(up
  2. 止める ⏹️(down
  3. ログを見る 👀(logs -f
  4. コンテナに入る 🐚(exec
  5. 保存したら反映(watch)⚡(up --watch / watch

docker compose upログを全部まとめて表示して、コマンドが終わると コンテナも止まる--detach なら裏で動き続ける)という性質があります。(Docker Documentation) → つまり「普段は detach で起動して、ログは別コマンドで見る」のがわかりやすいです😊


2) “短い入口” は npm scripts がいちばんラク🧰✨

Windowsでもそのまま通りやすいし、チームでも「同じコマンド名」を共有できます👍 ここでは compose:* で揃えます(好みで dc:* でもOK)🎮

✅ 例:package.json にこれを追加(最小セット)

{
"scripts": {
"compose:up": "docker compose up --build -d",
"compose:down": "docker compose down",
"compose:logs": "docker compose logs -f --tail=200",
"compose:ps": "docker compose ps",
"compose:sh": "docker compose exec app sh",
"compose:watch": "docker compose up --watch",
"compose:watch:only": "docker compose watch --no-up",
"compose:reset": "docker compose down -v --remove-orphans"
}
}

使い方(覚えるのはこれだけ)😆✨

  • 起動:npm run compose:up ▶️
  • ログ:npm run compose:logs 👀
  • 中に入る:npm run compose:sh 🐚
  • 終了:npm run compose:down ⏹️
  • watch:npm run compose:watch

docker compose downupで作ったコンテナ/ネットワーク等を止めて消すコマンドです。(Docker Documentation) ただし ボリュームは基本残るので、DBデータは守られやすいです🛡️(ただし例外あり)


3) watch を「運用に統合」する(ここが第28章のキモ)🔥

3-1) watch は2つの起動スタイルがある👀

  • A: docker compose up --watch → アプリログも、watchのログも混ざる(でも1コマンドで済む)(Docker Documentation)
  • B: docker compose watch → “watch専用表示”にできて見やすい(--no-up で「起動済み前提」にもできる)(Docker Documentation)

上の scripts では両方用意しました✌️

  • compose:watch → 1発で全部
  • compose:watch:only → すでに起動してる前提で監視だけ

3-2) compose.yaml 側に watch ルールを書く📝✨

Compose Watchは Compose 2.22.0以降が前提で、develop: watch: にルールを書きます。(Docker Documentation) 例(サービス名 app の例)👇

services:
app:
build: .
command: npm run dev
develop:
watch:
- action: sync
path: ./src
target: /app/src
ignore:
- node_modules/
- action: rebuild
path: package.json

ポイント💡

  • sync:ファイルをコンテナに同期(ホットリロード系に相性◎)(Docker Documentation)
  • rebuild:依存関係が変わる(例:package.json)ときに再ビルドする流れが自然👌(Docker Documentation)
  • node_modules/ は同期しないのが安全&速い(ネイティブ依存が混じることがある)(Docker Documentation)
  • パスは基本プロジェクト相対、.dockerignore が効く、globは非対応などルールがあるよ📌(Docker Documentation)

4) “事故る操作” に名前でブレーキをかける🧯💥

compose:downcompose:reset は別物にする(超重要)⚠️

  • docker compose down:基本は コンテナ/ネットワーク等を消す(データは残りやすい)(Docker Documentation)
  • docker compose down -vnamed volume も消す → DBデータが消えることがある💀(Docker Documentation)

だから scripts では👇

  • compose:down:日常用
  • compose:reset「全部消してやり直す」用(名前からして怖い)😇

5) 「中に入る」「1回だけ実行」もワンコマンド化する🐚🧪

5-1) コンテナに入る:exec

docker compose execサービスのコンテナ内でコマンド実行できて、TTYもデフォルトで割り当てられます。(Docker Documentation) → だから compose:sh を作ると便利😊

5-2) 1回だけコマンド:run

マイグレーションとか「1回だけ」やりたい時に便利✨ ただし docker compose runサービス定義のポートを作らない(衝突回避のため)ので、必要なら --service-ports を使います。(docs.docker.jp)

例👇

npm run compose:run:migrate

…みたいに、必要に応じて scripts を追加していく感じです🧩


6) よくある詰まりポイント集(先に潰す)🪓😅

詰まり1:watchが効かない😵

Compose Watchは ローカルのソースから build するサービス向けで、image: だけのサービスの変更追跡は基本しません。(Docker Documentation) → 監視したいのはだいたいアプリ側なので、そこだけ watch を入れるのが正解🙆

詰まり2:ログがカオス🤯

  • up はログもまとめて出す(便利だけど混ざる)(Docker Documentation)
  • 混ざるのがイヤなら docker compose watch を使う(専用ログで見やすい)(Docker Documentation)

詰まり3:Docker Desktopが重い/ディスクが…🥲

WSL2エンジン利用時の保存先や、WSL側の設定で体感が変わることがあります(Docker DesktopのWSL2案内に詳細あり)。(Docker Documentation)


7) ミニ課題(15〜30分)🧩🕒

課題A:コマンド入口を完成させる🎯

  • compose:up / down / logs / sh / ps を追加
  • npm run compose:upnpm run compose:logs の流れで動作確認👀

課題B:watch を統合する⚡

  • compose.yamldevelop: watch: を追加
  • npm run compose:watch で保存→反映を体感✨(Docker Documentation)

課題C:安全なリセット導線を作る🧯

  • compose:reset を作る(中身は down -v --remove-orphans
  • READMEに「これはデータ消える可能性あり⚠️」を1行だけ書く(未来の自分を救う)🙏

8) AIで時短するなら(でも最後は人間の目でチェック👀)🤖✨

Copilot / Codex に投げると速いプロンプト例💬

  • 「package.json の scripts に、docker compose の up/down/logs/exec/watch/reset を追加して。サービス名は app。Windowsでも通る書き方で」
  • 「compose.yaml に develop.watch を追加して。src は sync、package.json は rebuild、node_modules は ignore」

AIが出したものは👇だけ必ず目視チェック✅

  • down -v が日常コマンドに混ざってないか💀
  • サービス名(app など)が合ってるか🔍
  • watchpath/target がズレてないか📁

次の章(第29章)で、この“短い入口”に コミット前フック(軽めの自動チェック) をつなげると、さらに「うっかり事故」が減って気持ちよくなります🪝✨