関連テンプレ構成
テンプレート
# 構成管理
## 構成管理の目的
構成管理は、システム開発において以下を実現するための管理活動である:
- **一貫性の確保**: すべての環境で同じ構成を維持する
- **変更の追跡**: いつ、誰が、何を変更したかを記録する
- **再現性の保証**: 任意の時点の状態を再現可能にする
- **品質の維持**: 承認されていない変更を防止する
- **効率的な開発**: チーム全体で統一された環境を共有する
---
## 開発環境
### 推奨開発環境
| 項目 | 推奨ツール/バージョン | 備考 |
|------|---------------------|------|
| 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タグを作成する
アーティファクトをリポジトリにアップロードする
構成管理台帳を更新する