[テンプレ]構成管理

関連テンプレ構成
テンプレート
# 構成管理

## 構成管理の目的

構成管理は、システム開発において以下を実現するための管理活動である:

- **一貫性の確保**: すべての環境で同じ構成を維持する
- **変更の追跡**: いつ、誰が、何を変更したかを記録する
- **再現性の保証**: 任意の時点の状態を再現可能にする
- **品質の維持**: 承認されていない変更を防止する
- **効率的な開発**: チーム全体で統一された環境を共有する

---

## 開発環境

### 推奨開発環境

| 項目 | 推奨ツール/バージョン | 備考 |
|------|---------------------|------|
| OS | Windows 11 / macOS 13+ / Ubuntu 22.04 LTS | - |
| IDE | Visual Studio Code / IntelliJ IDEA | プロジェクトに応じて選択 |
| ランタイム | Node.js 18 LTS / Java 17 | LTSバージョンを使用 |
| パッケージマネージャー | npm 9+ / Maven 3.8+ | - |
| コンテナ | Docker Desktop 4.x | ローカル開発環境の統一 |

### 環境セットアップ

```mermaid
graph LR
    A[リポジトリClone] --> B[依存関係インストール]
    B --> C[環境変数設定]
    C --> D[データベース初期化]
    D --> E[開発サーバー起動]
```

---

## バージョン管理

### バージョン管理システム

- **使用ツール**: Git
- **リポジトリホスティング**: GitHub / GitLab
- **ブランチ戦略**: Git Flow / GitHub Flow(プロジェクトに応じて選択)

### バージョニング

セマンティックバージョニング(Semantic Versioning 2.0.0)を採用する。

**形式**: `MAJOR.MINOR.PATCH`

- **MAJOR**: 互換性のない API 変更
- **MINOR**: 後方互換性のある機能追加
- **PATCH**: 後方互換性のあるバグ修正

****:
- `1.0.0` - 初回リリース
- `1.1.0` - 新機能追加
- `1.1.1` - バグ修正
- `2.0.0` - 破壊的変更を含むメジャーアップデート

### タグ管理

リリース時には必ずGitタグを付与する。

```bash
# タグの作成
git tag -a v1.2.0 -m "Release version 1.2.0"

# タグのプッシュ
git push origin v1.2.0
```

**タグ命名規則**:
- リリースタグ: `v{MAJOR}.{MINOR}.{PATCH}` (: `v1.2.0`)
- リリース候補: `v{MAJOR}.{MINOR}.{PATCH}-rc{N}` (: `v1.2.0-rc1`)

### 管理台帳

すべてのリリースバージョンと関連する構成情報を記録する。

| バージョン | リリース日 | 環境 | ブランチ | コミットハッシュ | 備考 |
|-----------|-----------|------|---------|----------------|------|
| v1.0.0 | 2025-01-15 | 本番 | main | a1b2c3d | 初回リリース |
| v1.1.0 | 2025-02-20 | 本番 | main | e4f5g6h | 新機能追加 |
| v1.1.1 | 2025-02-25 | 本番 | main | i7j8k9l | 緊急バグ修正 |

---

## アーティファクト管理

### アーティファクトの種類

```mermaid
graph TD
    A[アーティファクト] --> B[ソースコード]
    A --> C[ビルド成果物]
    A --> D[ドキュメント]
    
    B --> B1[アプリケーションコード]
    B --> B2[設定ファイル]
    
    C --> C1[実行ファイル]
    C --> C2[コンテナイメージ]
    
    D --> D1[設計書]
    D --> D2[API仕様書]
```

### アーティファクトリポジトリ

| 種類 | リポジトリ | 命名規則 | 保持期間 |
|------|-----------|---------|---------|
| Dockerイメージ | Docker Hub / ECR | `{project}/{service}:{version}` | 直近10バージョン |
| Jarファイル | Nexus / Artifactory | `{groupId}/{artifactId}/{version}` | すべて保持 |
| npmパッケージ | npm Registry | `@{scope}/{package}@{version}` | すべて保持 |

****:
- Dockerイメージ: `myproject/api-server:1.2.0`
- Jarファイル: `com.example/myapp/1.2.0/myapp-1.2.0.jar`

---

## 環境変数管理

環境ごとに異なる設定値を管理する。

```mermaid
graph LR
    A[環境変数] --> B[ローカル]
    A --> C[開発]
    A --> D[ステージング]
    A --> E[本番]
    
    B --> B1[.env.local]
    C --> C1[Parameter Store]
    D --> D1[Secrets Manager]
    E --> E1[Secrets Manager]
```

### 環境変数の分類

| 分類 || 管理方法 |
|------|----|---------| 
| 公開情報 | `APP_NAME`, `LOG_LEVEL` | ソースコードまたは設定ファイル |
| 環境依存 | `API_ENDPOINT`, `DB_HOST` | 環境変数 |
| 秘密情報 | `DB_PASSWORD`, `API_KEY` | 秘密情報管理システム |

