An open API service indexing awesome lists of open source software.

https://github.com/suwa-sh/open-process-mining

プロセスマイニングプラットフォーム - データ準備から分析、可視化までの一貫したワークフローをMITライセンスで提供
https://github.com/suwa-sh/open-process-mining

data-analysis data-visualization dbt-core process-mining python react react-flow

Last synced: about 5 hours ago
JSON representation

プロセスマイニングプラットフォーム - データ準備から分析、可視化までの一貫したワークフローをMITライセンスで提供

Awesome Lists containing this project

README

          

# open-process-mining

オープンソースのプロセスマイニングプラットフォーム
データ準備から分析、可視化までの一貫したワークフローを提供します。

![](./images/opm_hero.png)

## 概要

**open-process-mining** は、データエンジニアとプロセスアナリストの関心事を分離し、それぞれに最適化されたツールを提供するプロセスマイニングプラットフォームです。

### 主な特徴

- **データ加工**: dbt Coreによる再現可能なデータパイプライン
- **分析エンジン**: DFG (Directly-Follows Graph) ベースのプロセス発見
- **インタラクティブな可視化**: React FlowとMUIによるリッチなWeb UI
- ドラッグ&ドロップでノードを自由に配置
- 頻度の高いパスは太い青線で表示(ハッピーパス)
- 処理時間が長いパスは赤線で警告表示
- パスフィルター機能で重要なフローに集中
- メトリクス切り替え時もレイアウトを維持
- **日本語対応**: プロセス名、分析名の完全日本語化
- **MIT License**: 商用利用も含めた自由な利用が可能

## アーキテクチャ

### システムコンテキスト図

```mermaid
graph TB
DataEngineer[Data Engineer]
ProcessAnalyst[Process Analyst]
OPM[Open Process Mining]
SourceSystems[Source Systems
CRM, ERP, etc.]

DataEngineer -->|Prepare data| OPM
ProcessAnalyst -->|Analyze process| OPM
SourceSystems -->|Export event logs| DataEngineer
```

| 名前 | 説明 |
| ------------------- | ---------------------------------------------------------- |
| Data Engineer | dlt, dbtでイベントログデータを準備する担当者 |
| Process Analyst | Web UIでプロセス分析を実施する担当者 |
| Open Process Mining | プロセスマイニングプラットフォーム |
| Source Systems | イベントログのソースシステム(CRM、ERP、基幹システムなど) |

### コンテナ図

```mermaid
graph TB
User[Process Analyst]
DataEngineer[Data Engineer]

subgraph OPM[Open Process Mining]
Frontend[Frontend
React SPA]
Backend[Backend API
FastAPI]
DB[(Database
PostgreSQL)]
DBT[dbt
Data Transform]
DLT[dlt
Data Load]
end

User -->|Browse localhost:5173| Frontend
DataEngineer --->|Run dbt/dlt| DBT
DataEngineer --->|Run dbt/dlt| DLT
Frontend -->|API calls localhost:8000| Backend
Backend -->|Query| DB
DLT -->|Load Raw Data| DB
DBT -->|Transform & Load| DB
```

| 名前 | 説明 |
| ----------- | ---------------------------------------------------------------------------------------------------- |
| Frontend | React + TypeScript製のSPA。プロセスマップ、組織分析、成果分析を可視化 |
| Backend API | FastAPI製のREST API。分析結果の作成・取得、組織分析、成果分析のエンドポイントを提供 |
| Database | PostgreSQL。イベントログ、分析結果、マスターデータを格納 |
| dbt | データ変換パイプライン。ソースシステムのデータを標準イベントログ形式に変換 |
| dlt | データ取得ツール。外部システム(GitHub、GitLab、Jira等)からデータを抽出してDBにロード(オプション) |

### 技術スタック

- **データ取得**: dlt (data load tool) - GitHub, GitLab, Jira等からデータ抽出(オプション)
- **データ変換**: dbt Core - ELTパイプライン、データ品質テスト
- **データベース**: PostgreSQL - イベントログ、分析結果の格納
- **バックエンド**: Python 3.11, FastAPI, Pandas, NetworkX
- **フロントエンド**: React, TypeScript, Vite, MUI (Material-UI), React Flow
- **インフラ**: Docker Compose (compose.yml / compose.dev.yml)

