Skip to main content

第01章:データって何?まず「守る/捨てる」を仕分けよう🧹🗂️

この章のゴールはシンプルです👇 「このプロジェクトのデータは、どれが消えたら困る?どれが消しても復活できる?」を言語化して、迷いを消します✨ (この仕分けができると、次章以降の volume / bind / tmpfs が一気にラクになります👍)


まず結論:データは2種類しかない🧠✨

  1. 守るべきデータ(State)
  • 消えたら困る / すぐ復元できない / 事業・動作に影響が大きい
  • 例:DBの中身、ユーザーがアップした画像、決済・注文の記録、手で作った設定ファイル など
  1. 捨てていいデータ(Derived / Disposable)
  • 消しても作り直せる(再生成できる)
  • 例:ビルド成果物、キャッシュ、インストールし直せる依存物、再取得できるログ など

そして超重要ポイント👇 コンテナは「作って壊す」前提の道具なので、コンテナの中にしか無いデータは、基本いつか消えます。永続化したいなら “外に逃がす” 仕組みが必要です(volume など)📦 Docker公式でも、volume はコンテナのライフサイクルを超えてデータを保持する仕組みとして説明されています。(Docker Documentation)


この章で作る成果物:データ分類メモ📝✅

「設定・ソース・DB・キャッシュ・ログ」をぜんぶ棚卸しして、各データにラベルを貼ります🏷️

  • 守る(永続化・バックアップ対象)
  • 🧨 捨てる(消してOK・再生成)
  • ⚠️ 要注意(守るけど“扱い注意”):秘密情報、個人情報、巨大ログ…など

5カテゴリで仕分けする(まずはこれだけ!)🗂️✨

ここからは、あなたのPJに当てはめていきます💪😄 (TypeScriptのWeb/API開発を想定した“ありがち例”つき)

1) 設定(Config)⚙️

  • 例:compose.yaml / Dockerfile / tsconfig.json / .env(※値は秘密!)/ アプリ設定ファイル

  • 判断:

    • 守る:設定ファイルそのもの(Git管理できるなら最高🎉)
    • ⚠️ 要注意.env の中身(秘密はバックアップやAI貼り付けで事故りやすい🔒💥)

2) ソース(Source)🧑‍💻

  • 例:src/ / prisma/ / migrations/ / README.md

  • 判断:

    • 守る:基本ぜんぶ(Gitが正義👑)
    • 🧨 捨てるdist/(ビルドで再生成できるなら)など

3) DB(Database)🐘🗄️

  • 例:Postgres/MySQLのデータ、SQLiteファイル、アップロードファイルのメタデータ

  • 判断:

    • 守る:基本ぜんぶ(ここ消えると泣きます😭)
    • 補足:Dockerでは「永続化したいなら volume を使う」がド定番です📦(Docker Documentation)

4) キャッシュ(Cache)⚡

  • 例:Redis、ビルドキャッシュ、一時ファイル

  • 判断:

    • 🧨 捨てる:基本これ(消しても困らないのがキャッシュの存在意義😎)
    • ⚠️ 例外:キャッシュなのに“再生成が高コスト”なら、扱いを検討(でも最初は捨ててOK寄り👍)

5) ログ(Logs)🪵

  • 例:アプリログ、アクセスログ、エラーログ

  • 判断:

    • 開発中:🧨 捨てるでもOK(必要なら閲覧できれば十分)
    • 本番:✅ 守ることが多い(障害調査の命綱🧯)
  • ただしログは肥大化しがちなので「保存期間」を決めるのが大事📅(これは後半章でやります👍)


仕分けの“判断基準”3つだけ覚える🧠✅

データに迷ったら、この順で考えます👇

  1. 再生成できる?(コマンド一発 / 手順がある)🔁 → YESなら捨ててOK寄り🧨

  2. 再生成にかかるコストは?(時間・お金・信用)💸 → 高いなら守る寄り✅

  3. 秘密や個人情報が混ざる? 🔒 → 混ざるなら要注意⚠️(バックアップやAI投入は“脱色”してから!)


ミニ実験:「コンテナの中だけのデータ」は消える🫠(超短い体験)

“なぜ仕分けが必要か”を体で理解します💪 (コマンドはコピペでOK!)

docker run --rm -it alpine sh

コンテナの中でファイル作る👇

echo "hello" > /tmp/only-in-container.txt
ls -l /tmp
exit

