# 非機能要件定義書

## 概要

本ドキュメントは、F# コンパイラプロジェクト（dotnet/fsharp）の非機能要件を定義するものです。本プロジェクトはMicrosoftが開発・保守するF#言語の公式コンパイラであり、Visual Studio統合、.NET SDK統合、F# Compiler Serviceを含む包括的なコンパイラスイートです。

## 性能要件

### レスポンスタイム

| 処理種別 | 目標値 | 備考 |
| --- | --- | --- |
| 単一ファイルコンパイル | 実行環境依存 | コード規模に比例、ベンチマーク計測で監視 |
| IntelliSense応答 | リアルタイム性確保 | バックグラウンドコンパイラでキャッシュ活用 |
| インクリメンタルビルド | 前回比高速化 | グラフベース型チェックによる並列化対応 |

### スループット

| 項目 | 目標値 | 備考 |
| --- | --- | --- |
| 並列処理能力 | Environment.ProcessorCount | ConcurrentDictionaryの並列度として設定 |
| キャッシュ容量 | デフォルト1024エントリ | TotalCapacity設定、HeadroomPercentage 50%で調整可能 |
| ビルドタイムアウト | 300分 | azure-pipelines.ymlで設定（Full_Signedジョブ） |

### キャッシュ設定

| 設定項目 | 値 | 根拠 |
| --- | --- | --- |
| TotalCapacity | 1024（デフォルト） | CacheOptions.getDefault |
| HeadroomPercentage | 50%（デフォルト） | エビクション用バッファ領域 |
| EvictionMode | MailboxProcessor（デフォルト） | 非同期エビクション処理 |
| 環境変数制御 | FSharp_CacheEvictionImmediate | 即時エビクションモード強制 |
| キャッシュ上書き | FSHARP_CACHE_OVERRIDE=256 | CI環境でのメモリ使用量調整 |

## 可用性要件

| 項目 | 目標値 | 備考 |
| --- | --- | --- |
| 稼働率 | 99%以上 | CI/CDパイプラインの安定性確保 |
| 計画停止時間 | VS挿入時のみ | Visual Studioへの統合タイミング |
| 障害復旧時間（RTO） | ビルドリトライで対応 | enableBuildRetryパラメータで制御 |
| 目標復旧時点（RPO） | N/A | コンパイラはステートレス |

### タイムアウト設定

| 設定項目 | 値 | 根拠 |
| --- | --- | --- |
| ビルドジョブタイムアウト | 300分 | azure-pipelines.yml (timeoutInMinutes) |
| テストタイムアウト（DEBUG） | 15,000ms | Caches.fs テストコード |
| テストタイムアウト（RELEASE） | 200,000ms | CI環境のスレッドスケジューリング考慮 |
| NuGetリトライポリシー | 3回、2秒間隔 | NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY |

### リトライ設定

| 設定項目 | 値 | 根拠 |
| --- | --- | --- |
| NuGet署名検証リトライ | 3回、2000ms待機 | eng/common/core-templates/job/job.yml |
| ビルドリトライ | enableBuildRetryパラメータ | ビルド構成ファイルの保持で対応 |
| VS Drop保持期間 | 90日 | dropRetentionDays設定 |

## セキュリティ要件

### コード署名

| 項目 | 要件 | 備考 |
| --- | --- | --- |
| 署名タイプ | Real（本番署名） | _SignType変数で制御 |
| 署名証明書 | .NET証明書 | UseDotNetCertificate=true |
| MicroBuild署名 | 有効 | MicroBuild_SigningEnabled=true |
| サードパーティDLL | 署名なし | Nerdbank.Streams.dll, Newtonsoft.Json.dll |

### セキュリティスキャン

| ツール | 有効/無効 | 備考 |
| --- | --- | --- |
| BinSkim | 有効 | バイナリ脆弱性スキャン |
| PoliCheck | 有効 | 用語チェック（除外設定あり） |
| CredScan | 有効 | 認証情報漏洩検出 |
| TSA（Trust Service Automation） | 有効 | セキュリティ問題のトラッキング |
| CodeQL | 有効 | 静的コード解析 |

### SDL（Security Development Lifecycle）設定

| 設定項目 | 値 | 根拠 |
| --- | --- | --- |
| TSAインスタンスURL | devdiv.visualstudio.com | TSAConfig.gdntsa |
| TSAプロジェクト | DevDiv | azure-pipelines.yml |
| コードベース名 | FSharp-GitHub | TSAConfig.gdntsa |
| 通知先 | fsharp@microsoft.com | TSAConfig.gdntsa |
| Guardian バージョン | 0.109.0 | sdl-variables.yml |

## 拡張性要件

### ターゲットフレームワーク

| 項目 | 値 | 備考 |
| --- | --- | --- |
| 製品TFM | net10.0 | FSharpNetCoreProductTargetFramework |
| ソースビルド対応 | NetCurrent | DotNetBuildSourceOnly時に動的設定 |
| ReadyToRun | 有効 | ビルド高速化（Monoランタイム除く） |

