# インフラ設計書

## 概要

本ドキュメントはOh My Zsh プロジェクトのインフラストラクチャ構成を記載します。Oh My Zshはシェル設定フレームワークであり、エンドユーザーの端末上で動作するツールです。本プロジェクトのインフラは主にCI/CD基盤、インストーラー配布基盤、および開発環境から構成されます。

## システム構成

### 全体構成

Oh My Zshのインフラストラクチャは以下の3つの主要コンポーネントで構成されます：

1. **GitHub リポジトリ**: ソースコード管理、Issue管理、Pull Request管理
2. **GitHub Actions**: CI/CD パイプライン、自動テスト、依存関係更新
3. **Vercel**: インストールスクリプト配布プラットフォーム（install.ohmyz.sh）

### サーバー構成

| サーバー種別 | 役割 | スペック | 台数 |
| --- | --- | --- | --- |
| GitHub Actions Runner | CI/CD実行環境 | ubuntu-latest / macos-latest | オンデマンド |
| Vercel Edge Network | インストーラー配布 | Vercel提供のマネージドインフラ | グローバル分散 |
| GitHub Codespaces | 開発環境 | Devcontainer (noble ベースイメージ) | オンデマンド |

### ネットワーク構成

本プロジェクトはサーバーレスアーキテクチャを採用しており、専用のネットワークインフラは持ちません。

- **GitHub**: HTTPS経由でのリポジトリアクセス
- **Vercel**: CDN経由でのインストーラー配布（install.ohmyz.sh）
- **エンドユーザー**: curl/wget/fetch経由でのインストーラー取得、git経由でのリポジトリクローン

## ミドルウェア

| ミドルウェア | バージョン | 用途 |
| --- | --- | --- |
| zsh | システム提供 | テスト実行、構文チェック |
| git | システム提供 | リポジトリ操作、インストール処理 |
| Python | 3.12 | 依存関係更新スクリプト |
| Node.js/npm | 最新 | Vercel CLI |
| Vercel CLI | 最新 | インストーラーデプロイ |

## 外部サービス連携

| サービス名 | 用途 | 接続方式 |
| --- | --- | --- |
| GitHub | ソースコード管理、CI/CD | HTTPS、GitHub API |
| Vercel | インストーラー配布 | HTTPS、Vercel API |
| OSSF Scorecard | サプライチェーンセキュリティ分析 | GitHub Actions |
| GitHub Dependabot | 依存関係脆弱性検出 | GitHub統合 |

## スケーリング設計

### GitHub Actions
- ワークフローは並列実行され、concurrencyグループで制御
- `cancel-in-progress: true` により重複実行を防止
- リポジトリ条件（`github.repository == 'ohmyzsh/ohmyzsh'`）でフォークからの実行を制限

### Vercel
- Vercel Edge Network によるグローバル分散配信
- 自動スケーリング（マネージドサービス）

## 可用性設計

### インストーラー配布
- Vercel Edge Network によるマルチリージョン配信
- 代替インストール方法の提供:
  1. `curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh`
  2. `wget -qO- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh`
  3. `fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh`
  4. GitHubからの直接ダウンロード

### ソースコード
- GitHub のマネージド可用性
- masterブランチの保護設定

## バックアップ設計

| 対象 | 方式 | 頻度 | 保持期間 |
| --- | --- | --- | --- |
| ソースコード | Git分散バージョン管理 | 各コミット時 | 無期限 |
| GitHub Artifacts | GitHub Actions Artifacts | ワークフロー実行時 | 5日間（Scorecard結果） |

## 監視設計

### CI/CDパイプライン監視
- GitHub Actions ワークフロー実行状況のダッシュボード
- 失敗時のGitHub通知

### セキュリティ監視
- **OSSF Scorecard**: サプライチェーンセキュリティの定期分析（毎週火曜日 7:20 UTC）
- **Dependabot**: 依存関係の脆弱性検出
- **step-security/harden-runner**: ランナーのセキュリティ強化、アウトバウンド通信監査

### 依存関係監視
- 依存関係更新ワークフロー（毎週日曜日 6:00 UTC）
- GitHub App（@ohmyzsh bot）による自動PR作成

## 開発環境

### GitHub Codespaces / DevContainer

```json
{
  "image": "mcr.microsoft.com/devcontainers/base:noble",
  "features": {
    "ghcr.io/devcontainers/features/common-utils": {
      "installZsh": true,
      "configureZshAsDefaultShell": true
    }
  }
}
```

## セキュリティ設計

### ワークフローセキュリティ
- 最小権限の原則（`permissions: read-all` または必要最小限の権限）
- 固定されたアクションバージョン（SHA指定）
- step-security/harden-runner によるランナー強化

### シークレット管理
- GitHub Secrets による機密情報管理
  - `VERCEL_ORG_ID`
  - `VERCEL_PROJECT_ID`
  - `VERCEL_TOKEN`
  - `OHMYZSH_APP_ID`
  - `OHMYZSH_APP_PRIVATE_KEY`

## 備考

- 本プロジェクトはシェル設定フレームワークであり、サーバーサイドアプリケーションではないため、従来のWebアプリケーションインフラとは異なる構成となっています
- インフラの主要コンポーネントはすべてマネージドサービス（GitHub、Vercel）を利用しています
- エンドユーザーへの配布は、各ユーザーの端末へのgit cloneを通じて行われます
