jpskill.com
🛠️ 開発・MCP コミュニティ

dotnet-local-tools

開発環境やCI/CDパイプラインで一貫したツール利用を実現するため、dotnet-tools.jsonを使ってローカルな.NETツールを管理し、プロジェクトごとに必要なツールを簡単に導入・管理するSkill。

📜 元の英語説明(参考)

Managing local .NET tools with dotnet-tools.json for consistent tooling across development environments and CI/CD pipelines.

🇯🇵 日本人クリエイター向け解説

一言でいうと

開発環境やCI/CDパイプラインで一貫したツール利用を実現するため、dotnet-tools.jsonを使ってローカルな.NETツールを管理し、プロジェクトごとに必要なツールを簡単に導入・管理するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o dotnet-local-tools.zip https://jpskill.com/download/8708.zip && unzip -o dotnet-local-tools.zip && rm dotnet-local-tools.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/8708.zip -OutFile "$d\dotnet-local-tools.zip"; Expand-Archive "$d\dotnet-local-tools.zip" -DestinationPath $d -Force; ri "$d\dotnet-local-tools.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して dotnet-local-tools.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → dotnet-local-tools フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

.NET ローカルツール

この Skill を使用する場面

この Skill は、以下のような場合に使用します。

  • 開発チーム全体で一貫したツール設定を行う場合
  • CI/CD パイプラインがローカル開発と同じツールバージョンを使用するようにする場合
  • プロジェクト固有の CLI ツール(docfx、incrementalist、dotnet-ef など)を管理する場合
  • プロジェクト間のグローバルツールバージョン競合を回避する場合

ローカルツールとは?

ローカルツールは、グローバルではなくリポジトリごとにインストールおよびバージョン管理される .NET CLI ツールです。これらは .config/dotnet-tools.json で定義され、dotnet tool restore で復元されます。

ローカルツール vs グローバルツール

側面 グローバルツール ローカルツール
インストール dotnet tool install -g dotnet tool restore
スコープ マシン全体 リポジトリごと
バージョン管理 手動 .config/dotnet-tools.json
CI/CD 各ツールをインストールする必要がある 単一の restore コマンド
競合 バージョン競合が発生する可能性がある プロジェクトごとに分離

ローカルツールのセットアップ

マニフェストの初期化

# .config/dotnet-tools.json を作成
dotnet new tool-manifest

これにより、以下が作成されます。

.config/
└── dotnet-tools.json

ローカルへのツールのインストール

# ローカルにツールをインストール
dotnet tool install docfx

# 特定のバージョンをインストール
dotnet tool install docfx --version 2.78.3

# 特定のソースからインストール
dotnet tool install MyTool --add-source https://mycompany.pkgs.visualstudio.com/_packaging/feed/nuget/v3/index.json

ツールの復元

# マニフェストからすべてのツールを復元
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 ドキュメントジェネレーター
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 - 変更されたプロジェクトのみをビルド
dotnet tool install incrementalist.cmd
"incrementalist.cmd": {
  "version": "1.2.0",
  "commands": ["incrementalist"],
  "rollForward": false
}

使用法:

# main ブランチ以降の変更によって影響を受けるプロジェクトを取得
incrementalist --branch main

コードフォーマット

# CSharpier - 独断的な C# フォーマッター
dotnet tool install csharpier
"csharpier": {
  "version": "0.30.3",
  "commands": ["dotnet-csharpier"],
  "rollForward": false
}

使用法:

dotnet csharpier .
dotnet csharpier --check .  # CI モード - 変更が必要な場合に失敗

コード分析

# JB dotnet-inspect (ライセンスが必要)
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: '.NET ツールの復元'

  - script: dotnet build -c Release
    displayName: 'ビルド'

  - script: dotnet test -c Release --collect:"XPlat Code Coverage"
    displayName: 'テスト'

  - script: dotnet reportgenerator -reports:**/coverage.cobertura.xml -targetdir:$(Build.ArtifactStagingDirectory)/coverage
    displayName: 'カバレッジレポートの生成'

ツールバージョンの管理

ツールの更新

# 最新バージョンに更新
dotnet tool update docfx

# 特定のバージョンに更新
dotnet tool update docfx --version 2.79.0

インストールされているツールの一覧表示

# ローカルツールの一覧表示
dotnet tool list

# 古いバージョンのチェック付きで一覧表示
dotnet tool list --outdated

ツールの削除

dotnet tool u
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

.NET Local Tools

When to Use This Skill

Use this skill when:

  • Setting up consistent tooling across a development team
  • Ensuring CI/CD pipelines use the same tool versions as local development
  • Managing project-specific CLI tools (docfx, incrementalist, dotnet-ef, etc.)
  • Avoiding global tool version conflicts between projects