### バージョン管理

| 項目 | 値 | 備考 |
| --- | --- | --- |
| F#メジャーバージョン | 11 | FSMajorVersion |
| F#言語バージョン | 11.0 | FSLanguageVersion |
| FSharp.Core バージョン | 11.0.100.0 | FSCoreVersion |
| FCS バージョン | 43.12.100 | FSharpCompilerServicePackageVersion |
| VS統合バージョン | 18.x | Visual Studio 2026対応 |

### マルチプラットフォーム対応

| プラットフォーム | 対応状況 | 備考 |
| --- | --- | --- |
| Windows | 完全対応 | プライマリ開発環境 |
| Linux | ソースビルド対応 | centos-stream9コンテナ使用 |
| macOS | 対応 | darwin環境でのビルド・テスト |

## 保守性要件

### コード品質

| 項目 | 要件 | 備考 |
| --- | --- | --- |
| テスト並列実行 | 有効 | parallelizeAssembly: true |
| AppDomain分離 | 無効 | appDomain: denied |
| テスト結果形式 | XUnit | PublishTestResults設定 |

### ビルド構成

| 項目 | 値 | 備考 |
| --- | --- | --- |
| SDK バージョン | 10.0.101 | global.json |
| Arcade SDK | 10.0.0-beta.26110.1 | msbuild-sdks |
| Helix SDK | 8.0.0-beta.23255.2 | テスト分散実行用 |
| VS バージョン | 18.0 | Visual Studio 2026 |

### 依存関係管理

| 項目 | 要件 | 備考 |
| --- | --- | --- |
| NuGet ソース | 内部/外部フィード | NuGet.config |
| シンボルアップロード | 有効 | UsingToolSymbolUploader |
| パッケージ再パック | 有効 | UsingToolNuGetRepack |

## 運用・監視要件

### メトリクス収集

| メトリクス | 説明 | 根拠 |
| --- | --- | --- |
| adds | キャッシュ追加数 | CacheMetrics.adds |
| updates | キャッシュ更新数 | CacheMetrics.updates |
| hits | キャッシュヒット数 | CacheMetrics.hits |
| misses | キャッシュミス数 | CacheMetrics.misses |
| evictions | エビクション数 | CacheMetrics.evictions |
| eviction-fails | エビクション失敗数 | CacheMetrics.evictionFails |
| hit-ratio | ヒット率 | hits / (hits + misses) |

### アクティビティトレーシング

| 設定項目 | 値 | 備考 |
| --- | --- | --- |
| ソース名 | fsc | ActivityNames.FscSourceName |
| プロファイリングソース | fsc_with_env_stats | ActivityNames.ProfiledSourceName |
| CSV出力 | 対応 | CsvExport.addCsvFileListener |
| コンソール出力 | 対応 | Profiling.addConsoleListener |

### プロファイリングタグ

| タグ | 説明 |
| --- | --- |
| workingSet(MB) | ワーキングセットメモリ |
| gc0, gc1, gc2 | GC世代別コレクション回数 |
| handles | ハンドル数 |
| threads | スレッド数 |
| cpuDelta(s) | CPU時間差分 |
| realDelta(s) | 実時間差分 |

### CI/CD監視

| 項目 | 設定 | 備考 |
| --- | --- | --- |
| テレメトリ | 有効 | enableTelemetry: true |
| Helix統合 | dotnet/fsharp | helixRepo設定 |
| アーティファクト保持 | パイプラインアーティファクト | 1ES.PublishPipelineArtifact |
| シンボル公開 | NativeSymbols | SymStore出力 |

### ロギング設定

| 項目 | 設定 | 備考 |
| --- | --- | --- |
| テストログ | TestResults配下 | ビルド構成別に保存 |
| ビルドログ | artifacts/log配下 | continueOnError: trueで継続 |
| ダンプ収集 | Triage dump | DOTNET_DbgMiniDumpType: 3 |

## 備考

### 環境変数一覧

| 変数名 | 用途 | 設定例 |
| --- | --- | --- |
| FSHARP_CACHE_OVERRIDE | キャッシュサイズ上書き | 256 |
| FSharp_CacheEvictionImmediate | 即時エビクション強制 | 任意の値 |
| NativeToolsOnMachine | ネイティブツール使用 | true |
| DOTNET_DbgEnableMiniDump | ミニダンプ有効化 | 1 |
| DOTNET_DbgMiniDumpType | ダンプタイプ | 3（Triage） |

### ベンチマーク基盤

本プロジェクトにはBenchmarkDotNetを使用した性能計測基盤が整備されています。

- CompilerServiceBenchmarks: コンパイラサービスの性能計測
- MicroPerf: コンパイル済みコードの性能計測
- FCSSourceFiles: FCSソースファイルの処理性能計測
- BenchmarkComparison: バージョン間の性能比較

ベンチマーク結果はJSON/CSV/HTML形式で出力され、継続的な性能監視に活用されています。