### デプロイメント図

**開発者環境 (compose.dev.yml)**:

```mermaid
graph TB
subgraph DevEnv[Development Environment]
subgraph Containers[Docker Containers]
FE[Frontend Container
with Volume Mount]
BE[Backend Container
with Volume Mount]
DBT_DEV[dbt Container
backend image + dbt mount]
DLT_DEV[dlt Container
dlt mount]
DB_DEV[(PostgreSQL)]
end

LocalCode[Local Code
Hot Reload]
end

Developer[Developer]

Developer -->|Edit Code| LocalCode
LocalCode -.->|Mount| FE
LocalCode -.->|Mount| BE
LocalCode -.->|Mount| DBT_DEV
LocalCode -.->|Mount| DLT_DEV

FE --> BE
BE --> DB_DEV
DBT_DEV --> DB_DEV
DLT_DEV --> DB_DEV
```

| 環境 | Composeファイル | 特徴 | 用途 |
| ---------------- | ---------------- | ---------------------------------------------- | ------------------------ |
| 開発者環境 | compose.dev.yml | ホットリロード、ボリュームマウント、デバッグ用 | アプリケーション開発 |
| 利用者環境 | compose.yml | ベースイメージ、read-onlyマウント、安定性重視 | データカスタマイズ・運用 |

## クイックスタート(開発者向け)

```bash
git clone https://github.com/suwa-sh/open-process-mining.git
cd open-process-mining
cp .env.example .env

# 開発環境を起動
docker compose -f compose.dev.yml up -d

# サンプルデータを生成
python scripts/generate_sample_data.py

# dbtでデータ投入
docker compose -f compose.dev.yml run --rm dbt bash -c "cd /app/dbt && dbt deps && dbt seed && dbt run"
```

ブラウザで を開き、Web UIから分析を作成してください。

**利用者向けの手順(利用者環境)は [USAGE.md](USAGE.md) を参照してください。**

### 主要な画面

- **プロセス分析一覧** (`/`): 作成したプロセス分析の一覧を表示
- **プロセスマップ** (`/process/{id}`): DFGベースのプロセスフロー可視化
- **組織分析一覧** (`/organization`): 組織分析結果の一覧を表示
- **組織分析詳細** (`/organization/{id}`): ハンドオーバー・作業負荷・パフォーマンス分析
- **成果分析一覧** (`/outcome`): 成果分析結果の一覧を表示
- **成果分析詳細** (`/outcome/{id}`): パス別成果分析・セグメント比較

## 主要機能

### プロセスマップの可視化

