# インフラ構成図

## 全体システム構成図

```mermaid
graph TB
    subgraph "クライアント（ブラウザ）"
        SPA["Decap CMS SPA<br/>(React アプリケーション)"]
        ML_C["Cloudinary<br/>メディアライブラリ"]
        ML_U["Uploadcare<br/>メディアライブラリ"]
    end

    subgraph "静的ホスティング"
        NETLIFY["Netlify CDN<br/>(静的ファイル配信)"]
    end

    subgraph "認証サービス"
        NI["Netlify Identity<br/>(GoTrue)"]
        COGNITO["AWS Cognito"]
        OAUTH["OAuth2 Provider<br/>(各 Git サービス)"]
    end

    subgraph "Git ホスティングサービス"
        GH["GitHub<br/>(GraphQL / REST API)"]
        GL["GitLab<br/>(GraphQL / REST API)"]
        BB["Bitbucket<br/>(REST API)"]
        AZ["Azure DevOps<br/>(REST API)"]
        GT["Gitea<br/>(REST API)"]
    end

    subgraph "Netlify サービス"
        NGW["Netlify Git Gateway<br/>(/.netlify/git)"]
        NLM["Netlify Large Media<br/>(Git LFS)"]
    end

    subgraph "外部メディアサービス"
        CLOUD["Cloudinary CDN"]
        UPLOAD["Uploadcare CDN"]
    end

    NETLIFY -->|"HTML/JS/CSS 配信"| SPA
    SPA -->|"OAuth2 認証"| OAUTH
    SPA -->|"JWT 認証"| NI
    SPA -->|"Cognito 認証"| COGNITO
    SPA -->|"コンテンツ CRUD"| GH
    SPA -->|"コンテンツ CRUD"| GL
    SPA -->|"コンテンツ CRUD"| BB
    SPA -->|"コンテンツ CRUD"| AZ
    SPA -->|"コンテンツ CRUD"| GT
    SPA -->|"Git 操作プロキシ"| NGW
    NGW --> GH
    NGW --> GL
    NGW --> BB
    SPA -->|"LFS ファイル"| NLM
    ML_C -->|"メディア管理"| CLOUD
    ML_U -->|"メディア管理"| UPLOAD
```

## ローカル開発環境構成図

```mermaid
graph TB
    subgraph "開発者マシン"
        subgraph "ブラウザ"
            CMS["Decap CMS SPA"]
        end

        subgraph "開発サーバー群"
            WDS["webpack-dev-server<br/>(ポート 8080)"]
            DS["decap-server (Express.js)<br/>(ポート 8081)"]
        end

        subgraph "decap-server モード"
            FS_MODE["fs モード<br/>(ファイルシステム直接操作)"]
            GIT_MODE["git モード<br/>(simple-git 経由)"]
        end

        subgraph "ローカルリソース"
            LOCAL_FS["ローカルファイルシステム"]
            LOCAL_GIT["ローカル Git リポジトリ"]
        end
    end

    WDS -->|"SPA 配信"| CMS
    CMS -->|"HTTP POST<br/>(proxy_url)"| DS
    DS --> FS_MODE
    DS --> GIT_MODE
    FS_MODE --> LOCAL_FS
    GIT_MODE --> LOCAL_GIT
```

## CI/CD パイプライン構成図

```mermaid
graph LR
    subgraph "トリガー"
        PUSH["git push<br/>(main/master)"]
        PR["Pull Request"]
        TAG["タグ作成<br/>(decap-*@*)"]
    end

    subgraph "GitHub Actions"
        subgraph "nodejs.yml"
            CHG["パス変更検出"]
            UNIT["ユニットテスト<br/>(3 OS × 2 Node.js)"]
            E2E["E2E テスト<br/>(Cypress × 4 並列)"]
        end

        subgraph "publish.yml"
            BUILD["ビルド<br/>(ESM + Webpack)"]
            TEST["テスト実行"]
            PUB["npm publish<br/>(Lerna + OIDC)"]
        end

        subgraph "create-release.yml"
            REL["GitHub Release 作成"]
        end
    end

    subgraph "外部サービス"
        NPM["npm Registry"]
        SLACK["Slack Webhook"]
        NETLIFY_D["Netlify<br/>(デプロイ)"]
    end

    PUSH --> CHG
    PR --> CHG
    CHG --> UNIT
    CHG --> E2E
    TAG --> BUILD
    BUILD --> TEST
    TEST --> PUB
    PUB --> NPM
    TAG --> REL
    PUB -.->|"通知"| SLACK
    PUSH --> NETLIFY_D
```