---

## 依存関係管理方針

### ビルド・バンドル

**ロックファイルの管理**:
- `package-lock.json` (Node.js)
- `pom.xml` + `maven.lock` (Java/Maven)
- `requirements.txt` + `Pipfile.lock` (Python)

すべてのロックファイルはバージョン管理に含める。

### ライブラリ

#### 選定・削除基準(禁止事項)

**禁止事項**:
-メンテナンスされていないライブラリ(最終更新が2年以上前)
- ❌ 既知の脆弱性があるライブラリ
- ❌ ライセンスが不明確なライブラリ
- ❌ 同じ機能の重複ライブラリ

**選定基準**:
- ✅ アクティブにメンテナンスされている
- ✅ 十分なダウンロード数・スター数がある
- ✅ ドキュメントが整備されている
- ✅ ライセンスがプロジェクトと互換性がある

#### バージョン指定方針

**推奨**: マイナーバージョンまで固定、パッチバージョンは自動更新

```json
// package.json の例
{
  "dependencies": {
    "express": "~4.18.0",  // 4.18.x の最新を許可
    "lodash": "4.17.21"     // 完全固定
  }
}
```

#### 更新・脆弱性管理

**定期更新**:
- 月次で依存関係の更新をチェックする
- セキュリティアップデートは即座に適用する

**脆弱性スキャン**:
```bash
# Node.js
npm audit

# Java (Maven)
mvn dependency-check:check

# Python
pip-audit
```

**自動化**:
- Dependabot / Renovate Bot によるPR自動作成
- CI/CDパイプラインでの脆弱性チェック

---

## 構成管理のワークフロー

```mermaid
graph TB
    A[開発者] --> B{変更の種類}
    B -->|コード変更| C[ブランチ作成]
    B -->|ライブラリ追加| D[依存関係更新]
    B -->|環境変数追加| E[設定ファイル更新]
    
    C --> F[コミット]
    D --> F
    E --> F
    
    F --> G[プルリクエスト]
    G --> H{レビュー}
    H -->|承認| I[マージ]
    H -->|却下| J[修正]
    J --> F
    
    I --> K[CI/CD実行]
    K --> L[アーティファクト作成]
    L --> M[リリース]
```

---

## 構成管理のチェックリスト

### 開発開始時
- [ ] リポジトリをクローンし、最新のコードを取得する
- [ ] 依存関係をインストールする(`npm install` / `mvn install`)
- [ ] 環境変数を設定する(`.env.local`を作成)
- [ ] ローカル環境で正常に起動することを確認する

### 変更時
- [ ] 適切なブランチで作業している
- [ ] 依存関係の変更がある場合、ロックファイルも更新する
- [ ] 環境変数の変更がある場合、`.env.example`も更新する
- [ ] コミットメッセージが規約に従っている

### リリース時
- [ ] バージョン番号を更新する
- [ ] CHANGELOGを更新する
- [ ] Gitタグを作成する
- [ ] アーティファクトをリポジトリにアップロードする
- [ ] 構成管理台帳を更新する

---
プレビュー

構成管理

構成管理の目的

構成管理は、システム開発において以下を実現するための管理活動である:

  • 一貫性の確保: すべての環境で同じ構成を維持する
  • 変更の追跡: いつ、誰が、何を変更したかを記録する
  • 再現性の保証: 任意の時点の状態を再現可能にする
  • 品質の維持: 承認されていない変更を防止する
  • 効率的な開発: チーム全体で統一された環境を共有する

開発環境

推奨開発環境
項目 推奨ツール/バージョン 備考
OS Windows 11 / macOS 13+ / Ubuntu 22.04 LTS -
IDE Visual Studio Code / IntelliJ IDEA プロジェクトに応じて選択
ランタイム Node.js 18 LTS / Java 17 LTSバージョンを使用
パッケージマネージャー npm 9+ / Maven 3.8+ -
コンテナ Docker Desktop 4.x ローカル開発環境の統一
環境セットアップ
graph LR
    A[リポジトリClone] --> B[依存関係インストール]
    B --> C[環境変数設定]
    C --> D[データベース初期化]
    D --> E[開発サーバー起動]

バージョン管理

バージョン管理システム
  • 使用ツール: Git
  • リポジトリホスティング: GitHub / GitLab
  • ブランチ戦略: Git Flow / GitHub Flow(プロジェクトに応じて選択)
バージョニング

セマンティックバージョニング(Semantic Versioning 2.0.0)を採用する。

形式: MAJOR.MINOR.PATCH

  • MAJOR: 互換性のない API 変更
  • MINOR: 後方互換性のある機能追加
  • PATCH: 後方互換性のあるバグ修正

:

  • 1.0.0 - 初回リリース
  • 1.1.0 - 新機能追加
  • 1.1.1 - バグ修正
  • 2.0.0 - 破壊的変更を含むメジャーアップデート
タグ管理

リリース時には必ずGitタグを付与する。

# タグの作成
git tag -a v1.2.0 -m "Release version 1.2.0"

