# インフラ設計書

## 概要

本ドキュメントは、Nushellプロジェクトのインフラストラクチャ設計を記載したものです。NushellはRust言語で実装されたクロスプラットフォーム対応のモダンシェルであり、GitHub Actionsを活用したCI/CDパイプラインによってビルド・テスト・リリースが自動化されています。

## システム構成

### 全体構成

Nushellはスタンドアロンのコマンドラインアプリケーションであり、サーバー型のインフラストラクチャを必要としません。主なインフラストラクチャは以下の通りです：

1. **ソースコード管理**: GitHub (nushell/nushell)
2. **CI/CD**: GitHub Actions
3. **コンテナイメージ配布**: Docker Hub / GitHub Container Registry
4. **パッケージ配布**: crates.io, Homebrew, Winget, 各種パッケージマネージャ

### サーバー構成

| サーバー種別 | 役割 | スペック | 台数 |
| --- | --- | --- | --- |
| GitHub Actions Runner (ubuntu-22.04) | CI/CDビルド、テスト実行 | GitHub-hosted | マトリクス実行 |
| GitHub Actions Runner (macos-latest) | macOSビルド・テスト | GitHub-hosted | マトリクス実行 |
| GitHub Actions Runner (windows-latest) | Windowsビルド・テスト | GitHub-hosted | マトリクス実行 |
| GitHub Actions Runner (windows-11-arm) | Windows ARM64ビルド | GitHub-hosted | リリース時 |

### ネットワーク構成

GitHub Actionsのホステッドランナーを使用するため、独自のネットワークインフラは不要です。外部接続としては以下を利用します：

- **GitHub API**: リリース情報の取得・公開
- **crates.io**: Rustパッケージの公開
- **Docker Hub / GHCR**: コンテナイメージの配布

## ミドルウェア

| ミドルウェア | バージョン | 用途 |
| --- | --- | --- |
| Rust | 1.91.1 | ビルドツールチェーン (MSRV) |
| Docker | latest | コンテナイメージビルド |
| Alpine Linux | v3.20 | Dockerベースイメージ (軽量版) |
| Debian Bookworm | slim | Dockerベースイメージ (標準版) |
| Wix Toolset | 6.0.0 | Windows MSIインストーラー作成 |
| cross-rs | latest | クロスコンパイル |

## 外部サービス連携

| サービス名 | 用途 | 接続方式 |
| --- | --- | --- |
| GitHub Actions | CI/CD自動化 | GitHub Integration |
| GitHub Releases | バイナリ配布 | GitHub API |
| crates.io | Rustクレート公開 | Cargo publish |
| Dependabot | 依存関係自動更新 | GitHub App |
| RustSec Advisory | セキュリティ監査 | cargo-audit |

## スケーリング設計

### CI/CDスケーリング

GitHub Actionsのマトリクスビルドにより、以下のプラットフォームで並列ビルド・テストを実行：

**CIテストマトリクス:**
- ubuntu-22.04
- macos-latest
- windows-latest

**リリースビルドマトリクス (13ターゲット):**
- aarch64-apple-darwin
- x86_64-apple-darwin
- x86_64-pc-windows-msvc
- aarch64-pc-windows-msvc
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-gnu
- aarch64-unknown-linux-musl
- armv7-unknown-linux-gnueabihf
- armv7-unknown-linux-musleabihf
- riscv64gc-unknown-linux-gnu
- loongarch64-unknown-linux-gnu
- loongarch64-unknown-linux-musl

### 並行実行制御

GitHub Actionsのconcurrency設定により、同一ブランチへの複数プッシュ時に古いワークフローを自動キャンセル：

```yaml
concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
  cancel-in-progress: true
```

## 可用性設計

### ソースコード可用性

- **GitHub**: プライマリソースリポジトリ
- **nushell/nightly**: ナイトリービルド用リポジトリ

### リリース可用性

- **GitHub Releases**: 公式バイナリ配布
- **複数パッケージマネージャ**: Homebrew, Winget, APT等での配布
- **Docker Hub**: コンテナイメージ配布

### 冗長構成

スタンドアロンアプリケーションのため、アプリケーション自体の冗長構成は不要です。配布チャネルの冗長性は複数パッケージマネージャでの配布により確保されています。

## バックアップ設計

| 対象 | 方式 | 頻度 | 保持期間 |
| --- | --- | --- | --- |
| ソースコード | Gitリポジトリ | コミット毎 | 永続 |
| リリースアーティファクト | GitHub Releases | リリース毎 | 永続 |
| ナイトリービルド | GitHub Releases (nightly) | 毎日00:15 UTC | 直近10件 |
| CIアーティファクト | GitHub Actions Artifacts | ビルド毎 | 14日間 |

## 監視設計

### CI/CD監視

- **GitHub Actions Status**: ワークフロー実行状態の監視
- **Build Badge**: README.mdに表示されるビルドステータスバッジ
- **自動Issue作成**: ナイトリービルド失敗時に自動でIssueを作成

### セキュリティ監視

- **Dependabot**: 依存パッケージの脆弱性監視 (週次、水曜日)
- **Security Audit**: cargo-auditによるセキュリティ監査 (PR/push毎)
- **RustSec Advisory**: rustsec/audit-checkによる監査

### 監視項目

| 監視項目 | ツール | 頻度 |
| --- | --- | --- |
| ビルド成功率 | GitHub Actions | 毎CI実行 |
| テスト成功率 | GitHub Actions | 毎CI実行 |
| 依存パッケージ脆弱性 | Dependabot | 週次 |
| セキュリティアドバイザリ | cargo-audit | PR/push毎 |
| タイポ検出 | typos | PR毎 |

## 備考

### Dockerイメージ

2種類のDockerイメージが提供されています：

1. **Alpine版** (`docker/Dockerfile`)
   - ベースイメージ: Alpine Linux v3.20
   - 特徴: 軽量、musl libc
   - タグ: `nushell:latest-alpine`, `nushell:latest`

2. **Debian版** (`docker/debian.Dockerfile`)
   - ベースイメージ: Debian Bookworm (slim)
   - 特徴: glibc、より広い互換性
   - タグ: `nushell:latest-debian`

### クロスコンパイル

Cross.tomlにより、aarch64-unknown-linux-gnu/muslターゲット向けのクロスコンパイル設定が定義されています。OpenSSLの静的リンクには`--features=static-link-openssl`フラグが必要です。

### Cargoプロファイル

| プロファイル | 用途 | 特徴 |
| --- | --- | --- |
| release | 本番ビルド | サイズ最適化、LTO有効、debuginfo削除 |
| profiling | パフォーマンス分析 | release継承、debug情報保持 |
| ci | CI/CDビルド | dev継承、debug無効 |
