# データ集計・バッチ：推奨構成

> 作成：2026年9月。前提：PHPは選択肢から除外。個人の既定であり、プロジェクト固有の要件・既存資産・チームの制約と食い違う場合はそちらを優先する。
> バージョン番号は書いていない。採用時は各ツールの最新安定版を確認して使う。料金も記載していないので、各サービスの最新の料金ページで確認する。

前提（既定の条件）：処理の中心＝集計・変換が中心、実行環境＝指定なし（PaaS可）、外部の制約＝なし
案件の条件が前提と違う場合は、下の「条件が違うとき」で該当する行を確認する。

## 推奨：SQL＋Python（Polars）
- 集計はまずSQLで書くのが最短で、SQLで表現しにくい変換だけPythonにする（§2-9）

## 構成

### 構成（§19-13 をもとに作成）
| レイヤー | 採用 |
|---|---|
| 集計 | SQL（DuckDB、規模が大きければBigQuery） |
| 変換 | Python＋Polars（uv、Ruff） |
| ワークフロー | Temporal |
| 実行 | RenderのCron Job（AWSならECSのスケジュールタスク） |
| 監視 | Sentry（Cron Monitoringで実行漏れを検知） |

## 運用の内訳
- 自分で書く：SQL、DuckDB、Polars、uv、Ruff
- 自分で運用する：Temporal、ECS on Fargate
- マネージドに任せる：BigQuery、Render、Sentry

## 条件が違うとき（既定との差分）
- 処理の中心＝大規模バッチ・ストリーム：推奨が「Kotlin（Spring Batch）＋SQL」になる／変換＝Spring Batch／ストリーム＝Spring for Apache Kafka
- 実行環境＝AWS：実行＝ECS on Fargate＋ALB＋RDS
- 実行環境＝オンプレ・VPS：実行＝Kamal（Dockerコンテナをゼロダウンタイムでデプロイ）
- 実行環境＝エッジ：実行＝Cloudflare Workers
- 外部の制約＝既存のJava資産と連携：推奨が「Kotlin（Spring Batch）＋SQL」になる／変換＝Spring Batch／ストリーム＝Spring for Apache Kafka

## §19-13 データ基盤・バッチ

```mermaid

flowchart LR
  SRC["業務DB・外部API"] --> WF["Temporal<br/>ワークフロー"]
  WF --> TR["Python＋Polars<br/>変換"]
  TR --> DW[("DuckDB／BigQuery")]
  DW --> SQL["SQLで集計"]

```

再実行・中断再開が必要な大規模バッチやストリーム処理は、変換をKotlin（Spring Batch／Kafka Streams）にする（§2-10 手順2）。

## §26-1 共通の準備

```bash
# 言語・ツールのバージョン固定（使う言語だけ）
mise use node@lts pnpm@latest
mise use go@latest
mise use ruby@latest
mise use python@latest uv@latest

# Gitフックと依存更新
pnpm add -D lefthook && pnpm exec lefthook install
# renovate.json を置き、GitHubでRenovateアプリを有効化する
```

## 次に読む
- §2-9: https://stackbook.kom3da.dev/s/2.md（「### 2-9.」の節）
- §2-10: https://stackbook.kom3da.dev/s/2.md（「### 2-10.」の節）
- §23: https://stackbook.kom3da.dev/s/23.md
- §24: https://stackbook.kom3da.dev/s/24.md
- §25: https://stackbook.kom3da.dev/s/25.md
