[テンプレ]バッチ処理個別仕様書

関連テンプレ構成
テンプレート
# BAT-001: 日次売上集計バッチ

## 概要
前日の売上データを集計し、日次売上サマリーテーブルと月次売上集計テーブルを更新する。部門別・商品別の売上金額、数量を算出する。

## 実行スケジュール
- **実行タイミング**: 毎日 2:00 AM
- **実行頻度**: 日次
- **想定処理時間**: 15- **タイムアウト設定**: 30分

## 起動パラメータ
| パラメータ名 | 必須 | データ型 | デフォルト値 | 説明 |
|-----------|------|---------|-----------|------|
| target_date | 任意 | 日付(YYYYMMDD) | 前日 | 集計対象日 |
| mode | 任意 | 文字列 | normal | normal: 通常実行、force: 再集計モード |

## 処理対象データ
- **対象テーブル**: 売上トランザクションテーブル (sales_transactions)
- **抽出条件**: 対象日の0:0023:59の取引データ
- **想定件数**:50,000/日

## 処理フロー
```mermaid
graph TD
    A[バッチ起動] --> B[パラメータ取得]
    B --> C{target_date指定?}
    C -->|なし| D[前日を対象日に設定]
    C -->|あり| E[指定日を対象日に設定]
    D --> F[対象日の売上データ抽出]
    E --> F
    F --> G{データ存在?}
    G -->|なし| H[警告ログ出力]
    H --> I[処理終了]
    G -->|あり| J[部門別集計処理]
    J --> K[商品別集計処理]
    K --> L[日次サマリー作成]
    L --> M{再集計モード?}
    M -->|Yes| N[既存データ削除]
    M -->|No| O[データ重複チェック]
    N --> P[集計データ登録]
    O --> Q{重複あり?}
    Q -->|Yes| R[エラーログ出力]
    R --> S[異常終了]
    Q -->|No| P
    P --> T[月次集計テーブル更新]
    T --> U[処理件数ログ出力]
    U --> V[正常終了]
```

## 集計ロジック
### 部門別集計
```
SELECT
    department_id,
    department_name,
    SUM(amount) as total_amount,
    SUM(quantity) as total_quantity,
    COUNT(DISTINCT customer_id) as customer_count,
    COUNT(*) as transaction_count
FROM
    sales_transactions
WHERE
    transaction_date = :target_date
    AND status = 'completed'
GROUP BY
    department_id,
    department_name
```

### 商品別集計
```
SELECT
    product_id,
    product_name,
    category_id,
    SUM(amount) as total_amount,
    SUM(quantity) as total_quantity,
    COUNT(*) as transaction_count
FROM
    sales_transactions
WHERE
    transaction_date = :target_date
    AND status = 'completed'
GROUP BY
    product_id,
    product_name,
    category_id
```

## 更新対象テーブル
| テーブル名 | 更新内容 | 更新方式 |
|----------|---------|---------|
| daily_sales_summary | 日次売上サマリー | INSERT |
| department_sales_daily | 部門別日次売上 | INSERT |
| product_sales_daily | 商品別日次売上 | INSERT |
| monthly_sales_summary | 月次集計 | UPDATE (累計加算) |

## エラー処理
| エラーケース | 対応 |
|-----------|------|
| 対象日のデータが0| 警告ログ出力、正常終了 |
| 集計データ重複 | エラーログ出力、異常終了 |
| DBエラー | リトライ(最大3)、失敗時は異常終了 |
| タイムアウト | エラー通知、異常終了 |

## 通知仕様
| 通知条件 | 通知先 | 通知内容 |
|---------|-------|---------|
| 正常終了 | - | 通知なし |
| データ0| 業務担当者 | 「対象日のデータが存在しません」 |
| 異常終了 | システム管理者 | エラー内容、スタックトレース |

---

# BAT-002: 会員ステータス更新バッチ

## 概要
会員の過去1年間の購入履歴を集計し、累計購入金額に応じて会員ステータス(ブロンズ/シルバー/ゴールド/プラチナ)を更新する。

## 実行スケジュール
- **実行タイミング**: 毎日 3:00 AM
- **実行頻度**: 日次
- **想定処理時間**: 30- **タイムアウト設定**: 1時間

## 起動パラメータ
| パラメータ名 | 必須 | データ型 | デフォルト値 | 説明 |
|-----------|------|---------|-----------|------|
| target_member_id | 任意 | 文字列 | - | 特定会員のみ更新する場合に指定 |
| batch_size | 任意 | 数値 | 1000 | 一度に処理する会員数 |

