# インフラ構成図

## 全体構成図

```mermaid
graph TB
    subgraph "エンドユーザー環境"
        EU[エンドユーザー端末]
        ZSH[zsh シェル]
        OMZ[Oh My Zsh<br/>~/.oh-my-zsh]
    end

    subgraph "配布基盤"
        subgraph "Vercel Edge Network"
            VE[install.ohmyz.sh]
            VS[install.sh]
        end

        subgraph "GitHub Raw Content"
            GR[raw.githubusercontent.com]
        end
    end

    subgraph "GitHub Platform"
        subgraph "リポジトリ"
            REPO[ohmyzsh/ohmyzsh<br/>master branch]
            CODE[ソースコード]
            PLUGINS[plugins/]
            THEMES[themes/]
            TOOLS[tools/]
        end

        subgraph "GitHub Actions"
            CI[CI ワークフロー<br/>main.yml]
            INST[インストーラーテスト<br/>installer.yml]
            DEP[依存関係更新<br/>dependencies.yml]
            SEC[Scorecard分析<br/>scorecard.yml]
            PROJ[プロジェクト管理<br/>project.yml]
        end

        subgraph "GitHub Services"
            ISSUES[Issues]
            PR[Pull Requests]
            PROJ_V2[Projects V2]
            DB[Dependabot]
        end
    end

    subgraph "開発環境"
        CODESPACE[GitHub Codespaces]
        DEVCON[DevContainer<br/>Ubuntu Noble]
    end

    subgraph "セキュリティ"
        OSSF[OSSF Scorecard]
        SARIF[Code Scanning]
    end

    %% ユーザーインストールフロー
    EU -->|curl/wget| VE
    EU -->|curl/wget| GR
    VE --> VS
    GR --> TOOLS
    EU -->|git clone| REPO
    OMZ --> ZSH

    %% CI/CDフロー
    REPO --> CI
    REPO --> INST
    INST -->|deploy| VE

    %% セキュリティフロー
    SEC --> OSSF
    OSSF --> SARIF
    DB --> REPO

    %% 開発フロー
    CODESPACE --> DEVCON
    DEVCON --> REPO

    %% プロジェクト管理
    ISSUES --> PROJ_V2
    PR --> PROJ_V2
    PROJ --> PROJ_V2
```

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

```mermaid
graph LR
    subgraph "トリガー"
        PUSH[push to master]
        PR_EVENT[Pull Request]
        SCHEDULE[スケジュール]
        MANUAL[手動実行]
    end

    subgraph "GitHub Actions Runners"
        subgraph "Ubuntu Runner"
            UBUNTU[ubuntu-latest]
        end
        subgraph "macOS Runner"
            MACOS[macos-latest]
        end
    end

    subgraph "CI ワークフロー (main.yml)"
        HARDEN1[Harden Runner]
        CHECKOUT1[Checkout]
        ZSH_INSTALL[Install zsh]
        SYNTAX[Syntax Check]
    end

    subgraph "インストーラーワークフロー (installer.yml)"
        HARDEN2[Harden Runner]
        CHECKOUT2[Checkout]
        TEST_INST[Test Installer]
        DEPLOY[Deploy to Vercel]
    end

    subgraph "依存関係ワークフロー (dependencies.yml)"
        HARDEN3[Harden Runner]
        CHECKOUT3[Checkout]
        PYTHON[Setup Python 3.12]
        UPDATER[Run Updater Script]
    end

    subgraph "Scorecard ワークフロー (scorecard.yml)"
        HARDEN4[Harden Runner]
        CHECKOUT4[Checkout]
        ANALYSIS[Scorecard Analysis]
        UPLOAD[Upload SARIF]
    end

    %% トリガー接続
    PUSH --> UBUNTU
    PR_EVENT --> UBUNTU
    SCHEDULE --> UBUNTU
    MANUAL --> UBUNTU

    PUSH --> MACOS
    PR_EVENT --> MACOS

    %% CI フロー
    UBUNTU --> HARDEN1 --> CHECKOUT1 --> ZSH_INSTALL --> SYNTAX

    %% インストーラーフロー
    UBUNTU --> HARDEN2 --> CHECKOUT2 --> TEST_INST
    MACOS --> HARDEN2
    TEST_INST --> DEPLOY

    %% 依存関係フロー
    UBUNTU --> HARDEN3 --> CHECKOUT3 --> PYTHON --> UPDATER

    %% Scorecard フロー
    UBUNTU --> HARDEN4 --> CHECKOUT4 --> ANALYSIS --> UPLOAD
```

## インストールフロー図

```mermaid
sequenceDiagram
    participant User as エンドユーザー
    participant Vercel as install.ohmyz.sh
    participant GitHub as GitHub Raw
    participant GitRepo as GitHub Repo
    participant Local as ローカル環境

    alt Vercel経由
        User->>Vercel: sh -c "$(curl -fsSL https://install.ohmyz.sh)"
        Vercel-->>User: install.sh
    else GitHub Raw経由
        User->>GitHub: curl/wget/fetch
        GitHub-->>User: install.sh
    end

    User->>Local: 実行: install.sh
    Local->>Local: zsh インストール確認
    Local->>Local: $ZSH ディレクトリ確認
    Local->>GitRepo: git clone (depth=1)
    GitRepo-->>Local: Oh My Zsh ファイル
    Local->>Local: .zshrc 設定
    Local->>Local: デフォルトシェル変更 (任意)
    Local->>Local: zsh 起動
```

## 開発環境構成図

```mermaid
graph TB
    subgraph "GitHub Codespaces"
        subgraph "DevContainer"
            BASE[mcr.microsoft.com/devcontainers/base:noble]
            ZSH_DEV[zsh]
            GIT[git]
            UTILS[common-utils]
        end

        subgraph "ワークスペース"
            WS[/workspaces/ohmyzsh]
            OMZ_LINK[~/.oh-my-zsh -> /workspaces/ohmyzsh]
            ZSHRC[~/.zshrc]
        end
    end

    BASE --> ZSH_DEV
    BASE --> GIT
    BASE --> UTILS

    WS --> OMZ_LINK
    OMZ_LINK --> ZSHRC
```

## セキュリティ構成図

```mermaid
graph TB
    subgraph "GitHub Actions セキュリティ"
        subgraph "ランナー強化"
            HR[step-security/harden-runner]
            EGRESS[Egress Policy: audit]
        end

        subgraph "権限管理"
            PERM[Permissions]
            READ[contents: read]
            WRITE[contents: write]
            SEC_EVT[security-events: write]
        end

        subgraph "アクション固定"
            SHA[SHA指定バージョン]
        end
    end

    subgraph "サプライチェーンセキュリティ"
        OSSF[OSSF Scorecard]
        SARIF[SARIF Results]
        CODESCAN[GitHub Code Scanning]
    end

    subgraph "依存関係セキュリティ"
        DEPENDABOT[Dependabot]
        AUTO_PR[自動PR作成]
    end

    subgraph "シークレット管理"
        SECRETS[GitHub Secrets]
        VERCEL_CRED[Vercel認証情報]
        APP_CRED[GitHub App認証情報]
    end

    HR --> EGRESS
    PERM --> READ
    PERM --> WRITE
    PERM --> SEC_EVT

    OSSF --> SARIF --> CODESCAN
    DEPENDABOT --> AUTO_PR

    SECRETS --> VERCEL_CRED
    SECRETS --> APP_CRED
```
