mcpField
D
dotnet-scaffold-project

dotnet-scaffold-project

github.com/wshaddix開発8672 回インストール35 週間前に更新
リポジトリ

dotnet-scaffold-project について

一般的なプロジェクトテンプレートと共有ビルド設定を使って、.NET ソリューションを作成するスキルです。開発者向けに初期設定、整理、検証を案内し、Central Package Management やアナライザーの設定も扱います。

主な機能

  1. 01ソリューションとプロジェクト構成の作成
  2. 02SDK 固定と共有ビルドプロパティの設定
  3. 03Central Package Management の設定
  4. 04エディターとパッケージソースの設定
  5. 05復元・ビルド・テストの検証

活用シーン

  1. 01ライブラリとテストを含む .NET Web API の開始
  2. 02コンソール、Worker、Blazor プロジェクトの作成
  3. 03ソリューション全体のビルド設定の統一

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wshaddix/dotnet-skills --skill dotnet-scaffold-project

インストール後、Claude Code で/dotnet-scaffold-projectを入力して読み込まれたか確認します。

詳細

dotnet-scaffold-project

最新のベストプラクティスをすべて適用した新しい .NET プロジェクトをスキャフォールディングします。Central Package Management、アナライザー、.editorconfig、SourceLink、決定的ビルドを含むソリューション構造全体を生成します。

前提条件: 使用可能な SDK バージョンを確認するため、最初に [skill:dotnet-version-detection] を実行してください。利用できる機能やテンプレートは、この結果によって異なります。

関連項目:レイアウトの根拠については [skill:dotnet-project-structure]、アナライザーの構成については [skill:dotnet-add-analyzers]、スキャフォールディング後に CI を追加する方法については [skill:dotnet-add-ci] を参照してください。


ステップ 1:ソリューション構造を作成する

ディレクトリ構成とソリューションファイルを作成します。

# Create the directory structure
mkdir -p MyApp/src MyApp/tests

# Create solution file
cd MyApp
dotnet new sln -n MyApp

# For .NET 9+ SDK, convert to .slnx
dotnet sln MyApp.sln migrate
プロジェクトテンプレートを選択する

アプリケーションの種類に応じて、適切なテンプレートを選択します。

テンプレートコマンドSDK
Web API(最小構成)dotnet new webapi -n MyApp.Api -o src/MyApp.ApiMicrosoft.NET.Sdk.Web
Web API(コントローラー)dotnet new webapi -n MyApp.Api -o src/MyApp.Api --use-controllersMicrosoft.NET.Sdk.Web
コンソールアプリdotnet new console -n MyApp.Cli -o src/MyApp.CliMicrosoft.NET.Sdk
ワーカーサービスdotnet new worker -n MyApp.Worker -o src/MyApp.WorkerMicrosoft.NET.Sdk.Worker
クラスライブラリdotnet new classlib -n MyApp.Core -o src/MyApp.CoreMicrosoft.NET.Sdk
Blazor Web アプリdotnet new blazor -n MyApp.Web -o src/MyApp.WebMicrosoft.NET.Sdk.Web
MAUI アプリdotnet new maui -n MyApp.Mobile -o src/MyApp.MobileMicrosoft.Maui.Sdk
xUnit テストdotnet new xunit -n MyApp.Tests -o tests/MyApp.TestsMicrosoft.NET.Sdk
# Example: Web API with class library and tests
dotnet new classlib -n MyApp.Core -o src/MyApp.Core
dotnet new webapi -n MyApp.Api -o src/MyApp.Api
dotnet new xunit -n MyApp.UnitTests -o tests/MyApp.UnitTests

# Add projects to solution
dotnet sln add src/MyApp.Core/MyApp.Core.csproj
dotnet sln add src/MyApp.Api/MyApp.Api.csproj
dotnet sln add tests/MyApp.UnitTests/MyApp.UnitTests.csproj

# Add project references
dotnet add src/MyApp.Api/MyApp.Api.csproj reference src/MyApp.Core/MyApp.Core.csproj
dotnet add tests/MyApp.UnitTests/MyApp.UnitTests.csproj reference src/MyApp.Core/MyApp.Core.csproj

ステップ 2:global.json を追加する

再現可能なビルドのために、SDK バージョンを固定します。

{
  "sdk": {
    "version": "10.0.100",
    "rollForward": "latestPatch"
  }
}

バージョンは dotnet --version の出力に合わせて調整してください。


ステップ 3:Directory.Build.props を追加する

すべてのプロジェクトでビルド設定を共有できるよう、リポジトリのルートに作成します。

<Project>
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <LangVersion>14</LangVersion>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
    <AnalysisLevel>latest-all</AnalysisLevel>
  </PropertyGroup>

  
  <PropertyGroup>
    <PublishRepositoryUrl>true</PublishRepositoryUrl>
    <EmbedUntrackedSources>true</EmbedUntrackedSources>
    <DebugType>embedded</DebugType>
    <ContinuousIntegrationBuild Condition="'$(CI)' == 'true'">true</ContinuousIntegrationBuild>
  </PropertyGroup>

  
  <PropertyGroup>
    <NuGetAudit>true</NuGetAudit>
    <NuGetAuditLevel>low</NuGetAuditLevel>
    <NuGetAuditMode>all</NuGetAuditMode>
    <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
  </PropertyGroup>