# タグのプッシュ
git push origin v1.2.0

タグ命名規則:

  • リリースタグ: v{MAJOR}.{MINOR}.{PATCH} (例: v1.2.0)
  • リリース候補: v{MAJOR}.{MINOR}.{PATCH}-rc{N} (例: v1.2.0-rc1)
管理台帳

すべてのリリースバージョンと関連する構成情報を記録する。

バージョン リリース日 環境 ブランチ コミットハッシュ 備考
v1.0.0 2025-01-15 本番 main a1b2c3d 初回リリース
v1.1.0 2025-02-20 本番 main e4f5g6h 新機能追加
v1.1.1 2025-02-25 本番 main i7j8k9l 緊急バグ修正

アーティファクト管理

アーティファクトの種類
graph TD
    A[アーティファクト] --> B[ソースコード]
    A --> C[ビルド成果物]
    A --> D[ドキュメント]

    B --> B1[アプリケーションコード]
    B --> B2[設定ファイル]

    C --> C1[実行ファイル]
    C --> C2[コンテナイメージ]

    D --> D1[設計書]
    D --> D2[API仕様書]
アーティファクトリポジトリ
種類 リポジトリ 命名規則 保持期間
Dockerイメージ Docker Hub / ECR {project}/{service}:{version} 直近10バージョン
Jarファイル Nexus / Artifactory {groupId}/{artifactId}/{version} すべて保持
npmパッケージ npm Registry @{scope}/{package}@{version} すべて保持

:

  • Dockerイメージ: myproject/api-server:1.2.0
  • Jarファイル: com.example/myapp/1.2.0/myapp-1.2.0.jar

環境変数管理

環境ごとに異なる設定値を管理する。

graph LR
    A[環境変数] --> B[ローカル]
    A --> C[開発]
    A --> D[ステージング]
    A --> E[本番]

    B --> B1[.env.local]
    C --> C1[Parameter Store]
    D --> D1[Secrets Manager]
    E --> E1[Secrets Manager]
環境変数の分類
分類 管理方法
公開情報 APP_NAME, LOG_LEVEL ソースコードまたは設定ファイル
環境依存 API_ENDPOINT, DB_HOST 環境変数
秘密情報 DB_PASSWORD, API_KEY 秘密情報管理システム

依存関係管理方針

ビルド・バンドル

ロックファイルの管理:

  • package-lock.json (Node.js)
  • pom.xml + maven.lock (Java/Maven)
  • requirements.txt + Pipfile.lock (Python)

すべてのロックファイルはバージョン管理に含める。

ライブラリ
選定・削除基準(禁止事項)

禁止事項:

  • ❌ メンテナンスされていないライブラリ(最終更新が2年以上前)
  • ❌ 既知の脆弱性があるライブラリ
  • ❌ ライセンスが不明確なライブラリ
  • ❌ 同じ機能の重複ライブラリ

選定基準:

  • ✅ アクティブにメンテナンスされている
  • ✅ 十分なダウンロード数・スター数がある
  • ✅ ドキュメントが整備されている
  • ✅ ライセンスがプロジェクトと互換性がある
バージョン指定方針

推奨: マイナーバージョンまで固定、パッチバージョンは自動更新

// package.json の例
{
  "dependencies": {
    "express": "~4.18.0",  // 4.18.x の最新を許可
    "lodash": "4.17.21"     // 完全固定
  }
}
更新・脆弱性管理

定期更新:

  • 月次で依存関係の更新をチェックする
  • セキュリティアップデートは即座に適用する

脆弱性スキャン:

# Node.js
npm audit

# Java (Maven)
mvn dependency-check:check

# Python
pip-audit

自動化:

  • Dependabot / Renovate Bot によるPR自動作成
  • CI/CDパイプラインでの脆弱性チェック

構成管理のワークフロー

graph TB
    A[開発者] --> B{変更の種類}
    B -->|コード変更| C[ブランチ作成]
    B -->|ライブラリ追加| D[依存関係更新]
    B -->|環境変数追加| E[設定ファイル更新]

    C --> F[コミット]
    D --> F
    E --> F

    F --> G[プルリクエスト]
    G --> H{レビュー}
    H -->|承認| I[マージ]
    H -->|却下| J[修正]
    J --> F

    I --> K[CI/CD実行]
    K --> L[アーティファクト作成]
    L --> M[リリース]

構成管理のチェックリスト

開発開始時
リポジトリをクローンし、最新のコードを取得する
依存関係をインストールする(npm install / mvn install)
環境変数を設定する(.env.localを作成)
ローカル環境で正常に起動することを確認する
変更時
適切なブランチで作業している
依存関係の変更がある場合、ロックファイルも更新する
環境変数の変更がある場合、.env.exampleも更新する
コミットメッセージが規約に従っている
リリース時
バージョン番号を更新する
CHANGELOGを更新する
Gitタグを作成する
アーティファクトをリポジトリにアップロードする
構成管理台帳を更新する