Azure Pipelinesを中心とした連携で、品質管理などの機能を実装しよう
Azureのクラウド環境でDevOpsを実現する「Azure DevOps」入門 第7回
前回の記事では、Azure ArtifactsとAzure Pipelinesを連携させコードコミットからパッケージ公開までの自動化されたCI/CDワークフローを構築しました。今回は、この基盤をさらに発展させていきます。具体的には、高度な品質管理機能の追加、Azure Boardsとの連携によるトレーサビリティの確保、古いパッケージの自動クリーンアップなど、実際の開発現場で必要となる機能を実装していきます。
対象読者
- 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のワークフローを実行すると、各タスクで以下の図のログが出力されます。
図の例ではどのタスクのチェックでも問題は検出されませんでした。今後はコードを修正していくたびにこれらのタスクの結果を確認することで、コードの品質チェックを継続的に実施できます。
この記事は参考になりましたか?
- Azureのクラウド環境でDevOpsを実現する「Azure DevOps」入門連載記事一覧
-
- Azure Test Plansでテスト管理を始めよう
- Azure Pipelinesを中心とした連携で、品質管理などの機能を実装しよう
- 「Azure Artifacts」とDevOpsサービス連携による効率的な開発環境構築
- この記事の著者
-
WINGSプロジェクト 秋葉 龍一(アキバ リュウイチ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