</Project>

これを作成したら、重複を避けるため、個々の .csproj ファイルから <TargetFramework>、<Nullable>、<ImplicitUsings> を削除してください。

オプション:テスト用の props を分離する

<Project>
  <Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
  <PropertyGroup>
    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
    
    <UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>
    
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
  </PropertyGroup>
</Project>

ステップ 4:Directory.Build.targets を追加する

共有パッケージ参照(SourceLink、アナライザー)をすべてのプロジェクトに適用します。項目は、プロジェクトの評価後にインポートされるよう、.targets に記述します。

<Project>
  <ItemGroup>
    
    <PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="all" />
  </ItemGroup>
</Project>

組み込みの Roslyn アナライザーは、Directory.Build.props の AnalysisLevel プロパティと EnforceCodeStyleInBuild プロパティによってすでに有効になっています(ステップ 3)。サードパーティ製アナライザーを追加する場合は、[skill:dotnet-add-analyzers] を参照してください。


ステップ 5:Central Package Management を設定する

リポジトリのルートに Directory.Packages.props を作成します。

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
    <CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
  </PropertyGroup>
  <ItemGroup>
    
    <PackageVersion Include="Microsoft.SourceLink.GitHub" Version="9.0.0" />
  </ItemGroup>
  <ItemGroup>
    
    <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
    <PackageVersion Include="xunit.v3" Version="3.2.2" />
    <PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
    <PackageVersion Include="coverlet.collector" Version="8.0.0" />
  </ItemGroup>
</Project>

これを作成したら、.csproj ファイル内のすべての <PackageReference> 要素から Version 属性を削除してください。


ステップ 6:.editorconfig を追加する

リポジトリのルートに作成します。推奨設定の全体については、[skill:dotnet-project-structure] を参照してください。

最小限の構成例:

root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.{csproj,props,targets,xml,json,yml,yaml}]
indent_size = 2

[*.cs]
csharp_style_namespace_declarations = file_scoped:warning
csharp_prefer_braces = true:warning
dotnet_style_require_accessibility_modifiers = always:warning
dotnet_sort_system_directives_first = true
csharp_using_directive_placement = outside_namespace:warning

ステップ 7:nuget.config を追加する

サプライチェーンのセキュリティを考慮して、パッケージソースを設定します。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
  <packageSourceMapping>
    <packageSource key="nuget.org">
      <package pattern="*" />
    </packageSource>
  </packageSourceMapping>
</configuration>

ステップ 8:.gitignore を追加する

dotnet new gitignore

これにより、bin/、obj/、*.user などを対象とする、標準的な .NET の .gitignore が生成されます。


ステップ 9:生成されたプロジェクトを整理する

スキャフォールディング後、共有設定を適用します。

  1. 個々の .csproj ファイルから重複するプロパティを削除します(TargetFramework、Nullable、ImplicitUsings。これらは Directory.Build.props に記述されています)。
  2. PackageReference 要素からVersion 属性を削除します(CPM によって管理されます)。
  3. クラスライブラリからテンプレートが生成した Class1.cs を削除します。
  4. 生成されたすべての .cs ファイルでファイルスコープの名前空間を設定します。
整理済み csproj の例

変更前(テンプレートによる生成):

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
</Project>

変更後(共有 props および CPM を使用):

<Project Sdk="Microsoft.NET.Sdk">
</Project>

Microsoft.NET.Sdk.Web が必要な Web プロジェクトでは、csproj に SDK を指定したままにしますが、それ以外の設定はすべて継承されます。


ステップ 10:検証する

スキャフォールディングしたプロジェクトを検証するため、次のコマンドを実行します。

# Restore and verify lock files generated
dotnet restore
find . -name "packages.lock.json" -type f

# Build with all analyzers
dotnet build --no-restore

# Run tests
dotnet test --no-build

# Verify CPM is active (no Version attributes in project PackageReferences)
# Should only find versions in Directory.Packages.props, not in csproj files
find . -name "*.csproj" -exec grep -l 'Version=' {} \;  # expect no output

最終的な構成

MyApp/
├── .editorconfig
├── .gitignore
├── global.json
├── nuget.config
├── MyApp.slnx
├── Directory.Build.props
├── Directory.Build.targets
├── Directory.Packages.props
├── src/
│   ├── MyApp.Core/
│   │   └── MyApp.Core.csproj
│   └── MyApp.Api/
│       ├── MyApp.Api.csproj
│       ├── Program.cs
│       └── appsettings.json
└── tests/
    └── MyApp.UnitTests/
        ├── MyApp.UnitTests.csproj
        └── SampleTest.cs

参考資料

コメント