これでコンテナは終了&削除(--rm)されるので、次もう一回起動してもそのファイルはありません😇 「守るべきデータをコンテナに閉じ込めない」が超大事、という感覚を掴めればOKです👍 永続化は次章で volume を触ります(volume はコンテナを消してもデータが残る仕組み)。(Docker Documentation)


実作業:あなたのPJを棚卸しする手順🧹📝

Step 1) “データ一覧”を出す(5分)⏱️

VS Codeでプロジェクトを開いて、ルート直下から眺めます👀✨ 次の「ありがち項目」を見つけたらメモへ追加👇

  • compose.yaml / Dockerfile
  • src/ tests/
  • .env(値は書かない!ファイル名だけ📛)
  • db/ data/ storage/ uploads/
  • logs/
  • tmp/
  • node_modules/(※たいてい捨ててOK)

Step 2) “守る/捨てる/要注意”を付ける(10分)🏷️

まずは雑でOKです🙆‍♂️(あとで直せるので!)

Step 3) “理由”を1行で書く(最重要)✍️🔥

例:

  • ✅ DB:ユーザーの状態が入ってて再生成できない
  • 🧨 キャッシュ:消しても再計算で復活
  • ⚠️ .env秘密が入るので扱い注意

データ分類メモのテンプレ(これをコピペでOK)📌

VS Codeで docs/data-classification.md を作って、これを貼って埋めてください👇

## データ分類メモ

## 1) 設定(Config)⚙️
- [ ] 対象:
- 例: compose.yaml / Dockerfile / tsconfig.json / .env(値は書かない)
- 守る/捨てる/要注意:
- 理由(1行):
- 再現方法(あれば):

## 2) ソース(Source)🧑‍💻
- [ ] 対象:
- 守る/捨てる/要注意:
- 理由(1行):
- 再現方法:

## 3) DB(Database)🐘
- [ ] 対象:
- 例: postgres のデータ / sqlite ファイル / uploads の実体
- 守る/捨てる/要注意:
- 理由(1行):
- バックアップ方針(今は仮でOK):

## 4) キャッシュ(Cache)⚡
- [ ] 対象:
- 守る/捨てる/要注意:
- 理由(1行):
- 消し方(今は空でOK):

## 5) ログ(Logs)🪵
- [ ] 対象:
- 守る/捨てる/要注意:
- 理由(1行):
- 保存期間(仮でOK):

AI活用(安全に!)🤖🛡️:仕分けの“根拠”を補強する

AIは「判断の理由づけ」めっちゃ得意です✨ ただし、秘密の値個人情報は貼らないでくださいね🔒🙏

使えるプロンプト例(コピペOK)📋

以下はプロジェクトのデータ候補一覧です。
各項目を「守る / 捨てる / 要注意」に分類し、理由を1行で付けてください。
また、判断が割れそうな項目は「迷う理由」と「決め方」も書いてください。

【データ候補】
- compose.yaml
- Dockerfile
- src/
- migrations/
- .env(値は共有しない)
- postgres のデータ(volume想定)
- uploads/(ユーザー画像など)
- logs/
- node_modules/
- dist/
- tmp/

AI回答をチェックするコツ✅

  • 「捨てる」に分類されたものが、本当に再生成できる?(手順ある?)
  • 「守る」に分類されたものが、バックアップ対象として妥当?(巨大すぎない?秘密混ざらない?)
  • .env や鍵系が出たら、要注意に寄せるのが安全🔒

仕上げチェック(この章の合格ライン)🎉✅

次の3つが言えたらOKです👇

  • ✅ このPJで「守るべきデータ」は何か(最低3つ)
  • ✅ それぞれ「なぜ守るのか」を1行で言える
  • ✅ 「捨てていいデータ」を怖がらず消せる理由が説明できる

ちょい豆知識(この先の章への伏線)📦💡

  • volume:Dockerが管理する永続領域。コンテナを消しても残る📦(Docker Documentation)
  • bind mount:ホストのフォルダをそのままコンテナへ共有(開発でソースを載せるのに便利)📁(Docker Documentation)
  • tmpfs:メモリ上に置く一時領域で、停止すると消える(“絶対ディスクに残したくない一時データ”に向く)💨(Docker Documentation)
  • WindowsでDocker Desktop+WSL2の場合、LinuxコンテナはWSL2側で動くのが基本、という前提も押さえると後が楽です🐧🪟(Docker Documentation)

次(第2章)では、この第1章で「守る」と決めたデータを、bind / volume / tmpfs のどれに置くかを直感で選べるようにしていきます👪✨