# バッチ設計書 18-dotnet.cmd

## 概要

本ドキュメントは、dotnetコマンドラッパースクリプト（eng/common/dotnet.cmd）の設計仕様を記述したものである。

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

dotnet.cmdは、Windows環境で.NET SDKをインストールし、dotnetコマンドを実行するためのラッパースクリプトである。このスクリプトはdotnet.ps1 PowerShellスクリプトを呼び出し、必要に応じてSDKのインストールを行った後、指定された引数でdotnetコマンドを実行する。

**業務上の目的・背景**：.NETプロジェクトの開発では、リポジトリで指定されたバージョンのSDKを使用することが重要である。システムにインストールされているSDKとバージョンが異なる場合、ビルド結果の一貫性が損なわれる可能性がある。dotnet.cmdは、リポジトリローカルの.dotnet/ディレクトリにインストールされた正しいバージョンのSDKを使用してdotnetコマンドを実行することを保証する。

**バッチの実行タイミング**：開発者による手動実行（随時）。dotnet CLIコマンドを実行する際に、システムのdotnetではなくリポジトリ固有のバージョンを使用したい場合に使用。

**主要な処理内容**：
1. PowerShellの起動（ExecutionPolicy ByPass、NoProfile）
2. dotnet.ps1スクリプトの呼び出し
3. 必要に応じて.NET SDKのインストール
4. 指定された引数でdotnetコマンドを実行
5. 終了コードの返却

**前後の処理との関連**：単独で使用可能。ビルドスクリプトから内部的に呼び出されることはあまりなく、開発者が直接dotnetコマンドを実行したい場合のエントリポイントとして機能。

**影響範囲**：.dotnet/ディレクトリのSDK、コマンド実行結果。

## バッチ種別

共通 / dotnetコマンドラッパー

## 実行スケジュール

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

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Windows OS | Windows環境 |
| PowerShell | PowerShell 5.1以上 |
| ネットワーク接続 | SDK未インストール時に必要 |

### 実行可否判定

特段の実行可否判定は行わない。引数が指定された場合はdotnetコマンドとして実行される。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| %* | string | No | なし | dotnetコマンドに渡す引数 |

### 使用例

```batch
dotnet.cmd build
dotnet.cmd test
dotnet.cmd restore
dotnet.cmd run --project MyApp
```

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| コマンドライン引数 | パラメータ | dotnetコマンドの引数 |
| global.json | JSON | SDKバージョン情報 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| 標準出力 | テキスト | dotnetコマンドの出力 |
| .dotnet/ | ディレクトリ | インストールされたSDK（初回時） |

### 出力ファイル仕様

dotnetコマンドの実行内容に依存。ビルドコマンドの場合はビルド成果物が生成される。

## 処理フロー

### 処理シーケンス

```
1. バッチファイル起動
   └─ @echo off
2. PowerShell起動
   ├─ ExecutionPolicy ByPass
   ├─ NoProfile
   └─ NoLogo
3. dotnet.ps1実行
   ├─ tools.ps1読み込み
   ├─ InitializeDotNetCli呼び出し（install: true）
   └─ 引数がある場合はdotnetコマンド実行
4. 終了コード返却
   └─ exit /b %ErrorLevel%
```

### フローチャート

```mermaid
flowchart TD
    A[dotnet.cmd開始] --> B[PowerShell起動]
    B --> C[dotnet.ps1実行]
    C --> D[tools.ps1読み込み]
    D --> E[InitializeDotNetCli]
    E --> F{引数あり?}
    F -->|Yes| G[dotnet.exe実行]
    F -->|No| H[SDKインストールのみ]
    G --> I[終了コード返却]
    H --> I
    I --> Z[終了]
```

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

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| 非ゼロ | SDKインストールエラー | ネットワーク障害 | ネットワーク確認 |
| 非ゼロ | コマンド実行エラー | dotnetコマンド失敗 | コマンド引数確認 |

### リトライ仕様

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

### 障害時対応

1. ネットワーク接続を確認
2. .dotnet/ディレクトリの状態を確認
3. global.jsonのSDKバージョンを確認
4. 直接dotnet-install.cmdを実行してSDKをインストール

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

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1コマンド |
| 目標処理時間 | コマンド依存 |
| メモリ使用量上限 | 指定なし |

## 排他制御

特段の排他制御は行わない。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | なし | エコー抑制 |
| 進捗ログ | コマンド実行中 | dotnetコマンド出力 |
| 終了ログ | なし | エコー抑制 |
| エラーログ | エラー発生時 | エラーメッセージ |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 処理時間 | コマンド依存 | 開発者 |
| エラー件数 | 1件 | 開発者 |

## 備考

- このスクリプトはシステムにインストールされたdotnetではなく、リポジトリローカルのSDKを使用する
- DOTNET_NOLOGOが設定され、dotnetのロゴ出力が抑制される
- InitializeDotNetCliがinstall: trueで呼び出されるため、SDKが存在しない場合は自動的にインストールされる
- 引数なしで実行した場合はSDKのインストールのみが行われる
