第13章:開発中のデータ破壊を怖がらない:リセット手順を標準装備💣➡️🧯
この章はズバリ、「開発でDBやデータがぐちゃった時に、迷わず安全に“最初からやり直せる”状態を作る」回です😎✨ “怖くないリセット”ができると、migration や seed を気軽に試せて、開発スピードが爆上がりします🚀
この章のゴール🎯
- ✅
docker compose downとdocker compose down -vの違いが説明できる - ✅ “消える範囲”を理解した上で、安心して初期化し直せる
- ✅ ワンコマンドで「初期化からやり直す」(標準装備)できる🎛️✨
- ✅ “誤爆”を避けるための 確認手順を持てる🧯
まず結論:リセットは「3段階」で考えると怖くない😌🧱
開発のリセットは、いきなり最終兵器を撃たないのがコツです💡 よく使うのはこの3つ👇
- **ソフトリセット(コンテナだけ作り直す)**🧼
- **DBだけリセット(DBのvolumeだけ消す)**🐘💥
- **フルリセット(composeで作ったvolume全部消す)**💣
そして “フルリセット” の代表が docker compose down -v です。
この -v が付くと、Composeファイルの volumes: で宣言した名前付きボリューム + コンテナに付いてる匿名ボリュームを削除します。(Docker Documentation)
docker compose down と down -v を正しく怖がる😱➡️😎
docker compose down(ふつうのdown)🧹
- コンテナ停止&削除、ネットワーク削除(など)
- ボリュームは基本消えない(=DBデータは残りがち)
- 匿名ボリュームはデフォでは消えない(ただし次の
upで自動再マウントされないことが多い)(Docker Documentation)
docker compose down -v(データも消すdown)💥
- 上に加えて、ボリュームも削除
- 特に重要:Composeファイルに書いた named volume も消える(Docker Documentation)
さらに安心オプション:--remove-orphans🧹🧟
Composeファイルから消したサービスのコンテナが残ってると、地味に事故ります。
--remove-orphans は「Composeファイルに定義されてないサービスのコンテナ」を掃除します。(Docker Documentation)
誤爆しないための「確認3ステップ」🧯✅✅✅
✅STEP0:今どの“プロジェクト名”で動いてるか把握する🪪
Composeはプロジェクト名でリソース名が変わります。デフォルトは ディレクトリ名です。(Docker Documentation) まず一覧を見る👇
docker compose ls
(docker compose ls はプロジェクト一覧を表示できます)(Docker Documentation)
✅STEP1:プロジェクト名を“固定”して、事故の確率を下げる🔒
おすすめは compose.yml のトップレベル name: で固定することです👍
(フォルダ名変更で別プロジェクト扱い→別volume作成…みたいな混乱が減ります)
name: myapp
services:
# ...
volumes:
# ...
この name は Compose のプロジェクト名として扱われます。(Docker Documentation)
✅STEP2:消していいvolumeだけ“見える化”する🔎📦
Composeが作ったリソースには com.docker.compose.project などのラベルが付きます。(docs.docker.jp)
Dockerは volume 一覧を --filter label=... で絞れます。(Docker Documentation)
たとえばプロジェクト名が myapp の場合👇
docker volume ls --filter label=com.docker.compose.project=myapp
これで「消す対象」を目で見てから動けます👀✨
ここから実践:3種類のリセット手順🛠️🔥
以降のコマンドは、**基本はプロジェクト直下(compose.ymlのある場所)**で実行します👍 (VS Code のターミナルでOK!)
1) ソフトリセット:データは残して、コンテナだけ作り直す🧼
「アプリの設定ミスった」「コンテナが変」くらいならこれで十分なこと多いです😊
docker compose down
docker compose up -d --build
- DBのvolumeは残るので、DBの中身は基本そのままです📦
2) DBだけリセット:DBのvolumeだけ消す🐘💥(おすすめ頻出)
「migration失敗でDBが崩壊」「seedやり直したい」みたいな時はこれが最強です💪
やり方A:volume名が分かってるなら、ピンポイント削除🎯
- まず volume を見つける(ラベル絞り)🔎
docker volume ls --filter label=com.docker.compose.project=myapp
- DBっぽい名前(例:
myapp_db-data)だけ削除💥
docker compose down
docker volume rm myapp_db-data
docker compose up -d --build
やり方B:より簡単にしたいなら「DBだけ別プロジェクト」にしない(=構成で対応)
この章の範囲では、まずAが現実的です👍
3) フルリセット:down -v で “最初から” に戻す💣➡️🧯
「もう全部やり直したい!」「チュートリアル的に初期状態に戻す!」ならこれです🤣
docker compose down -v --remove-orphans
docker compose up -d --build
-vは Composeファイルで宣言した named volume も削除します(Docker Documentation)--remove-orphansで残骸コンテナも掃除できます(Docker Documentation)
“絶対に消したくない”データがある場合の防波堤🧱🔒
Composeの external で定義された ネットワーク/ボリュームは down でも削除されません。(Docker Documentation)
つまり「守りたいデータ」は external に逃がすと強いです🛡️
イメージ(概念)👇
volumes:
db-data:
external: true
name: myapp-db-data
※ただし運用が少し増える(事前に volume を作る等)ので、開発中は“消してOKなDB”にしておく方がラクなことも多いです😇
成果物:ワンコマンド化🎛️✨(これが本体)
「迷ったらこれを叩けば復旧する」を作っておくと、精神が安定します🧘♂️🌿
例:package.json に scripts を足す(Node勢あるある)👇
{
"scripts": {
"dev:up": "docker compose up -d --build",
"dev:down": "docker compose down",
"dev:reset": "docker compose down -v --remove-orphans && docker compose up -d --build"
}
}
npm run dev:reset= 初期化からやり直しボタン🎮💥- これを README にも書くと、未来の自分が助かります📝✨
ハンズオン(5分):わざと壊して、リセットで復活する🎭🧯
- DBに適当にデータを入れる(seed済みでもOK)🌱
- わざと構成を変えてDBが合わない状態を作る(migration失敗のつもり)🫠
npm run dev:resetを実行🎛️💥- 初期化が走って、復活してるのを確認🎉
ポイント:壊す練習を先にしておくと、本番の事故が怖くなくなります😎🧯
よくある事故と対策あるある😇🧨
😱「downしたのにDBが初期化されない!」
→ それは正常です!
docker compose down だけだと volumeが残るので、初期化は基本走りません(前章の“罠”の正体)🪤
→ down -v か 該当volumeだけ削除で解決💡(Docker Documentation)
😱「別のプロジェクトのデータ消したかも…」
→ これが一番怖い🥶 対策は3つセットで鉄壁です👇
name:でプロジェクト名固定🪪🔒(Docker Documentation)docker compose lsで対象確認👀(Docker Documentation)- volumeは
label=com.docker.compose.project=...で絞ってから消す🔎(docs.docker.jp)
AIの使いどころ🤖💡(安全運転)
AIにはこう聞くと強いです👇(秘密は貼らない前提🔒)
- 「この compose.yml だと
down -vで消えるものを箇条書きで説明して」 - 「この volume 一覧から、DBっぽいのだけ選んで理由つけて」
- 「誤爆防止のチェックリストを3行で作って」
“判断”は人間、整理はAI が最強ムーブです😎🤝🤖
まとめ🏁✨
downは基本データ残る、down -vは データも消す(named volumeも対象)💥(Docker Documentation)- 誤爆防止は「プロジェクト名固定」「ラベルで絞って確認」🧯
- 最終的に ワンコマンド reset を標準装備すると、開発が一気にラクになります🎛️🎉
次の章(第14章)は「バックアップの2系統:ダンプ型 vs ファイル丸ごと型🧠」なので、 この章で作った “リセット癖” が、そのまま “復元癖” に繋がって最強になりますよ〜🧯✨