![](https://share.cleanshot.com/7HJXl0dR+)

- **ノードのドラッグ&ドロップ**: ノードを自由に配置して見やすいレイアウトを作成
- **パスの強調表示**:
- 🔵 **青色の太い線**: 頻度が高いハッピーパス(最大頻度の80%以上)
- 🔴 **赤色の線**: 処理時間が長い問題のあるパス(最大待機時間の70%以上)
- **パスフィルター**: スライダーで低頻度のパスを非表示にして重要なフローに集中
- **メトリクス切り替え**: 頻度と平均待機時間を切り替えて分析
- **レイアウト保持**: メトリクス切り替え時もドラッグした配置を維持
- **複数プロセス対応**: 異なるビジネスプロセスを同一システムで管理・分析

### 組織分析(ハンドオーバー・作業負荷・パフォーマンス)

- **🔄 ハンドオーバー分析**: 誰と誰が連携して作業しているかを可視化
- ![](https://share.cleanshot.com/JHgM2ps2+)
- 社員別・部署別の集計レベルを選択可能
- ハンドオーバー間の平均待機時間を計算
- 頻度と待機時間のメトリクス切り替え
- パスフィルターで重要な連携に集中
- **📊 作業負荷分析**: 誰の作業量が多いかを可視化
- ![](https://share.cleanshot.com/KGjrl3Yr+)
- アクティビティ数とケース数の集計
- 作業が集中している担当者を特定
- **⏱️ パフォーマンス分析**: 誰の処理時間が長いかを可視化
- ![](https://share.cleanshot.com/Y30XhlMB+)
- 平均処理時間・中央値・合計時間を分析
- ボトルネックになっている担当者を特定

### 成果分析(パス別成果・セグメント比較)

- **📈 パス別成果分析**: プロセスパスごとの成果指標を可視化
- ![](https://share.cleanshot.com/gTmQQLb3+)
- 各パスの平均値・中央値・合計値を表示
- 成果の高いパスを自動検出(平均値の75%以上を強調表示)
- プロセスマップ上で成果メトリックを確認
- **🔍 セグメント比較**: 高成果パスと低成果パスを比較
- ![](https://share.cleanshot.com/B7K98Gjs+)
- 上位25% vs 下位25%の成果比較
- カスタム閾値による柔軟なセグメント分割
- 統計サマリー(平均値、中央値、最小値、最大値、合計値)
- パス構造の違いを可視化

## サンプルデータ

プロジェクトには2024年1年分のビジネスプロセスデータが含まれています。

- [SAMPLE_DATA.md](./SAMPLE_DATA.md)

## 開発ワークフロー

### データエンジニア向け

#### 新しいデータソースの追加

1. `dbt/seeds/` にCSVファイルを配置
2. `dbt/models/staging/` でステージングモデルを作成
3. `dbt/models/staging/stg_all_events.sql` に UNION ALL で追加

```bash
# dbtでデータ投入
dbt seed
dbt run
dbt test
```

#### 組織分析のためのデータソース追加(外部システム連携時)

外部システム(GitHub、GitLab、Jira、Jenkinsなど)からデータを取得する場合、組織分析を有効にするには以下の手順が必要です。

**ステップ1: ユーザーマッピングCSVを作成**

`dbt/seeds/master_user_mapping.csv`に外部システムのユーザー識別子を追加:

```csv
source_system,user_identifier,employee_id,notes
your_system,user123,EMP-001,Your System User Account
```

**ステップ2: dltソースでユーザー情報を抽出**

```python
# dlt/sources/your_system_source.py
yield {
"id": record["id"],
"case_id": record["order_id"],
"user_id": record["user_id"], # 組織分析用: ユーザー識別子を必ず含める
}
```

**ステップ3: dbtステージングモデルでemployee_idにマッピング**

```sql
-- dbt/models/staging/your_system/stg_your_system.sql
WITH user_mapping AS (
SELECT * FROM public.master_user_mapping
WHERE source_system = 'your_system'
),
case_extraction AS (
SELECT
s.*,
COALESCE(um.employee_id, 'SYSTEM') AS user_employee_id
FROM source s
LEFT JOIN user_mapping um ON um.user_identifier = s.user_id
)
SELECT
'your-process' AS process_type,
case_id,
activity,
timestamp,
user_employee_id AS employee_id -- 組織分析用: employee_idを必ず含める
FROM case_extraction
```

**参考実装**:

- `dlt/sources/github_source.py`: GitHubユーザー情報の抽出(creator, assignees, actor)
- `dbt/models/staging/github/stg_github_issues.sql`: ユーザーマッピングパターン
- `scripts/generate_sample_data.py`: サンプルデータ生成時のユーザー情報設定

詳細は [USAGE.md](USAGE.md) の「パターン2: dlt自動投入」を参照してください。

#### 分析の実行

分析はWeb UI () から実行します:

1. **プロセス分析**: トップ画面から「新規作成」→ プロセスタイプを選択 → 「作成」
2. **組織分析**: 「組織分析」タブから「新規作成」→ プロセスタイプを選択 → 「作成」
3. **成果分析**: 「成果分析」タブから「新規作成」→ プロセスタイプとメトリックを選択 → 「作成」

詳細は [USAGE.md](USAGE.md) を参照してください。

### バックエンド開発者向け

#### コード品質チェック

プロジェクトでは[qlty](https://qlty.sh)を使用して、複数のlinterとformatterを統合管理しています。

```bash
# フォーマット実行
make fmt

# すべてのlinterを実行(qlty check + sqlfluff)
make lint

# 個別にqltyを実行する場合
qlty check # すべてのlinter/formatterを実行
qlty fmt # 自動修正可能な問題を修正
qlty check backend/src/main.py # 特定のファイルのみチェック
```

**有効化されているツール:**

- **Python**: ruff (linter), black (formatter), bandit (security)
- **TypeScript/JavaScript**: prettier (formatter), radarlint (静的解析)
- **Dockerfile**: hadolint (linter), dockerfmt (formatter), checkov (security)
- **YAML**: yamllint
- **Markdown**: markdownlint
- **SQL**: sqlfluff(`make lint`に含まれる)

**SQLファイルのlint(個別実行する場合):**

```bash
# backend/sql/以下のSQLファイル
~/.qlty/cache/tools/sqlfluff/3.4.0-f921ba7a9b1c/bin/sqlfluff lint backend/sql/ --dialect postgres

# dbt models
~/.qlty/cache/tools/sqlfluff/3.4.0-f921ba7a9b1c/bin/sqlfluff lint dbt/models/ --dialect postgres --config .sqlfluff

# 自動修正
~/.qlty/cache/tools/sqlfluff/3.4.0-f921ba7a9b1c/bin/sqlfluff fix --dialect postgres
```

#### テストの実行

```bash
# すべてのテスト(backend + E2E)
make test-all

# バックエンドテストのみ
make test

# E2Eテストのみ
make test-e2e

# 個別にテストを実行する場合
docker compose -f compose.dev.yml exec backend pytest tests/ # バックエンドテスト
cd e2e && npm test # E2Eテスト
```

#### API仕様

FastAPIが自動生成するOpenAPI(Swagger UI)ドキュメントで全エンドポイントを確認できます:

- **Swagger UI**:
- **ReDoc**:
- **OpenAPI JSON**:

**主要API**:

- `/health`: ヘルスチェック
- `/process/*`: プロセス分析API
- `/organization/*`: 組織分析API
- `/outcome/*`: 成果分析API

### フロントエンド開発者向け

#### コード品質チェック

フロントエンドもqltyでlint/formatを実行できます:

```bash
# フォーマット実行
make fmt

# すべてのlinterを実行
make lint

# 個別にqltyを実行する場合
qlty check frontend/src/ # フロントエンドファイルのチェック
qlty fmt frontend/src/ # 自動修正
qlty check frontend/src/App.tsx # 特定のファイルのみ
```

**フロントエンドで有効なツール:**

- **prettier**: コードフォーマッター(TypeScript, TSX, CSS, JSON)
- **radarlint**: TypeScript静的解析(複雑度、コード品質)
- **markdownlint**: Markdownファイルの検証

#### 開発サーバー

フロントエンドは自動でホットリロードされます。

```bash
# フロントエンドコンテナ内
cd /app
npm run dev
```

### dbt テスト(データ品質保証)

dbt テストは、データパイプラインの品質を保証します。

```bash
# dbt テストを実行
make test-dbt

# または個別に実行
docker compose -f compose.dev.yml run --rm dbt bash -c "cd /app/dbt && dbt test"
```

**テスト内容**:

- **NULL チェック**: 必須カラムに NULL がないことを確認
- **一意性制約**: プライマリキーの一意性を検証
- **参照整合性**: 外部キー制約の検証(employee_id, department_id)
- **値の妥当性**: process_type, metric_unit の許可値チェック
- **複合キー**: 複数カラムの組み合わせの一意性検証

**テスト対象**:

- `stg_all_events`: 統合ステージングテーブル
- `fct_event_log`: イベントログファクトテーブル(全6プロセスタイプ)
- `fct_case_outcomes`: 成果データテーブル

### E2Eテスト(Playwright)

E2Eテストは、実際のブラウザを使ってアプリケーション全体の動作を検証します。

```bash
# E2Eテストを実行
make test-e2e

# または個別に実行
cd e2e && npm test
```

**初回セットアップ**(初回のみ):

```bash
cd e2e
npm install
npx playwright install chromium
```

**テスト内容**:

- プロセス分析(一覧、作成、マップ表示)
- 組織分析(一覧、作成、集計レベル切り替え)
- 成果分析(一覧、パス別成果、セグメント比較)

詳細は [e2e/README.md](e2e/README.md) を参照してください。

## データベース接続

### PostgreSQLデータの保存場所

- **Dockerボリューム**: `postgres-data`(Named Volume、Dockerが自動管理)
- **データベース名**: `process_mining_db`
- **ポート**: `localhost:5432`
- **ユーザー名**: `process_mining`(`.env`で設定)
- **パスワード**: `secure_password`(`.env`で設定)

### 主要テーブル

| テーブル | 説明 |
| ------------------------------- | ------------------------------------------------------------------ |
| `fct_event_log` | プロセスマイニング用イベントログ(組織情報含む) |
| `fct_case_outcomes` | ケース別成果データ(メトリック値) |
| `process_analysis_results` | プロセス分析結果(JSON形式) |
| `organization_analysis_results` | 組織分析結果(JSON形式) |
| `outcome_analysis_results` | 成果分析結果(JSON形式) |
| `master_employees` | 社員マスター |
| `master_departments` | 部署マスター |
| `master_user_mapping` | 外部システムユーザーと社員IDのマッピング(組織分析用、シードCSV) |

詳細なスキーマ情報とデータベース操作は [USAGE.md](USAGE.md) を参照してください。

### 接続方法

**コンテナ内でpsqlを使用**(推奨):

```bash
docker compose -f compose.dev.yml exec postgres psql -U process_mining -d process_mining_db
```

**GUIツールで接続**(TablePlus、DBeaver、pgAdminなど):

- Host: `localhost`
- Port: `5432`
- Database: `process_mining_db`
- User: `process_mining`
- Password: `secure_password`

**よく使うSQL**:

```sql
-- イベントログ件数
SELECT process_type, COUNT(*) FROM fct_event_log GROUP BY process_type;

-- 分析結果一覧
SELECT analysis_id, analysis_name, created_at FROM process_analysis_results;
```

## イメージ配布戦略

本プロジェクトは以下のDockerイメージをGitHub Container Registry (GHCR)で配布しています。

| イメージ名 | 用途 | 配布形態 |
| ----------------------------------------------------- | --------------------------------- | -------------- |
| `ghcr.io/suwa-sh/open-process-mining-backend:latest` | FastAPI バックエンド | 完全なイメージ |
| `ghcr.io/suwa-sh/open-process-mining-frontend:latest` | React フロントエンド | 完全なイメージ |
| `ghcr.io/suwa-sh/open-process-mining-dbt-base:latest` | dbt実行環境(依存ライブラリのみ) | ベースイメージ |
| `ghcr.io/suwa-sh/open-process-mining-dlt-base:latest` | dlt実行環境(依存ライブラリのみ) | ベースイメージ |

### 利用者のワークフロー

本プロジェクトは、利用者が自組織のデータソースに合わせてdbt/dltをカスタマイズすることを前提としています。

- 詳細は [USAGE.md](USAGE.md) を参照

### イメージの更新頻度

- **backend/frontend**: 機能追加・バグ修正時に自動ビルド(GitHub Actions)
- **dbt-base/dlt-base**: ライブラリバージョン更新時に手動ビルド

### タグ戦略

| タグ | 説明 | 用途 |
| -------- | --------------------------- | -------- |
| `latest` | mainブランチの最新ビルド | 開発環境 |
| `vX.Y.Z` | セマンティックバージョン | 利用者環境 |
| `vX.Y` | メジャー.マイナーバージョン | 利用者環境 |

## ドキュメント

- **[USAGE.md](USAGE.md)**: 自組織でプロセスマイニングを実施する方法(利用者向け)
- **[CLAUDE.md](CLAUDE.md)**: 開発ガイド(開発者向け)

## ライセンス

MIT License - 詳細は [LICENSE](LICENSE) を参照

## コントリビューション

Issue、Pull Requestを歓迎します。