## 処理対象データ
- **対象テーブル**: 会員マスタ (members)、売上トランザクション (sales_transactions)
- **抽出条件**: アクティブ会員全件
- **想定件数**:100,000会員

## 会員ステータス判定ロジック
| ステータス | 条件(過去1年間の累計購入金額) |
|----------|---------------------------|
| プラチナ | 500,000円以上 |
| ゴールド | 300,000円以上 500,000円未満 |
| シルバー | 100,000円以上 300,000円未満 |
| ブロンズ | 100,000円未満 |

## 処理フロー
```mermaid
sequenceDiagram
    participant B as バッチ
    participant M as 会員マスタ
    participant S as 売上トランザクション
    participant L as ログ

    B->>M: アクティブ会員取得 (バッチサイズ単位)
    loop 会員ごと
        B->>S: 過去1年間の購入履歴取得
        S->>B: 累計購入金額返却
        B->>B: ステータス判定
        alt ステータス変更あり
            B->>M: 会員ステータス更新
            B->>L: 更新ログ出力
        else ステータス変更なし
            B->>B: スキップ
        end
    end
    B->>L: 処理完了ログ出力
```

## 更新対象テーブル
| テーブル名 | 更新カラム | 更新方式 |
|----------|----------|---------|
| members | member_status, status_updated_at | UPDATE |
| member_status_history | 履歴テーブルへINSERT | INSERT |

## エラー処理
| エラーケース | 対応 |
|-----------|------|
| 個別会員の更新エラー | エラーログ出力、当該会員スキップして処理継続 |
| DBエラー | リトライ(最大3)、失敗時は異常終了 |
| タイムアウト | 処理途中まで確定、次回実行時に継続 |

---

# BAT-003: データバックアップバッチ

## 概要
重要な業務データ(会員情報、売上データ、在庫データ)をバックアップファイルとして出力し、外部ストレージに保存する。

## 実行スケジュール
- **実行タイミング**: 毎日 4:00 AM
- **実行頻度**: 日次
- **想定処理時間**: 1時間
- **タイムアウト設定**: 2時間

## バックアップ対象テーブル
| テーブル名 | バックアップ形式 | 圧縮 | 保持期間 |
|----------|-------------|------|---------|
| members | SQL dump | Yes | 90|
| sales_transactions | SQL dump | Yes | 90|
| inventory | SQL dump | Yes | 30|
| orders | SQL dump | Yes | 90|

## 処理フロー
```mermaid
graph LR
    A[バッチ起動] --> B[バックアップ日付設定]
    B --> C[対象テーブルループ]
    C --> D[テーブルデータ抽出]
    D --> E[SQLダンプ生成]
    E --> F[ファイル圧縮 gzip]
    F --> G[ローカル保存]
    G --> H[外部ストレージ転送]
    H --> I{転送成功?}
    I -->|Yes| J[古いバックアップ削除]
    I -->|No| K[リトライ]
    K --> H
    J --> L[次のテーブル]
    L --> C
    C --> M[全テーブル完了]
    M --> N[バックアップ検証]
    N --> O[完了ログ出力]
```

## バックアップファイル命名規則
```
{table_name}_backup_{YYYYMMDD}_{HHMMSS}.sql.gz
例: members_backup_20251120_040000.sql.gz
```

