# Medusa

## 概要

Medusaは、デジタルコマース向けのオープンソースプラットフォームです。TypeScriptで構築されたモノレポ構成で、30以上のモジュール化されたコマースパッケージを提供します。ヘッドレスアーキテクチャを採用しており、カスタマイズ性と拡張性に優れたECソリューションを構築できます。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| 商品管理 | 商品、バリアント、カテゴリ、コレクションの管理 |
| 注文管理 | 注文処理、返品、交換、返金のワークフロー |
| カート機能 | カート作成、商品追加、割引適用 |
| 決済処理 | Stripe等の決済プロバイダー統合 |
| フルフィルメント | 配送・出荷管理、在庫追跡 |
| 価格設定 | 地域別価格、通貨管理、価格リスト |
| プロモーション | 割引コード、プロモーションルール管理 |
| 顧客管理 | 顧客アカウント、顧客グループ管理 |
| 認証機能 | Email/Password、Google、GitHub認証 |
| 通知機能 | SendGrid連携、ローカル通知 |
| 税金計算 | 地域別税率設定、自動税金計算 |
| 管理ダッシュボード | React製の管理UI |

## 技術スタック

### コア

- 言語: TypeScript 5.6
- ランタイム: Node.js >= 20
- フレームワーク: Express.js 4.21
- ORM: MikroORM
- データベース: PostgreSQL
- キャッシュ: Redis (オプション)
- パッケージマネージャー: Yarn 3.2.1

### 主要ライブラリ

- Awilix 8.0 (依存性注入)
- Zod 3.25 (バリデーション)
- Axios (HTTPクライアント)
- Jest 29.7 (テスト - バックエンド)
- Vitest 3.0 (テスト - フロントエンド)
- React 18.3 (管理ダッシュボード)
- React Router 6.30 (ルーティング)
- TanStack Query 5.64 (データフェッチング)
- TailwindCSS 3.4 (スタイリング)

## ディレクトリ構成

```
medusa/
├── packages/
│   ├── medusa/              # メインMedusaパッケージ (APIルート、ローダー)
│   ├── core/                # コアフレームワークパッケージ
│   │   ├── framework/       # コアランタイム、HTTP、データベース
│   │   ├── types/           # TypeScript型定義
│   │   ├── utils/           # ユーティリティ関数
│   │   ├── workflows-sdk/   # ワークフロー構成SDK
│   │   ├── core-flows/      # 事前定義済みワークフロー
│   │   ├── modules-sdk/     # モジュール開発SDK
│   │   ├── orchestration/   # ワークフローオーケストレーション
│   │   └── js-sdk/          # JavaScript SDK
│   ├── modules/             # 30以上のコマースモジュール
│   │   ├── product/         # 商品管理
│   │   ├── order/           # 注文管理
│   │   ├── cart/            # カート機能
│   │   ├── payment/         # 決済処理
│   │   ├── fulfillment/     # フルフィルメント
│   │   ├── pricing/         # 価格設定
│   │   ├── promotion/       # プロモーション
│   │   ├── customer/        # 顧客管理
│   │   ├── auth/            # 認証
│   │   ├── notification/    # 通知
│   │   ├── inventory/       # 在庫管理
│   │   ├── tax/             # 税金
│   │   ├── region/          # 地域
│   │   ├── currency/        # 通貨
│   │   ├── user/            # ユーザー
│   │   ├── api-key/         # APIキー
│   │   ├── file/            # ファイル管理
│   │   ├── sales-channel/   # 販売チャネル
│   │   ├── stock-location/  # 在庫ロケーション
│   │   └── providers/       # プロバイダー実装 (15種以上)
│   │       ├── payment-stripe/        # Stripe決済
│   │       ├── auth-emailpass/        # Email/Password認証
│   │       ├── auth-google/           # Google認証
│   │       ├── auth-github/           # GitHub認証
│   │       ├── file-s3/               # S3ファイルストレージ
│   │       ├── file-local/            # ローカルファイル
│   │       ├── notification-sendgrid/ # SendGrid通知
│   │       ├── notification-local/    # ローカル通知
│   │       ├── fulfillment-manual/    # 手動フルフィルメント
│   │       ├── caching-redis/         # Redisキャッシュ
│   │       ├── locking-redis/         # Redisロック
│   │       └── locking-postgres/      # PostgreSQLロック
│   ├── admin/               # 管理ダッシュボードパッケージ
│   │   ├── dashboard/       # React管理UI
│   │   ├── admin-bundler/   # バンドラー
│   │   ├── admin-sdk/       # Admin SDK
│   │   ├── admin-shared/    # 共有コンポーネント
│   │   └── admin-vite-plugin/ # Viteプラグイン
│   ├── cli/                 # CLIツール
│   │   ├── create-medusa-app/ # プロジェクト作成CLI
│   │   ├── medusa-cli/      # MedusaCLI
│   │   ├── medusa-dev-cli/  # 開発用CLI
│   │   └── oas/             # OpenAPI仕様ツール
│   ├── design-system/       # UIコンポーネント
│   └── medusa-test-utils/   # テストユーティリティ
├── integration-tests/       # 統合テスト
│   ├── api/                 # APIテスト
│   ├── http/                # HTTPテスト
│   └── modules/             # モジュールテスト
└── www/                     # ドキュメントサイト
```

## セットアップ

### 必要条件

- Node.js >= 20
- Yarn 3.2.1
- PostgreSQL
- Redis (オプション、本番環境推奨)

### インストール手順

1. 依存関係のインストール

```bash
yarn install
```

2. 全パッケージのビルド

```bash
yarn build
```

3. 特定パッケージのビルド

```bash
yarn workspace @medusajs/medusa build
```

## 開発

### コードスタイル

**Prettier設定:**
- セミコロンなし
- ダブルクォート
- 2スペースインデント
- ES5トレーリングカンマ

**ESLint:**

```bash
yarn lint
```

### テスト実行

**ユニットテスト:**

```bash
yarn test
```

**パッケージ統合テスト:**

```bash
yarn test:integration:packages
```

**HTTP統合テスト:**

```bash
yarn test:integration:http
```

**API統合テスト:**

```bash
yarn test:integration:api
```

**モジュール統合テスト:**

```bash
yarn test:integration:modules
```

### ウォッチモード

パッケージディレクトリ内で:

```bash
yarn watch
```

### OpenAPI仕様生成

```bash
yarn openapi:generate
```