## 認証フロー構成図

```mermaid
graph TB
    subgraph "Decap CMS"
        AUTH_LIB["decap-cms-lib-auth"]
    end

    subgraph "認証方式"
        NETLIFY_AUTH["NetlifyAuthenticator<br/>(ポップアップ認証)"]
        PKCE_AUTH["PkceAuthenticator<br/>(Authorization Code + PKCE)"]
        IMPLICIT_AUTH["ImplicitAuthenticator<br/>(Implicit Grant)"]
    end

    subgraph "認証プロバイダー"
        NA["Netlify Auth API<br/>(api.netlify.com)"]
        OIDC["OIDC Provider<br/>(.well-known/openid-configuration)"]
        OAUTH_P["OAuth2 Provider<br/>(各 Git サービス)"]
    end

    subgraph "バックエンド"
        GGW["Git Gateway Backend<br/>(gotrue-js + JWT)"]
        GH_BE["GitHub Backend<br/>(apollo-client)"]
        GL_BE["GitLab Backend<br/>(apollo-client)"]
        BB_BE["Bitbucket Backend"]
        AZ_BE["Azure Backend"]
        GT_BE["Gitea Backend"]
        COG_BE["AWS Cognito Backend"]
    end

    AUTH_LIB --> NETLIFY_AUTH
    AUTH_LIB --> PKCE_AUTH
    AUTH_LIB --> IMPLICIT_AUTH

    NETLIFY_AUTH --> NA
    PKCE_AUTH --> OIDC
    PKCE_AUTH --> OAUTH_P
    IMPLICIT_AUTH --> OAUTH_P

    GGW --> NETLIFY_AUTH
    GH_BE --> PKCE_AUTH
    GH_BE --> NETLIFY_AUTH
    GL_BE --> PKCE_AUTH
    GL_BE --> IMPLICIT_AUTH
    BB_BE --> IMPLICIT_AUTH
    AZ_BE --> PKCE_AUTH
    GT_BE --> PKCE_AUTH
    COG_BE --> PKCE_AUTH
```

## パッケージ依存関係図

```mermaid
graph TB
    subgraph "エントリーポイント"
        APP["decap-cms-app"]
        CMS["decap-cms"]
    end

    subgraph "コア"
        CORE["decap-cms-core"]
    end

    subgraph "バックエンド"
        BE_GH["backend-github"]
        BE_GL["backend-gitlab"]
        BE_BB["backend-bitbucket"]
        BE_AZ["backend-azure"]
        BE_GT["backend-gitea"]
        BE_GGW["backend-git-gateway"]
        BE_PROXY["backend-proxy"]
        BE_COG["backend-aws-cognito"]
        BE_TEST["backend-test"]
    end

    subgraph "ライブラリ"
        LIB_AUTH["lib-auth"]
        LIB_UTIL["lib-util"]
        LIB_WIDGETS["lib-widgets"]
    end

    subgraph "UI"
        UI_DEFAULT["ui-default"]
        UI_AUTH["ui-auth"]
    end

    subgraph "メディアライブラリ"
        ML_CLOUD["media-library-cloudinary"]
        ML_UPLOAD["media-library-uploadcare"]
    end

    CMS --> APP
    APP --> CORE
    APP --> BE_GH
    APP --> BE_GL
    APP --> BE_BB
    APP --> BE_AZ
    APP --> BE_GT
    APP --> BE_GGW
    APP --> BE_PROXY
    APP --> BE_COG
    APP --> BE_TEST
    APP --> LIB_AUTH
    APP --> LIB_UTIL
    APP --> ML_CLOUD
    APP --> UI_DEFAULT
    APP --> UI_AUTH

    BE_GGW --> BE_GH
    BE_GGW --> BE_GL
    BE_GGW --> BE_BB
    BE_COG --> BE_GH
```
