dotnet-local-tools について
.NET チーム向けに、リポジトリ単位で CLI ツールとバージョンを管理する方法を解説するスキルです。マニフェストでツールを固定し、ローカル開発と CI/CD の一貫性を保ちながら、グローバルツールの競合を避けます。
主な機能
- 01リポジトリ単位のツール復元
- 02マニフェストによるバージョン固定
- 03ドキュメント・移行・整形ツールの例
- 04CI/CD 設定例
- 05ツール更新とトラブルシューティング
活用シーン
- 01チーム内の開発ツールを統一
- 02CI/CD でプロジェクトツールを復元
- 03プロジェクト間のグローバルツール競合を回避
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ aaronontheweb/ dotnet-skills --skill dotnet-local-toolsインストール後、Claude Code で/dotnet-local-toolsを入力して読み込まれたか確認します。
詳細
.NET ローカルツール
このスキルを使用する場面
次のような場合に、このスキルを使用します。
- 開発チーム全体で一貫したツールをセットアップする
- CI/CD パイプラインで、ローカル開発と同じツールバージョンを使用する
- プロジェクト固有の CLI ツール(docfx、incrementalist、dotnet-ef など)を管理する
- プロジェクト間でグローバルツールのバージョンが競合するのを避ける
ローカルツールとは?
ローカルツールは、グローバルではなくリポジトリごとにインストールされ、バージョン管理される .NET CLI ツールです。.config/dotnet-tools.json で定義し、dotnet tool restore で復元します。
ローカルツールとグローバルツールの比較
| 項目 | グローバルツール | ローカルツール |
|---|---|---|
| インストール | dotnet tool install -g | dotnet tool restore |
| 適用範囲 | マシン全体 | リポジトリごと |
| バージョン管理 | 手動 | .config/dotnet-tools.json で管理 |
| CI/CD | ツールごとにインストールが必要 | 1 つの復元コマンドで対応 |
| 競合 | バージョンが競合することがある | プロジェクトごとに分離 |
ローカルツールのセットアップ
マニフェストを初期化する
# Create .config/dotnet-tools.json
dotnet new tool-manifest
次のファイルが作成されます。
.config/
└── dotnet-tools.json
ツールをローカルにインストールする
# Install a tool locally
dotnet tool install docfx
# Install specific version
dotnet tool install docfx --version 2.78.3
# Install from a specific source
dotnet tool install MyTool --add-source https://mycompany.pkgs.visualstudio.com/_packaging/feed/nuget/v3/index.json
ツールを復元する
# Restore all tools from manifest
dotnet tool restore
dotnet-tools.json の形式
{
"version": 1,
"isRoot": true,
"tools": {
"docfx": {
"version": "2.78.3",
"commands": [
"docfx"
],
"rollForward": false
},
"dotnet-ef": {
"version": "9.0.0",
"commands": [
"dotnet-ef"
],
"rollForward": false
},
"incrementalist.cmd": {
"version": "1.2.0",
"commands": [
"incrementalist"
],
"rollForward": false
},
"dotnet-reportgenerator-globaltool": {
"version": "5.4.1",
"commands": [
"reportgenerator"
],
"rollForward": false
}
}
}
フィールド
| フィールド | 説明 |
|---|---|
version | マニフェストのスキーマバージョン(常に 1) |
isRoot | これをルートマニフェストとして指定します(親ディレクトリの検索を防ぎます) |
tools | ツール設定の辞書 |
tools.<name>.version | インストールする正確なバージョン |
tools.<name>.commands | ツールが提供する CLI コマンド |
tools.<name>.rollForward | より新しいバージョンを許可します(再現性のため、通常は false) |
一般的なツール
ドキュメント
# DocFX - API documentation generator
dotnet tool install docfx
"docfx": {
"version": "2.78.3",
"commands": ["docfx"],
"rollForward": false
}
使用方法:
dotnet docfx docfx.json
dotnet docfx serve _site
Entity Framework Core
# EF Core CLI for migrations
dotnet tool install dotnet-ef
"dotnet-ef": {
"version": "9.0.0",
"commands": ["dotnet-ef"],
"rollForward": false
}
使用方法:
dotnet ef migrations add InitialCreate
dotnet ef database update
コードカバレッジ
# ReportGenerator for coverage reports
dotnet tool install dotnet-reportgenerator-globaltool
"dotnet-reportgenerator-globaltool": {
"version": "5.4.1",
"commands": ["reportgenerator"],
"rollForward": false
}
使用方法:
dotnet reportgenerator -reports:coverage.cobertura.xml -targetdir:coveragereport -reporttypes:Html
インクリメンタルビルド
# Incrementalist - build only changed projects
dotnet tool install incrementalist.cmd
"incrementalist.cmd": {
"version": "1.2.0",
"commands": ["incrementalist"],
"rollForward": false
}
使用方法:
# Get projects affected by changes since main branch
incrementalist --branch main
コードフォーマット
# CSharpier - opinionated C# formatter
dotnet tool install csharpier
"csharpier": {
"version": "0.30.3",
"commands": ["dotnet-csharpier"],
"rollForward": false
}
使用方法:
dotnet csharpier .
dotnet csharpier --check . # CI mode - fails if changes needed
コード分析
# JB dotnet-inspect (requires license)
dotnet tool install jb
"jb": {
"version": "2024.3.4",
"commands": ["jb"],
"rollForward": false
}
CI/CD との統合
GitHub Actions
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
- name: Restore tools
run: dotnet tool restore
- name: Build
run: dotnet build
- name: Test with coverage
run: dotnet test --collect:"XPlat Code Coverage"
- name: Generate coverage report
run: dotnet reportgenerator -reports:**/coverage.cobertura.xml -targetdir:coveragereport
- name: Build documentation
run: dotnet docfx docs/docfx.json
Azure Pipelines
steps:
- task: UseDotNet@2
inputs:
useGlobalJson: true
- script: dotnet tool restore
displayName: 'Restore .NET tools'
- script: dotnet build -c Release
displayName: 'Build'
- script: dotnet test -c Release --collect:"XPlat Code Coverage"
displayName: 'Test'
- script: dotnet reportgenerator -reports:**/coverage.cobertura.xml -targetdir:$(Build.ArtifactStagingDirectory)/coverage
displayName: 'Generate coverage report'
ツールのバージョン管理
ツールを更新する
# Update to latest version
dotnet tool update docfx
# Update to specific version
dotnet tool update docfx --version 2.79.0
インストール済みのツールを一覧表示する
# List local tools
dotnet tool list
# List with outdated check
dotnet tool list --outdated
ツールを削除する
dotnet tool uninstall docfx
ベストプラクティス
1. isRoot: true を必ず設定する
MSBuild が親ディレクトリのツールマニフェストを検索するのを防ぎます。
{
"version": 1,
"isRoot": true,
...
}
2. 正確なバージョンを固定する
再現可能なビルドには "rollForward": false を使用します。
"docfx": {
"version": "2.78.3",
"rollForward": false
}
3. CI では使用前に復元する
ローカルツールを使用する前に、必ず dotnet tool restore を実行します。
- run: dotnet tool restore
- run: dotnet docfx docs/docfx.json
4. ツールの要件を記載する
README にコメントまたはセクションを追加します。
## Development Setup
1. Restore tools: `dotnet tool restore`
2. Build: `dotnet build`
3. Test: `dotnet test`
5. 更新には Dependabot を使用する
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: "weekly"
# Includes local tools in .config/dotnet-tools.json
トラブルシューティング
復元後にツールが見つからない
リポジトリのルートから実行していることを確認してください。
# Wrong - running from subdirectory
cd src/MyApp
dotnet docfx # Error: tool not found
# Correct - run from solution root
cd ../..
dotnet docfx docs/docfx.json
バージョンの競合
バージョンの競合が発生した場合は、次を確認してください。
- バージョンが異なるグローバルツール:
dotnet tool list -g - 複数のツールマニフェスト:親ディレクトリに
.config/dotnet-tools.jsonがないか確認します
ツールキャッシュを消去する
# Clear NuGet tool cache
dotnet nuget locals all --clear
# Re-restore tools
dotnet tool restore
例:開発環境の完全なセットアップ
{
"version": 1,
"isRoot": true,
"tools": {
"docfx": {
"version": "2.78.3",
"commands": ["docfx"],
"rollForward": false
},
"dotnet-ef": {
"version": "9.0.0",
"commands": ["dotnet-ef"],
"rollForward": false
},
"dotnet-reportgenerator-globaltool": {
"version": "5.4.1",
"commands": ["reportgenerator"],
"rollForward": false
},
"csharpier": {
"version": "0.30.3",
"commands": ["dotnet-csharpier"],
"rollForward": false
},
"incrementalist.cmd": {
"version": "1.2.0",
"commands": ["incrementalist"],
"rollForward": false
}
}
}
開発ワークフロー:
# Initial setup
dotnet tool restore
# Format code before commit
dotnet csharpier .
# Run tests with coverage
dotnet test --collect:"XPlat Code Coverage"
dotnet reportgenerator -reports:**/coverage.cobertura.xml -targetdir:coverage
# Build documentation
dotnet docfx docs/docfx.json
# Check which projects changed (for large repos)
incrementalist --branch main
コメント
Markdown 対応