What Are Local Tools?

Local tools are .NET CLI tools that are installed and versioned per-repository rather than globally. They're defined in .config/dotnet-tools.json and restored with dotnet tool restore.

Local vs Global Tools

Aspect Global Tools Local Tools
Installation dotnet tool install -g dotnet tool restore
Scope Machine-wide Per-repository
Version control Manual In .config/dotnet-tools.json
CI/CD Must install each tool Single restore command
Conflicts Can have version conflicts Isolated per project

Setting Up Local Tools

Initialize the Manifest

# Create .config/dotnet-tools.json
dotnet new tool-manifest

This creates:

.config/
└── dotnet-tools.json

Install Tools Locally

# 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 Tools

# Restore all tools from manifest
dotnet tool restore

dotnet-tools.json Format

{
  "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
    }
  }
}

Fields

Field Description
version Manifest schema version (always 1)
isRoot Marks this as the root manifest (prevents searching parent directories)
tools Dictionary of tool configurations
tools.<name>.version Exact version to install
tools.<name>.commands CLI commands the tool provides
tools.<name>.rollForward Allow newer versions (usually false for reproducibility)

Common Tools

Documentation

# DocFX - API documentation generator
dotnet tool install docfx
"docfx": {
  "version": "2.78.3",
  "commands": ["docfx"],
  "rollForward": false
}

Usage:

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
}

Usage:

dotnet ef migrations add InitialCreate
dotnet ef database update

Code Coverage

# ReportGenerator for coverage reports
dotnet tool install dotnet-reportgenerator-globaltool
"dotnet-reportgenerator-globaltool": {
  "version": "5.4.1",
  "commands": ["reportgenerator"],
  "rollForward": false
}

Usage:

dotnet reportgenerator -reports:coverage.cobertura.xml -targetdir:coveragereport -reporttypes:Html

Incremental Builds

# Incrementalist - build only changed projects
dotnet tool install incrementalist.cmd
"incrementalist.cmd": {
  "version": "1.2.0",
  "commands": ["incrementalist"],
  "rollForward": false
}

Usage:

# Get projects affected by changes since main branch
incrementalist --branch main

Code Formatting

# CSharpier - opinionated C# formatter
dotnet tool install csharpier
"csharpier": {
  "version": "0.30.3",
  "commands": ["dotnet-csharpier"],
  "rollForward": false
}

Usage:

dotnet csharpier .
dotnet csharpier --check .  # CI mode - fails if changes needed

Code Analysis

# JB dotnet-inspect (requires license)
dotnet tool install jb
"jb": {
  "version": "2024.3.4",
  "commands": ["jb"],
  "rollForward": false
}

CI/CD Integration

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'

Managing Tool Versions

Update a Tool

# Update to latest version
dotnet tool update docfx

# Update to specific version
dotnet tool update docfx --version 2.79.0

List Installed Tools

# List local tools
dotnet tool list

# List with outdated check
dotnet tool list --outdated

Remove a Tool

dotnet tool uninstall docfx

Best Practices

1. Always Set isRoot: true

Prevents MSBuild from searching parent directories for tool manifests:

{
  "version": 1,
  "isRoot": true,
  ...
}

2. Pin Exact Versions

Use "rollForward": false for reproducible builds:

"docfx": {
  "version": "2.78.3",
  "rollForward": false
}

3. Restore in CI Before Use

Always run dotnet tool restore before using any local tool:

- run: dotnet tool restore
- run: dotnet docfx docs/docfx.json

4. Document Tool Requirements

Add a comment or section in README:

## Development Setup

1. Restore tools: `dotnet tool restore`
2. Build: `dotnet build`
3. Test: `dotnet test`

5. Use Dependabot for Updates

# .github/dependabot.yml
version: 2
updates:
  - package-ecosystem: "nuget"
    directory: "/"
    schedule:
      interval: "weekly"
    # Includes local tools in .config/dotnet-tools.json

Troubleshooting

Tool Not Found After Restore

Ensure you're running from the repository root:

# Wrong - running from subdirectory
cd src/MyApp
dotnet docfx  # Error: tool not found

# Correct - run from solution root
cd ../..
dotnet docfx docs/docfx.json

Version Conflicts

If you see version conflicts, check for:

  1. Global tool with different version: dotnet tool list -g
  2. Multiple tool manifests: Look for .config/dotnet-tools.json in parent directories

Clearing Tool Cache

# Clear NuGet tool cache
dotnet nuget locals all --clear

# Re-restore tools
dotnet tool restore

Example: Complete Development Setup

{
  "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
    }
  }
}

Development workflow:

# 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