# インフラ設計書

## 概要

本ドキュメントは、lua-language-server プロジェクトのインフラ構成を定義した設計書である。本プロジェクトはLua言語のLanguage Server Protocol（LSP）実装であり、主にローカル実行型のデスクトップアプリケーションとして動作する。インフラ構成としてはCI/CD（GitHub Actions）とコンテナ化（Docker）が中心となる。

## システム構成

### 全体構成

lua-language-serverは、以下の特徴を持つシステム構成となっている：

1. **ローカル実行型アプリケーション**: サーバー/クライアント型のWebシステムではなく、エディタ/IDEの拡張機能としてローカルマシン上で動作するLanguage Server
2. **マルチプラットフォーム対応**: Windows、macOS、Linux向けにビルド・配布
3. **CI/CDパイプライン**: GitHub Actionsによる自動ビルド・テスト・リリース
4. **コンテナ化**: Docker（Ubuntu 18.04ベース）によるビルド環境の標準化

### サーバー構成

本プロジェクトはローカル実行型のため、従来のWebサーバー構成は適用されない。代わりにCI/CD実行環境を記載する。

| 環境種別 | 役割 | スペック | 備考 |
| --- | --- | --- | --- |
| GitHub Actions Runner (ubuntu-22.04) | Linux x64ビルド | GitHub提供 | Linux x64向けビルド |
| GitHub Actions Runner (ubuntu-24.04-arm) | Linux ARM64ビルド | GitHub提供 | Linux ARM64向けビルド |
| GitHub Actions Runner (macos-latest) | macOSビルド | GitHub提供 | darwin-x64/arm64向けビルド |
| GitHub Actions Runner (macos-14) | macOSテスト | GitHub提供 | darwin-arm64テスト用 |
| GitHub Actions Runner (windows-latest) | Windowsビルド | GitHub提供 | win32-ia32/x64向けビルド |

### ネットワーク構成

本プロジェクトはローカル実行型アプリケーションのため、運用時のネットワーク構成は不要である。CI/CD環境においては、GitHub Actionsの標準ネットワーク構成を使用する。

- **インバウンド**: GitHub Webhooks（push/pull_request イベント）
- **アウトバウンド**: GitHub Releases（ビルド成果物のアップロード）、外部パッケージリポジトリ（zig、luamake等の依存取得）

## ミドルウェア

| ミドルウェア | バージョン | 用途 |
| --- | --- | --- |
| Ubuntu | 18.04 | Dockerベースイメージ（ビルド環境） |
| GCC | 9.x | C/C++コンパイラ |
| G++ | 9.x | C++コンパイラ |
| Zig | beta | Linuxビルド用クロスコンパイラ |
| Ninja | - | ビルドシステム |
| luamake | latest | Luaプロジェクト用ビルドツール |
| Git | latest | バージョン管理 |

## 外部サービス連携

| サービス名 | 用途 | 接続方式 |
| --- | --- | --- |
| GitHub Actions | CI/CDパイプライン実行 | Webhook/REST API |
| GitHub Releases | ビルド成果物配布 | GitHub API |
| Ubuntu PPA (ubuntu-toolchain-r/test) | GCC 9インストール | apt |
| Ubuntu PPA (git-core/ppa) | 最新Git取得 | apt |
| Snap Store | Zigインストール | snap |
| Visual Studio Marketplace | VS Code拡張機能配布 | 外部連携 |
| issues-translate-action | Issue自動翻訳 | GitHub Action |

## スケーリング設計

本プロジェクトはローカル実行型アプリケーションのため、サーバーサイドのスケーリング設計は適用外である。

CI/CD環境においては、GitHub Actionsの並列ジョブ実行（マトリックスビルド）により、以下のプラットフォーム向けビルドを並列で実行する：

- linux-x64
- linux-arm64
- darwin-x64
- darwin-arm64
- win32-ia32
- win32-x64

## 可用性設計

### CI/CD可用性

- **ビルド戦略**: `fail-fast: false` により、一部プラットフォームのビルド失敗が他プラットフォームに影響しない
- **冗長性**: GitHub Actionsのマネージドインフラを利用し、ランナーの可用性はGitHub側で保証

### 配布可用性

- **GitHub Releases**: 複数プラットフォーム向けバイナリを同時リリース
- **Visual Studio Marketplace**: VS Code拡張機能として配布

## バックアップ設計

| 対象 | 方式 | 頻度 | 保持期間 |
| --- | --- | --- | --- |
| ソースコード | Git (GitHub) | リアルタイム | 無期限 |
| ビルド成果物 | GitHub Actions Artifacts | ビルドごと | 90日（デフォルト） |
| リリースバイナリ | GitHub Releases | タグ作成時 | 無期限 |

## 監視設計

### CI/CD監視

- **ビルド状態**: GitHub Actions ステータスバッジ（README.md に表示）
- **通知**: GitHub標準のワークフロー通知（メール/Slack連携可能）

### コード品質監視

- **pre-commit hooks**: lua-language-server-check による静的解析
- **changelog検証**: PR時のchangelog更新チェック

## ビルドパイプライン詳細

### ビルドワークフロー (build.yml)

**トリガー条件**:
- master ブランチへのpush
- v*.*.* パターンのブランチへのpush
- タグ作成
- master へのPR

**処理内容**:
1. ソースコードのチェックアウト（サブモジュール含む）
2. luamake セットアップ
3. Linuxの場合: Zigインストール、zig-cc-wrapper設定
4. luamakeによるビルド実行
5. アーティファクトのアップロード
6. タグ時: tarball/zip作成、GitHub Releasesへの公開

### テストワークフロー (test.yml)

**トリガー条件**:
- 全push
- 全PR

**対象プラットフォーム**:
- ubuntu-22.04 (linux-x64)
- macos-14 (darwin-arm64)
- windows-latest (win32-x64)

### その他ワークフロー

| ワークフロー | 用途 |
| --- | --- |
| changelog.yml | PR時のchangelog更新確認 |
| translate.yml | Issue/コメントの自動翻訳 |

## Docker環境

### Dockerfile構成

**ベースイメージ**: Ubuntu 18.04

**インストールパッケージ**:
- software-properties-common
- git (PPA版)
- gcc-9, g++-9 (PPA版)
- wget, tar, gzip, rsync
- ninja-build

**設定**:
- GCC/G++ 9.x をデフォルトコンパイラとして設定（update-alternatives）

## 備考

1. **テレメトリ削除**: v3.6.5以降、テレメトリ機能は削除されており、外部へのデータ送信は行われない
2. **対応言語**: en-us, zh-cn, zh-tw, pt-br, ja-jp, es-419
3. **依存ライブラリ**: bee.lua, luamake, LPegLabel, LuaParser, lua-glob, utility, json.lua, EmmyLuaCodeStyle, inspect.lua 等
4. **luarocks対応**: lua-language-server-scm-1.rockspec によりluarocksからのインストールも可能
