【初心者向け】DockerとGithubを用いて開発を行っていく手順(初期設定後)

DockerとGitHubを用いた開発フローをそれぞれのコマンドの役割を説明しながら解説します。

---

## **1. 開発開始時の準備**

### **a. 最新のコードを取得**
```bash
git pull origin main
```
**役割**:  
リモートリポジトリにある最新のコードをローカル環境に取得します。これにより、チーム全員が同じコードベースで開発を開始できます。

---

### **b. Docker コンテナを起動**
#### **コンテナのビルド（初回や依存関係が変わった場合）**
```bash
docker-compose up --build -d
```
**役割**:  
`Dockerfile` に記載された環境構築手順を基に、新しいコンテナイメージを作成し、アプリケーションをバックグラウンドで起動します。(-dのdはdetachedのdらしい。「分離した」という意味。)

#### **通常の起動**
```bash
docker-compose up -d
```
**役割**:  
既存のコンテナイメージを使ってアプリケーションをバックグラウンドで起動します。再ビルドは行わないため、すぐに作業を開始できます。

---

### **c. コンテナの状態確認**
```bash
docker-compose ps
```
**役割**:  
現在起動中のコンテナの状態を確認します。コンテナが正常に動作しているか、ポート番号が正しくマッピングされているかを確認できます。
### **c. コンテナの状態確認**
```bash
docker-compose ps
```

**役割**:  
現在起動中のコンテナの状態を確認し、動作状況やポート設定を把握します。


### **出力例**
```bash
Name                                            Command               State           Ports
---------------------------------------------------------------------------------------------------
container_name   python app.py         Up              0.0.0.0:8000->8000/tcp
```

### **解説**
1. **`Name`** ：コンテナの名前。
2. **`Command`**  ：コンテナ内で実行されているコマンド。ここでは`python app.py`。 
3. **`State`** ：コンテナの状態。`Up` は正常に動作中であることを示します。
4. **`Ports`**  ：
   - ポート設定。`0.0.0.0:8000->8000/tcp` は、ホスト側のポート `8000` がコンテナ内部のポート `8000` にマッピングされていることを示します。
   - この設定により、ブラウザで `http://localhost:8000` にアクセスするとコンテナ内のアプリケーションに接続できます。

### **確認ポイント**
- **`State` が `Up`** → コンテナは正常動作中。  
- **`Ports` のマッピング** → ポート設定が期待通りになっているか確認。

---

### **d. ブラウザで確認**
```
http://localhost:8000
```
**役割**:  
アプリケーションが正しく起動しているかをブラウザでテストします。`8000` 番ポートでアプリケーションが動作していることを確認します。

---

## **2. 開発中の流れ**

### **a. コードを変更する**
ローカルのプロジェクトディレクトリでコードを編集します（例: `app.py`, `templates/index.html`）。

**役割**:  
アプリケーションの機能を拡張したり修正したりするために、コードを変更します。

---

### **b. リアルタイムログを確認**
```bash
docker-compose logs -f
```
**役割**:  
アプリケーションの動作ログをリアルタイムで確認します。エラーの原因や挙動をデバッグするために使用します。

---

### **c. コンテナの再ビルドが必要な場合**
```bash
docker-compose down
docker-compose up --build -d
```
**役割**:  
コンテナを完全に停止した後、新しい依存関係やコード変更を反映するために、コンテナイメージを再構築します。

---

## **3. 開発終了時**

### **a. ローカル変更のコミット**
```bash
git add .
git commit -m "Initial commit"
git push origin main
```
**役割**:  
ローカルで行った変更をリモートリポジトリに反映します。これにより、チーム全員が同じ最新のコードを共有できます。

---

### **b. コンテナを停止**
```bash
docker-compose down
```
**役割**:  
起動中のコンテナを停止し、開発環境のリソースを解放します。

---

## **4. チーム開発の注意点**

### **a. 他のメンバーが変更をプッシュした場合**
#### **作業を保存**
```bash
git add .
git stash
```
**役割**:  
現在の作業内容を一時的に退避させ、他のメンバーがリモートリポジトリにプッシュした変更を取り込む準備をします。

#### **最新コードを取得**
```bash
git pull origin main
```
**役割**:  
リモートリポジトリから最新のコードを取得します。

#### **退避した作業を再適用**
```bash
git stash pop
```
**役割**:  
一時的に退避していた作業内容を再適用し、開発を再開します。

---

### **b. 必要に応じてコンテナを再起動**
```bash
docker-compose down
docker-compose up -d
```
**役割**:  
リポジトリの変更が反映されるよう、コンテナを再起動します。

---

## **5. まとめ(コマンド一覧)**
### 1. リポジトリから最新コードを取得：
```bash
git pull origin main
```

### 2. コンテナを起動：
```bash
docker-compose up -d
```

### 3. コードを編集して動作確認：
```bash
docker-compose logs -f
```

### 4. コードをプッシュ：
```bash
git add .
git commit -m "Describe changes"
git push origin main
```

### 5. コンテナを停止：
```bash
docker-compose down
```