## 保存先
- **ローカル**: /var/backup/database/
- **外部ストレージ**: S3バケット (s3://company-backup/database/)

---

## バッチ仕様記載のガイドライン

各バッチの個別仕様を記載する際は、以下のテンプレートを使用する:

### バッチ仕様テンプレート

```markdown
# BAT-XXX: [バッチ名]

## 概要
[バッチの目的と処理内容を簡潔に記述]

## 実行スケジュール
- **実行タイミング**: [cron形式または時刻]
- **実行頻度**: [日次/週次/月次]
- **想定処理時間**: [XX分]
- **タイムアウト設定**: [XX分]

## 起動パラメータ
| パラメータ名 | 必須 | データ型 | デフォルト値 | 説明 |
|-----------|------|---------|-----------|------|
| [記載] | [記載] | [記載] | [記載] | [記載] |

## 処理対象データ
- **対象テーブル**: [テーブル名]
- **抽出条件**: [WHERE条件]
- **想定件数**: [XX件]

## 処理フロー
[Mermaidフロー図で記載]

## 更新対象テーブル
| テーブル名 | 更新内容 | 更新方式 |
|----------|---------|---------|
| [記載] | [記載] | [記載] |

## エラー処理
| エラーケース | 対応 |
|-----------|------|
| [記載] | [記載] |

## 通知仕様
| 通知条件 | 通知先 | 通知内容 |
|---------|-------|---------|
| [記載] | [記載] | [記載] |
```

---

## 備考

- バッチ実行順序は依存関係に注意し、前提バッチが完了してから後続バッチを実行すること
- 処理時間が長いバッチは、業務時間外に実行すること
- 障害発生時は、リカバリー手順に従って手動実行または再実行を行うこと
- バッチ実行ログは保持期間(90日間)経過後に自動削除される

---
プレビュー

BAT-001: 日次売上集計バッチ

概要

前日の売上データを集計し、日次売上サマリーテーブルと月次売上集計テーブルを更新する。部門別・商品別の売上金額、数量を算出する。

実行スケジュール

  • 実行タイミング: 毎日 2:00 AM
  • 実行頻度: 日次
  • 想定処理時間: 15分
  • タイムアウト設定: 30分

起動パラメータ

パラメータ名 必須 データ型 デフォルト値 説明
target_date 任意 日付(YYYYMMDD) 前日 集計対象日
mode 任意 文字列 normal normal: 通常実行、force: 再集計モード

処理対象データ

  • 対象テーブル: 売上トランザクションテーブル (sales_transactions)
  • 抽出条件: 対象日の0:00~23:59の取引データ
  • 想定件数: 約50,000件/日

処理フロー

graph TD
    A[バッチ起動] --> B[パラメータ取得]
    B --> C{target_date指定?}
    C -->|なし| D[前日を対象日に設定]
    C -->|あり| E[指定日を対象日に設定]
    D --> F[対象日の売上データ抽出]
    E --> F
    F --> G{データ存在?}
    G -->|なし| H[警告ログ出力]
    H --> I[処理終了]
    G -->|あり| J[部門別集計処理]
    J --> K[商品別集計処理]
    K --> L[日次サマリー作成]
    L --> M{再集計モード?}
    M -->|Yes| N[既存データ削除]
    M -->|No| O[データ重複チェック]
    N --> P[集計データ登録]
    O --> Q{重複あり?}
    Q -->|Yes| R[エラーログ出力]
    R --> S[異常終了]
    Q -->|No| P
    P --> T[月次集計テーブル更新]
    T --> U[処理件数ログ出力]
    U --> V[正常終了]

集計ロジック

部門別集計
SELECT
    department_id,
    department_name,
    SUM(amount) as total_amount,
    SUM(quantity) as total_quantity,
    COUNT(DISTINCT customer_id) as customer_count,
    COUNT(*) as transaction_count
FROM
    sales_transactions
WHERE
    transaction_date = :target_date
    AND status = 'completed'
GROUP BY
    department_id,
    department_name
商品別集計
SELECT
    product_id,
    product_name,
    category_id,
    SUM(amount) as total_amount,
    SUM(quantity) as total_quantity,
    COUNT(*) as transaction_count
FROM
    sales_transactions
WHERE
    transaction_date = :target_date
    AND status = 'completed'
GROUP BY
    product_id,
    product_name,
    category_id

更新対象テーブル

テーブル名 更新内容 更新方式
daily_sales_summary 日次売上サマリー INSERT
department_sales_daily 部門別日次売上 INSERT
product_sales_daily 商品別日次売上 INSERT
monthly_sales_summary 月次集計 UPDATE (累計加算)

エラー処理

エラーケース 対応
対象日のデータが0件 警告ログ出力、正常終了
集計データ重複 エラーログ出力、異常終了
DBエラー リトライ(最大3回)、失敗時は異常終了
タイムアウト エラー通知、異常終了

通知仕様

通知条件 通知先 通知内容
正常終了 - 通知なし
データ0件 業務担当者 「対象日のデータが存在しません」
異常終了 システム管理者 エラー内容、スタックトレース

BAT-002: 会員ステータス更新バッチ

概要

会員の過去1年間の購入履歴を集計し、累計購入金額に応じて会員ステータス(ブロンズ/シルバー/ゴールド/プラチナ)を更新する。

実行スケジュール

  • 実行タイミング: 毎日 3:00 AM
  • 実行頻度: 日次
  • 想定処理時間: 30分
  • タイムアウト設定: 1時間

起動パラメータ

パラメータ名 必須 データ型 デフォルト値 説明
target_member_id 任意 文字列 - 特定会員のみ更新する場合に指定
batch_size 任意 数値 1000 一度に処理する会員数

処理対象データ

  • 対象テーブル: 会員マスタ (members)、売上トランザクション (sales_transactions)
  • 抽出条件: アクティブ会員全件
  • 想定件数: 約100,000会員

会員ステータス判定ロジック

ステータス 条件(過去1年間の累計購入金額)
プラチナ 500,000円以上
ゴールド 300,000円以上 500,000円未満
シルバー 100,000円以上 300,000円未満
ブロンズ 100,000円未満

処理フロー

sequenceDiagram
    participant B as バッチ
    participant M as 会員マスタ
    participant S as 売上トランザクション
    participant L as ログ

    B->>M: アクティブ会員取得 (バッチサイズ単位)
    loop 会員ごと
        B->>S: 過去1年間の購入履歴取得
        S->>B: 累計購入金額返却
        B->>B: ステータス判定
        alt ステータス変更あり
            B->>M: 会員ステータス更新
            B->>L: 更新ログ出力
        else ステータス変更なし
            B->>B: スキップ
        end
    end
    B->>L: 処理完了ログ出力

更新対象テーブル

テーブル名 更新カラム 更新方式
members member_status, status_updated_at UPDATE
member_status_history 履歴テーブルへINSERT INSERT

エラー処理

エラーケース 対応
個別会員の更新エラー エラーログ出力、当該会員スキップして処理継続
DBエラー リトライ(最大3回)、失敗時は異常終了
タイムアウト 処理途中まで確定、次回実行時に継続

BAT-003: データバックアップバッチ

概要

重要な業務データ(会員情報、売上データ、在庫データ)をバックアップファイルとして出力し、外部ストレージに保存する。

実行スケジュール

  • 実行タイミング: 毎日 4:00 AM
  • 実行頻度: 日次
  • 想定処理時間: 1時間
  • タイムアウト設定: 2時間

バックアップ対象テーブル

テーブル名 バックアップ形式 圧縮 保持期間
members SQL dump Yes 90日
sales_transactions SQL dump Yes 90日
inventory SQL dump Yes 30日
orders SQL dump Yes 90日

処理フロー

graph LR
    A[バッチ起動] --> B[バックアップ日付設定]
    B --> C[対象テーブルループ]
    C --> D[テーブルデータ抽出]
    D --> E[SQLダンプ生成]
    E --> F[ファイル圧縮 gzip]
    F --> G[ローカル保存]
    G --> H[外部ストレージ転送]
    H --> I{転送成功?}
    I -->|Yes| J[古いバックアップ削除]
    I -->|No| K[リトライ]
    K --> H
    J --> L[次のテーブル]
    L --> C
    C --> M[全テーブル完了]
    M --> N[バックアップ検証]
    N --> O[完了ログ出力]

バックアップファイル命名規則

{table_name}_backup_{YYYYMMDD}_{HHMMSS}.sql.gz
: members_backup_20251120_040000.sql.gz

保存先

  • ローカル: /var/backup/database/
  • 外部ストレージ: S3バケット (s3://company-backup/database/)

バッチ仕様記載のガイドライン

各バッチの個別仕様を記載する際は、以下のテンプレートを使用する:

バッチ仕様テンプレート
# BAT-XXX: [バッチ名]

## 概要
[バッチの目的と処理内容を簡潔に記述]

## 実行スケジュール
- **実行タイミング**: [cron形式または時刻]
- **実行頻度**: [日次/週次/月次]
- **想定処理時間**: [XX]
- **タイムアウト設定**: [XX]

## 起動パラメータ
| パラメータ名 | 必須 | データ型 | デフォルト値 | 説明 |
|-----------|------|---------|-----------|------|
| [記載] | [記載] | [記載] | [記載] | [記載] |

## 処理対象データ
- **対象テーブル**: [テーブル名]
- **抽出条件**: [WHERE条件]
- **想定件数**: [XX]

## 処理フロー
[Mermaidフロー図で記載]

## 更新対象テーブル
| テーブル名 | 更新内容 | 更新方式 |
|----------|---------|---------|
| [記載] | [記載] | [記載] |

## エラー処理
| エラーケース | 対応 |
|-----------|------|
| [記載] | [記載] |

## 通知仕様
| 通知条件 | 通知先 | 通知内容 |
|---------|-------|---------|
| [記載] | [記載] | [記載] |

備考

  • バッチ実行順序は依存関係に注意し、前提バッチが完了してから後続バッチを実行すること
  • 処理時間が長いバッチは、業務時間外に実行すること
  • 障害発生時は、リカバリー手順に従って手動実行または再実行を行うこと
  • バッチ実行ログは保持期間(90日間)経過後に自動削除される