# バッチ設計書 11-RestoreInternal.cmd

## 概要

本ドキュメントは、F#コンパイラプロジェクトにおける内部依存関係リストアバッチ（eng/RestoreInternal.cmd）の設計仕様を記述したものである。

### 本バッチの処理概要

RestoreInternal.cmdは、F#コンパイラプロジェクトの内部依存関係をリストアするためのWindowsバッチファイルである。このスクリプトはArcadeフレームワークの共通ビルドスクリプト（eng/common/build.ps1）をラップし、リストアとビルドの両方のオプションを有効にして実行する。

**業務上の目的・背景**：F#コンパイラは.NETエコシステムの一部として、Microsoft.DotNet.Arcade.SDKなどの内部パッケージに依存している。これらの内部依存関係は、パブリックなNuGetフィードでは提供されていないため、専用のリストア処理が必要となる。本バッチは、開発者やCIシステムが内部依存関係を正しく取得し、ビルド環境を整備するために使用される。

**バッチの実行タイミング**：手動実行（随時）。開発環境のセットアップ時や、内部パッケージの更新が必要な場合に開発者が明示的に実行する。CIパイプラインでは、フルビルドの前提処理として自動実行されることもある。

**主要な処理内容**：
1. PowerShell実行ポリシーをByPassに設定し、スクリプト実行を許可
2. eng/common/build.ps1スクリプトを呼び出し
3. -restore および -build オプションを有効化
4. コマンドライン引数を透過的に転送

**前後の処理との関連**：本バッチは通常、メインビルド（Build.cmd）やテスト実行の前に実行される。後続のビルドプロセスは、本バッチによってリストアされた内部パッケージに依存する。

**影響範囲**：.packagesディレクトリ、artifactsディレクトリ、NuGetパッケージキャッシュに影響を与える。リストアされたパッケージはプロジェクト全体のビルドに使用される。

## バッチ種別

依存関係リストア / ビルド準備

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時 |
| 実行時刻 | 指定なし |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | 手動 / CI前処理 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Windows OS | Windows環境でのみ実行可能 |
| PowerShell | PowerShell 5.1以上がインストールされていること |
| ネットワーク接続 | 内部NuGetフィードへのアクセスが可能であること |
| 認証情報 | 内部フィードへのアクセス権限が設定されていること |

### 実行可否判定

特段の実行可否判定ロジックは存在しない。スクリプトは呼び出されると即座にbuild.ps1を実行する。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| %* | string | No | なし | コマンドライン引数（build.ps1に透過的に転送） |
| -configuration | string | No | Debug | ビルド構成（Debug/Release） |
| -verbosity | string | No | minimal | MSBuild出力の詳細度 |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| global.json | JSON | .NET SDKバージョンとツールセット定義 |
| NuGet.config | XML | NuGetパッケージソース設定 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| .packages/ | ディレクトリ | リストアされたNuGetパッケージ |
| artifacts/toolset/ | ディレクトリ | ツールセット関連ファイル |
| artifacts/log/ | ディレクトリ | ビルドログファイル |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | Build.binlog（バイナリログ有効時） |
| 出力先 | artifacts/log/{Configuration}/ |
| 文字コード | バイナリ |
| 区切り文字 | 該当なし |

## 処理フロー

### 処理シーケンス

```
1. バッチファイル実行開始
   └─ echo offによるコマンドエコー抑制
2. PowerShell呼び出し
   └─ ExecutionPolicy ByPassでセキュリティ制限を回避
   └─ NoProfileで高速起動
3. build.ps1スクリプト実行
   └─ -build -restore オプション付きで実行
   └─ 追加引数は透過的に転送
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[PowerShell起動]
    B --> C[build.ps1呼び出し]
    C --> D[依存関係リストア]
    D --> E[ビルド実行]
    E --> F{処理成功?}
    F -->|Yes| G[正常終了]
    F -->|No| H[エラー終了]
```

## データベース操作仕様

### 操作別データベース影響一覧

本バッチはデータベース操作を行わない。

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| なし | なし | なし | データベース操作なし |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| 非ゼロ | PowerShellエラー | スクリプト実行失敗 | ログを確認し原因を特定 |
| 1 | 認証エラー | 内部フィードへの認証失敗 | 認証情報を確認 |
| 2 | ツールセットエラー | Arcade SDKの取得失敗 | ネットワーク接続を確認 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0回（リトライなし） |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

### 障害時対応

1. エラーログ（artifacts/log/）を確認
2. ネットワーク接続状態を確認
3. NuGet.configの設定を確認
4. 認証情報（Azure DevOps PAT等）の有効性を確認

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | 該当なし |
| コミットタイミング | 該当なし |
| ロールバック条件 | 該当なし |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 数百パッケージ |
| 目標処理時間 | 5-10分 |
| メモリ使用量上限 | 指定なし |

## 排他制御

同一ディレクトリでの同時実行は推奨されない。ファイルロックにより競合が発生する可能性がある。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | バッチ開始時 | なし（echo off） |
| 進捗ログ | 処理中 | MSBuild出力 |
| 終了ログ | バッチ終了時 | 処理結果サマリー |
| エラーログ | エラー発生時 | エラー詳細とスタックトレース |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 処理時間 | 15分 | CI/CDパイプライン |
| エラー件数 | 1件 | ビルド担当者 |

## 備考

- このスクリプトはArcadeフレームワークの一部として提供される共通インフラストラクチャを使用している
- 内部パッケージへのアクセスには適切な認証情報が必要
- ローカル開発環境では、初回実行時にdotnet-install.ps1によるSDKのダウンロードが行われる場合がある
