# インフラ構成図

## 全体構成図

```mermaid
graph TB
    subgraph "エンドユーザー環境"
        USER[ユーザー]

        subgraph "ローカルマシン"
            EMACS[GNU Emacs 27.1-30.2]
            DOOM[Doom Emacs Framework]
            DOOMDIR["~/.doom.d/<br>ユーザー設定"]
            LOCAL[".local/<br>キャッシュ・パッケージ"]

            subgraph "必須ツール"
                GIT[Git >= 2.23]
                RG[ripgrep >= 11.0]
            end

            subgraph "オプションツール"
                FD[fd >= 7.3.0]
                GNUUTILS[GNU find/ls/tar]
            end
        end
    end

    subgraph "外部サービス"
        GITHUB[GitHub<br>doomemacs/doomemacs]
        MELPA[MELPA]
        ELPA[GNU ELPA]
        STRAIGHT[straight.el<br>パッケージマネージャー]
    end

    USER --> EMACS
    EMACS --> DOOM
    DOOM --> DOOMDIR
    DOOM --> LOCAL
    DOOM --> GIT
    DOOM --> RG
    DOOM -.-> FD

    GIT --> GITHUB
    STRAIGHT --> GITHUB
    STRAIGHT --> MELPA
    STRAIGHT --> ELPA
```

## 開発環境構成図（Nix）

```mermaid
graph TB
    subgraph "Nix 開発環境"
        NIXSHELL[nix-shell]
        SHELLNIX[shell.nix]

        subgraph "パッケージソース"
            NIXPKGS[NixOS/nixpkgs]
            EMACSOVERLAY[emacs-overlay]
            NIXEMACSCI[nix-emacs-ci]
        end

        subgraph "利用可能な Emacs バージョン"
            E26[Emacs 26.1-26.3]
            E27[Emacs 27.1-27.2]
            E28[Emacs 28.1-28.2]
            E29[Emacs 29.1-29.4]
            E30[Emacs 30.1-30.2]
            EHEAD[Emacs HEAD]
        end

        subgraph "環境変数"
            EMACSDIR["$EMACSDIR"]
            DOOMDIRENV["$DOOMDIR"]
            DOOMLOCALDIR["$DOOMLOCALDIR"]
        end
    end

    NIXSHELL --> SHELLNIX
    SHELLNIX --> NIXPKGS
    SHELLNIX --> EMACSOVERLAY
    SHELLNIX --> NIXEMACSCI

    NIXPKGS --> E26
    NIXPKGS --> E27
    NIXPKGS --> E28
    NIXPKGS --> E29
    NIXPKGS --> E30
    EMACSOVERLAY --> EHEAD

    NIXSHELL --> EMACSDIR
    NIXSHELL --> DOOMDIRENV
    NIXSHELL --> DOOMLOCALDIR
```

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

```mermaid
graph LR
    subgraph "トリガー"
        PUSH[Push]
        PR[Pull Request]
        SCHEDULE[Schedule<br>12時間ごと]
    end

    subgraph "GitHub Actions"
        subgraph "Workflows"
            LINTCOMMITS[lint-commits.yml]
            TRIAGE[triage.yml]
        end

        subgraph "外部 Workflow"
            DOOMCI[doomemacs/ci<br>@legacy]
        end
    end

    subgraph "実行内容"
        COMMITLINT[コミットメッセージ<br>リント]
        ISSUEMANAGE[Issue<br>トリアージ]
    end

    PUSH --> LINTCOMMITS
    PR --> LINTCOMMITS
    SCHEDULE --> TRIAGE

    LINTCOMMITS --> DOOMCI
    TRIAGE --> DOOMCI

    DOOMCI --> COMMITLINT
    DOOMCI --> ISSUEMANAGE
```

## ディレクトリ構造図

```mermaid
graph TB
    subgraph "Doom Emacs リポジトリ構造"
        ROOT["doomemacs/"]

        ROOT --> BIN["bin/<br>CLI ツール"]
        ROOT --> LISP["lisp/<br>コアライブラリ"]
        ROOT --> MODULES["modules/<br>機能モジュール"]
        ROOT --> PROFILES["profiles/<br>プロファイル設定"]
        ROOT --> STATIC["static/<br>設定テンプレート"]
        ROOT --> DOCS["docs/<br>ドキュメント"]

        BIN --> DOOMCLI["doom<br>メイン CLI"]
        BIN --> DOOMSCRIPT["doomscript"]

        LISP --> DOOMCORE["doom*.el<br>コア機能"]
        LISP --> LISPLIB["lib/<br>ユーティリティ"]
        LISP --> LISPCLI["cli/<br>CLI コマンド"]

        MODULES --> UI["ui/<br>UI モジュール"]
        MODULES --> TOOLS["tools/<br>ツール連携"]
        MODULES --> LANG["lang/<br>言語サポート"]
        MODULES --> EDITOR["editor/<br>エディタ機能"]
    end
```

## パッケージ管理フロー

```mermaid
sequenceDiagram
    participant User as ユーザー
    participant Doom as doom CLI
    participant Straight as straight.el
    participant GitHub as GitHub
    participant MELPA as MELPA/ELPA

    User->>Doom: doom sync
    Doom->>Doom: packages.el 読み込み
    Doom->>Straight: パッケージ要求

    alt Git リポジトリ
        Straight->>GitHub: git clone/pull
        GitHub-->>Straight: リポジトリ
    else MELPA/ELPA
        Straight->>MELPA: パッケージ取得
        MELPA-->>Straight: パッケージ
    end

    Straight->>Straight: ビルド・バイトコンパイル
    Straight-->>Doom: 完了
    Doom-->>User: 同期完了
```

## 環境復旧フロー

```mermaid
flowchart TD
    START[問題発生] --> DOCTOR{doom doctor<br>実行}

    DOCTOR -->|問題特定| FIX[修正実施]
    DOCTOR -->|依存関係不足| INSTALL[依存関係インストール]
    DOCTOR -->|設定エラー| CONFIG[設定修正]

    FIX --> SYNC[doom sync]
    INSTALL --> SYNC
    CONFIG --> SYNC

    SYNC -->|成功| COMPLETE[復旧完了]
    SYNC -->|失敗| SAFEMODE{セーフモード<br>起動}

    SAFEMODE --> DEBUG[デバッグ]
    DEBUG --> FIX

    subgraph "最終手段"
        CLEAN[doom gc<br>クリーンアップ]
        REINSTALL[doom install<br>再インストール]
    end

    SYNC -->|重大な問題| CLEAN
    CLEAN --> REINSTALL
    REINSTALL --> COMPLETE
```
