# インフラ設計書

## 概要

本ドキュメントは、dplyr Rパッケージのインフラストラクチャ構成を記載する。dplyrはオープンソースのRパッケージであり、主にGitHub ActionsベースのCI/CD環境と、GitHub Pagesによるドキュメントホスティングを使用している。

## システム構成

### 全体構成

dplyrはCRANで公開されるRパッケージであり、以下のインフラストラクチャで構成される：

1. **ソースコード管理**: GitHub（tidyverse/dplyr）
2. **CI/CD**: GitHub Actions
3. **ドキュメントホスティング**: GitHub Pages
4. **コードカバレッジ**: Codecov
5. **パッケージ配布**: CRAN（Comprehensive R Archive Network）

### サーバー構成

| サーバー種別 | 役割 | スペック | 台数 |
| --- | --- | --- | --- |
| GitHub Actions Runner (Ubuntu) | CI/CD実行環境（Linux） | ubuntu-latest | オンデマンド |
| GitHub Actions Runner (Windows) | CI/CD実行環境（Windows） | windows-latest | オンデマンド |
| GitHub Actions Runner (macOS) | CI/CD実行環境（macOS） | macos-latest | オンデマンド |
| GitHub Pages | ドキュメントホスティング | GitHub管理 | 1 |

### ネットワーク構成

本プロジェクトはGitHubホステッドサービスを使用しており、独自のネットワーク構成は持たない。

- **リポジトリURL**: https://github.com/tidyverse/dplyr
- **ドキュメントURL**: https://dplyr.tidyverse.org
- **CRAN配布**: https://cran.r-project.org/package=dplyr

## ミドルウェア

| ミドルウェア | バージョン | 用途 |
| --- | --- | --- |
| R | 4.1.0以上（release, devel, oldrel-1〜4） | Rランタイム環境 |
| Pandoc | 最新版（r-lib/actions/setup-pandoc@v2） | ドキュメント変換 |
| pkgdown | 最新版 | Rパッケージドキュメントサイト生成 |
| roxygen2 | 最新版 | Rドキュメント生成 |
| testthat | 3.1.5以上 | テストフレームワーク |
| covr | 最新版 | コードカバレッジ測定 |
| air | 最新版 | コードフォーマッタ |
| styler | 最新版 | Rコードスタイリング |

## 外部サービス連携

| サービス名 | 用途 | 接続方式 |
| --- | --- | --- |
| GitHub | ソースコード管理・CI/CD | HTTPS/SSH |
| GitHub Pages | ドキュメントホスティング | HTTPS |
| Codecov | コードカバレッジレポート | API（CODECOV_TOKEN） |
| R-hub | クロスプラットフォームチェック | API（RHUB_TOKEN） |
| CRAN | パッケージ配布 | パッケージサブミッション |
| Plausible Analytics | アクセス解析 | JavaScript埋め込み |
| kapa.ai | AIアシスタント（ドキュメントサイト） | JavaScript埋め込み |

## スケーリング設計

本プロジェクトはGitHub管理のインフラを使用しているため、自動スケーリングが適用される。

- **GitHub Actions**: GitHubがランナーを自動プロビジョニング
- **GitHub Pages**: GitHub管理のCDNによる自動スケーリング
- **CRAN Mirror**: 世界中のCRANミラーによる分散配布

## 可用性設計

- **GitHub Actions**: GitHub SLAに準拠（99.9%）
- **GitHub Pages**: GitHub管理による高可用性
- **CRAN**: 複数ミラーによる冗長構成

### CI/CDジョブの冗長性

R-CMD-checkワークフローでは、複数のOS・Rバージョンの組み合わせでテストを実行し、`fail-fast: false`により一部の失敗が全体に影響しない設計となっている。

| OS | Rバージョン |
| --- | --- |
| macos-latest | release |
| windows-latest | release |
| windows-latest | oldrel-4 |
| ubuntu-latest | devel |
| ubuntu-latest | release |
| ubuntu-latest | oldrel-1 |
| ubuntu-latest | oldrel-2 |
| ubuntu-latest | oldrel-3 |
| ubuntu-latest | oldrel-4 |

## バックアップ設計

| 対象 | 方式 | 頻度 | 保持期間 |
| --- | --- | --- | --- |
| ソースコード | Git履歴 | コミット毎 | 無期限 |
| テスト成果物 | GitHub Actions Artifacts | テスト実行毎 | 90日（デフォルト） |
| カバレッジレポート | Codecov | テスト実行毎 | Codecov保持ポリシーに準拠 |
| ドキュメントサイト | gh-pagesブランチ | デプロイ毎 | 無期限 |

## 監視設計

- **CI/CD監視**: GitHub Actions UIによるワークフロー実行状況確認
- **コードカバレッジ監視**: Codecovダッシュボード
- **ドキュメントサイト監視**: Plausible Analytics（アクセス解析）

### GitHub Actions ワークフロー一覧

| ワークフロー | トリガー | 目的 |
| --- | --- | --- |
| R-CMD-check.yaml | push/PR（main, master） | パッケージビルド・テスト |
| test-coverage.yaml | push/PR（main, master） | コードカバレッジ測定 |
| pkgdown.yaml | push/PR/release/手動 | ドキュメントサイト生成・デプロイ |
| pr-commands.yaml | PRコメント（/document, /style） | ドキュメント生成・スタイル適用 |
| format-suggest.yaml | PR作成・更新 | コードフォーマット提案 |
| rhub.yaml | 手動実行 | R-hubクロスプラットフォームチェック |

## セキュリティ設計

### シークレット管理

| シークレット | 用途 | 管理方法 |
| --- | --- | --- |
| GITHUB_TOKEN | GitHub API認証 | GitHubが自動提供 |
| CODECOV_TOKEN | Codecov API認証 | GitHub Secrets |
| RHUB_TOKEN | R-hub API認証 | GitHub Secrets |

### 権限設定

全ワークフローで`permissions: read-all`をデフォルトとし、必要な箇所のみ明示的に権限を付与している。

- **contents: write**: pkgdown（デプロイ用）、pr-commands（コミット用）
- **pull-requests: write**: format-suggest（提案コメント用）

## 備考

- 本プロジェクトはオープンソースRパッケージであり、サーバーレスアーキテクチャを採用
- GitHub ActionsのPublic RSPMを使用することで、パッケージインストールを高速化
- `actions/checkout@v4`、`r-lib/actions@v2`等の最新のGitHub Actionsを使用
- pkgdownにはtidytemplate（Bootstrap 5）を使用し、レスポンシブデザインを実現
