対象読者
- Microsoft Azureや他のクラウドサービスを利用している方
- アジャイル開発を行っている方
- DevOpsの一通りの流れを理解したい方
- パッケージ管理を中心とした開発環境の最適化に興味がある開発チーム
高度な品質管理機能の追加
Azure Artifactsの品質を担保するため、より高度な検証機能を追加します。パッケージ公開前に、コード品質分析、脆弱性チェック、メタデータ検証を実施することで、高品質なパッケージのみを配信できるようにします。
ビルドステージへのタスクの追加
前回作成したAzure Pipelinesのワークフロー定義ファイルである「azure-pipelines.yml」を編集していきます。Buildステージのビルド実行タスク(DotNetCoreCLI@2)の後に、3つのタスクを追加します。
# (1).NETコード品質分析
- task: DotNetCoreCLI@2
displayName: '.NETコード品質分析'
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration) /p:EnableNETAnalyzers=true /p:AnalysisLevel=latest /p:TreatWarningsAsErrors=true'
# (2)依存関係脆弱性チェック
- task: dependency-check-build-task@6
displayName: '依存関係脆弱性チェック'
inputs:
projectName: 'Wings.MathLibrary'
scanPath: '.' # スキャン対象パス
format: 'ALL' # すべての形式でレポート生成
# (3)パッケージメタデータ検証
- task: PowerShell@2
displayName: 'パッケージメタデータ検証'
inputs:
targetType: 'inline'
script: |
# 必須メタデータの存在確認
$csprojPath = "Wings.MathLibrary/Wings.MathLibrary.csproj"
$content = Get-Content $csprojPath -Raw
# NuGetパッケージに必須の情報をチェック
$requiredElements = @('PackageId', 'Version', 'Authors', 'Description')
foreach ($element in $requiredElements) {
if ($content -notmatch "<$element>") {
Write-Error "必須メタデータ '$element' が見つかりません"
exit 1
}
}
Write-Host "パッケージメタデータ検証完了"
(1).NETコード品質分析
.NET標準のコードアナライザー(Roslyn Analyzers)を使用して、コード品質とセキュリティの静的解析を実行します。「EnableNETAnalyzers=true」でアナライザーを有効化し、「AnalysisLevel=latest」で最新の分析ルールセットを適用します。「TreatWarningsAsErrors=true」により、警告をエラーとして扱い、品質基準を厳格に保ちます。
この方法は追加のサービス登録やトークン設定が不要で、.NET SDKに標準搭載されているため、すぐに利用開始できます。これにより潜在的なバグ、パフォーマンス問題、セキュリティ脆弱性などを検出できます。
なお、より高度なコード品質分析が必要な場合は、SonarQube Cloudなどの外部に品質分析サービスを利用することも可能です。これらのサービスでは、より詳細なメトリクス収集、品質ゲートの設定、技術的負債の可視化、チーム全体でのコード品質の追跡などが可能になります。
ただし、外部サービスを利用する場合は、サービスへの登録、プロジェクトの作成、Azure DevOpsとのサービスコネクション設定などの事前準備が必要です。
(2)依存関係の脆弱性チェック
dependency-check-build-taskは、プロジェクトが使用するNuGetパッケージに既知の脆弱性(CVE)が含まれていないかをチェックします。National Vulnerability Database(NVD)と照合し、リスクを事前に検出します。
(3)パッケージメタデータの検証
NuGetパッケージとして公開するために必要な情報(PackageId、Version、Authors、Description)が適切に設定されているかを検証します。これにより、不完全なパッケージの公開を防ぎます。
このコードを追加後、Azure Pipelinesのワークフローを実行すると、各タスクで以下の図のログが出力されます。
図の例ではどのタスクのチェックでも問題は検出されませんでした。今後はコードを修正していくたびにこれらのタスクの結果を確認することで、コードの品質チェックを継続的に実施できます。
