mcpField
D
dotnet-local-tools

dotnet-local-tools

github.com/aaronontheweb開発1.2k537 回インストール今日更新
リポジトリ

dotnet-local-tools について

.NET チーム向けに、リポジトリ単位で CLI ツールとバージョンを管理する方法を解説するスキルです。マニフェストでツールを固定し、ローカル開発と CI/CD の一貫性を保ちながら、グローバルツールの競合を避けます。

主な機能

  1. 01リポジトリ単位のツール復元
  2. 02マニフェストによるバージョン固定
  3. 03ドキュメント・移行・整形ツールの例
  4. 04CI/CD 設定例
  5. 05ツール更新とトラブルシューティング

活用シーン

  1. 01チーム内の開発ツールを統一
  2. 02CI/CD でプロジェクトツールを復元
  3. 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 -gdotnet 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
バージョンの競合

バージョンの競合が発生した場合は、次を確認してください。

  1. バージョンが異なるグローバルツール:dotnet tool list -g
  2. 複数のツールマニフェスト:親ディレクトリに .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

コメント