# インフラ設計書

## 概要

本ドキュメントは、space-vim（Vim/NeoVim向けプラグイン配布システム）のインフラストラクチャ設計を記載したものです。space-vimはクライアントサイドで動作するVimプラグインディストリビューションであり、サーバーサイドのインフラは持たず、GitHub上でホストされるオープンソースプロジェクトです。

## システム構成

### 全体構成

space-vimは以下の構成要素から成り立っています：

1. **ソースコードリポジトリ**：GitHub上でホストされる公開リポジトリ
2. **CI/CDパイプライン**：GitHub Actionsを利用した自動テスト・検証
3. **プラグイン配信**：vim-plugを介したプラグインのダウンロード・インストール
4. **ドキュメントサイト**：GitHub Pages（gh-pagesブランチ）でのドキュメント公開

```
[開発者] --> [GitHub Repository] --> [GitHub Actions (CI)]
                    |
                    v
              [GitHub Pages]
                    |
                    v
[エンドユーザー] <-- [vim-plug] <-- [各種プラグインリポジトリ]
```

### サーバー構成

| サーバー種別 | 役割 | スペック | 台数 |
| --- | --- | --- | --- |
| GitHub Repository | ソースコード管理・配布 | GitHub Standard | 1 |
| GitHub Actions Runner | CI/CDパイプライン実行 | ubuntu-latest | オンデマンド |
| GitHub Pages | 静的ドキュメントホスティング | GitHub Standard | 1 |

### ネットワーク構成

- **配布経路**：ユーザーはインターネット経由でGitHub/GitHub Pagesにアクセス
- **インストール経路**：
  - `install.sh`スクリプトによるGitリポジトリのクローン
  - vim-plugによる依存プラグインのダウンロード
- **プロトコル**：HTTPS（Git over HTTPS）

## ミドルウェア

| ミドルウェア | バージョン | 用途 |
| --- | --- | --- |
| Git | 任意（ユーザー環境依存） | リポジトリクローン・更新 |
| vim-plug | 最新 | Vimプラグイン管理 |
| Vim | 8.0以上推奨 | エディタ本体 |
| NeoVim | 0.4以上推奨 | エディタ本体（代替） |
| curl | 任意 | vim-plugダウンロード |

## 外部サービス連携

| サービス名 | 用途 | 接続方式 |
| --- | --- | --- |
| GitHub | ソースコード管理・配布 | HTTPS/Git |
| GitHub Actions | CI/CDパイプライン | GitHub内部連携 |
| GitHub Pages | ドキュメント公開 | HTTPS |
| reviewdog/action-vint | VimLコード品質チェック | GitHub Actions |
| deadsnakes PPA | Python 3.6インストール（CI用） | apt |
| pip (PyPI) | vim-vint等のインストール（CI用） | HTTPS |

## スケーリング設計

### 特性

space-vimはクライアントサイドアプリケーションであるため、従来のサーバーサイドスケーリングは不要です。

### 配布のスケーラビリティ

- **GitHub**：CDN経由でグローバル配信
- **GitHub Pages**：静的コンテンツのCDN配信
- **vim-plug**：分散型プラグインダウンロード（各プラグインリポジトリから直接取得）

### ユーザー側の考慮事項

- プラグインのインストールは各ユーザー環境で独立して実行
- `:PlugInstall`による並列ダウンロードをサポート

## 可用性設計

### GitHubサービスへの依存

- **SLA**：GitHub.com サービスのSLAに準拠（99.95%+）
- **フェイルオーバー**：GitHub側で自動対応

### リポジトリのミラーリング

- ユーザーは`--depth=1`オプションでshallow cloneを実行し、高速なインストールを実現
- ローカルにクローン後はオフラインでも動作可能

### 障害時の影響

| 障害箇所 | 影響範囲 | 対処法 |
| --- | --- | --- |
| GitHub.com障害 | 新規インストール・更新不可 | 復旧待ち |
| GitHub Actions障害 | CI実行不可 | 手動テスト |
| 個別プラグインリポジトリ障害 | 該当プラグインのみ影響 | 代替プラグイン使用 |

## バックアップ設計

| 対象 | 方式 | 頻度 | 保持期間 |
| --- | --- | --- | --- |
| ソースコード | Gitリポジトリ（分散型） | コミット毎 | 永続 |
| ユーザー設定（.spacevim） | ローカルファイル | ユーザー管理 | ユーザー管理 |
| プラグインキャッシュ | ローカルディレクトリ | 自動 | ユーザー管理 |

### バックアップの推奨事項

- ユーザーは`~/.spacevim`ファイルをバージョン管理することを推奨
- 既存設定のバックアップは`install.sh`が自動実行（日付付きリネーム）

## 監視設計

### CI/CD監視

| 監視項目 | 方式 | 閾値 |
| --- | --- | --- |
| ビルドステータス | GitHub Actions バッジ | Pass/Fail |
| VimL構文チェック | vint + reviewdog | エラー0件 |
| シェルスクリプト検証 | shellcheck | エラー0件 |

### ユーザー向け監視

- GitHub ActionsのCIバッジでビルド状態を公開
- Issue/Pull Requestでの問題報告と対応

## インストール方式

### 対応プラットフォーム

| プラットフォーム | インストール方法 |
| --- | --- |
| Linux | install.sh / Makefile |
| macOS | install.sh / Makefile |
| Windows | install.cmd（管理者権限必要） |

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

1. `install.sh`または`make vim/neovim`を実行
2. GitHubからリポジトリをクローン（`~/.space-vim`）
3. vim-plugをダウンロード
4. シンボリックリンク作成（`.vimrc` / `init.vim`）
5. `.spacevim`設定ファイル生成
6. `:PlugInstall`でプラグインインストール

## セキュリティ設計

### ソースコードセキュリティ

- オープンソースによる透明性確保
- GitHub上でのコードレビュー
- VimLリンター（vint）による静的解析

### 配布セキュリティ

- HTTPS経由でのダウンロード
- GitHub認証によるリポジトリ保護

## 備考

### 特記事項

- space-vimはサーバーレスアーキテクチャを採用しており、ユーザー環境で完全に動作
- インフラコストは発生しない（GitHubの無料プランで運用可能）
- 依存プラグインは各リポジトリの可用性に依存

### 推奨ツール

| ツール名 | 用途 | 備考 |
| --- | --- | --- |
| fzf | ファジーファインダー | chocolatey（Windows）または各種パッケージマネージャで導入 |
| rg (ripgrep) | 高速検索 | 同上 |
| ag (The Silver Searcher) | 高速検索 | 同上 |

### 参照情報

- リポジトリURL：https://github.com/liuchengxu/space-vim
- ドキュメント：https://github.com/liuchengxu/space-vim/wiki
