# バッチ設計書 32-fsharp.bat

## 概要

本ドキュメントは、F#依存関係セットアップバッチ `fsharp.bat` の設計仕様を記載したものです。このバッチは、Visual Studio Developer Command Prompt環境でF#コンパイラおよびF# Interactiveの環境を設定します。

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

このバッチは、Visual Studioの開発者コマンドプロンプト（Developer Command Prompt）環境でF#ツールを使用可能にするための環境変数設定を行います。

**業務上の目的・背景**：Visual Studioの開発者コマンドプロンプトでF#コンパイラ（fsc.exe）やF# Interactive（fsi.exe）を使用するためには、これらのツールへのパスが設定されている必要があります。本バッチはVSCMD（Visual Studio Command Module）の一部として、Visual Studio起動時に自動的に呼び出され、F#開発環境を整えます。これにより、開発者はコマンドラインからF#のコンパイルや対話型実行を行えるようになります。

**バッチの実行タイミング**：Visual Studio Developer Command Promptの起動時、またはvsdevcmd.bat実行時に自動的に呼び出されます。

**主要な処理内容**：
1. FSHARPINSTALLDIR環境変数の設定（F#ツールのインストールディレクトリ）
2. PATH環境変数へのF#ツールディレクトリの追加
3. テストモード時のfsc.exe/fsi.exeの存在確認
4. クリーン環境モード時の処理（特別な処理なし）

**前後の処理との関連**：vsdevcmd.batまたはVsDevShellから呼び出されます。Visual Studioの他の言語環境設定スクリプトと同様の形式で実装されています。

**影響範囲**：Visual Studio Developer Command Promptセッション内の環境変数（FSHARPINSTALLDIR、PATH）に影響します。

## バッチ種別

環境設定 / セットアップ

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（Developer Command Prompt起動時） |
| 実行時刻 | - |
| 実行曜日 | - |
| 実行日 | - |
| トリガー | vsdevcmd.bat / VsDevShell起動時 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| VSINSTALLDIR | Visual Studioのインストールディレクトリが環境変数として設定されていること |
| Visual Studio | Visual StudioがインストールされF#コンポーネントが含まれていること |
| F#ツール | fsc.exe、fsi.exeが所定のディレクトリに存在すること |

### 実行可否判定

- VSCMD_TEST環境変数が設定されている場合：テストモードで実行
- VSCMD_ARG_CLEAN_ENV環境変数が設定されている場合：クリーン環境モードで実行
- それ以外：通常の環境設定モードで実行

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| VSCMD_TEST | 環境変数 | No | - | テストモード有効化フラグ |
| VSCMD_ARG_CLEAN_ENV | 環境変数 | No | - | クリーン環境モードフラグ |
| VSINSTALLDIR | 環境変数 | Yes | - | Visual Studioインストールディレクトリ |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| 環境変数 | 文字列 | Visual Studio環境から提供される変数 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| FSHARPINSTALLDIR | 環境変数 | F#ツールのインストールディレクトリパス |
| PATH | 環境変数 | F#ツールディレクトリが追加されたPATH |
| 終了コード | 数値 | 0: 成功、1: テスト失敗 |

### 出力ファイル仕様

本バッチはファイル出力を行いません。

## 処理フロー

### 処理シーケンス

```
1. モード判定
   ├─ VSCMD_TESTが設定されている場合 → テストモードへ
   ├─ VSCMD_ARG_CLEAN_ENVが設定されている場合 → クリーン環境モードへ
   └─ それ以外 → 通常モードへ

2. 通常モード
   └─ FSHARPINSTALLDIRを設定
   └─ PATHにFSHARPINSTALLDIRを追加

3. テストモード
   └─ fsc.exeの存在確認（whereコマンド）
   └─ fsi.exeの存在確認（whereコマンド）
   └─ いずれかが見つからない場合はfail

4. クリーン環境モード
   └─ 特別な処理なし（vsdevcmd.batがPATHをクリーンアップ）
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B{VSCMD_TEST設定?}
    B -->|Yes| C[テストモード]
    B -->|No| D{VSCMD_ARG_CLEAN_ENV設定?}
    D -->|Yes| E[クリーン環境モード]
    D -->|No| F[通常モード]

    F --> G[FSHARPINSTALLDIR設定]
    G --> H[PATH更新]
    H --> I[exit /B 0]

    C --> J{fsc.exe存在?}
    J -->|Yes| K{fsi.exe存在?}
    J -->|No| L[エラー出力]
    K -->|Yes| M[exit /B 0]
    K -->|No| L
    L --> N[exit /B 1]

    E --> I
```

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

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

本バッチはデータベース操作を行いません。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| 1 | テスト失敗 | fsc.exeが見つからない | F#コンポーネントの再インストール |
| 1 | テスト失敗 | fsi.exeが見つからない | F#コンポーネントの再インストール |

### リトライ仕様

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

### 障害時対応

テストモードで失敗した場合は、Visual StudioのF#コンポーネントが正しくインストールされているか確認してください。必要に応じてVisual Studio Installerから修復またはF#コンポーネントの追加を行います。

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | なし（環境変数設定のみ） |
| コミットタイミング | - |
| ロールバック条件 | - |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1回 |
| 目標処理時間 | 1秒以内 |
| メモリ使用量上限 | 最小限（環境変数設定のみ） |

## 排他制御

なし。環境変数は現在のプロセスセッション内でのみ有効です。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| エラーログ | テスト失敗時 | "[ERROR:fsharp.bat] Unable to find F# compiler via 'where fsc.exe'." |
| エラーログ | テスト失敗時 | "[ERROR:fsharp.bat] Unable to find F# Interactive via 'where fsi.exe'." |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 終了コード | 1 | Visual Studio Developer Command Prompt |

## 備考

- 本バッチはSwix（Visual Studio Installer XML）パッケージの一部として配布されます
- F#ツールの標準インストールパス：`%VSINSTALLDIR%Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools`
- クリーン環境モードでは、PATHへの追加のみ行っているため、特別なクリーンアップは不要（vsdevcmd.batが処理）
