원클릭으로
dotnet-setup-dev-environment
dotnet CLI を軸に、再現可能な .NET 開発環境を安全に整えたいとき。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
dotnet CLI を軸に、再現可能な .NET 開発環境を安全に整えたいとき。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
こんなときに使う: Ubuntu / Linux サーバーに SSH で接続し、sudo、systemd サービス、HTTP 監視を一連で安全に進めたいとき。 接続前に SSH_AUTH_SOCK を含む認証状態を固定し、認証で止まらずに サーバー接続・権限確認・サービス起動・停止・再起動・状態確認を一気に行いたいとき。
調査→修正→検証→ふりかえり/後続 Issue 化までを 1 つの改善ループで回したいときに使う。 実装前の再現確認や、review 指摘・検証結果をもとに次のアクションへつなぐ。
こんなときに使う: 現在の会話内容をもとに、実装・エージェント発注に直結する PRD を作りたいとき。 追加のインタビューはせず、すでに会話に出ている内容だけから構成する。 情報が不足している場合は捏造せず「未確定」として明示する。
こんなときに使う: ユーザーが「インタビューして」「質問して」「設計を詰めたい」などと言ったら使う。 計画や設計の重要な判断軸を洗い出し、具体例・反例・影響範囲まで深掘りして要件整理に落とす。
Copilot の custom skill / agent / repository instructions の作成・改善・構造確認を 1 つの入口にまとめる。複合スキルとして、対象に応じて適切な authoring ルートへ 分けつつ、実行時のモデル呼び出しを抑止してルーティングを優先する。試作から `plugins/*` 配布へ昇格するときの name / description 整備も扱う。skill / agent / repo-wide instructions / path-specific instructions を新規作成したいとき、既存定義を育てたいとき、公開前に責務や導線を確かめたいとき。
新しい custom agent を既存 agent 群と同じ型で立ち上げる。agent の新規追加、役割分離のための専門 agent 作成、既存群の隙間を埋めたいとき。
| name | dotnet-setup-dev-environment |
| description | dotnet CLI を軸に、再現可能な .NET 開発環境を安全に整えたいとき。 |
dotnet CLI を入口にそろえ、SDK・プロジェクト構造・品質ゲートを再現可能な形で整える skill です。
「まず手でファイルを書く」のではなく、「まず CLI と build contract を置く」に寄せます。
.slnx 前提で立ち上げたいとき.csproj や solution を手書きせずに進めたいとき.NET Framework 4.x と .NET 5+ の共存有無を見極めたいときglobal.json、Directory.Build.props、.editorconfig を使って品質の型をそろえたいときdotnet build / dotnet test / dotnet format --verify-no-changes を完了条件にしたいとき既存の .NET repo から始める場合は、先に現状を確認します。
repo 全体がまだ読めていないなら、まず repo-onboarding で地図を作ってからここに戻ります。
dotnet --version
Test-Path global.json
Get-ChildItem -Recurse -Include *.sln, *.slnx, *.csproj
Get-ChildItem -Recurse -Filter *.csproj | Select-String 'TargetFramework|TargetFrameworks|<Project Sdk='
Test-Path Directory.Build.props
Test-Path Directory.Packages.props
Test-Path .editorconfig
Test-Path .config\dotnet-tools.json
dotnet restore
dotnet build --no-restore
判断の目安
global.json がある → 上書きせず、まず SDK を尊重する.sln がある → 変更は dotnet sln migrate を正規ルートにする.slnx がある → そのまま標準として扱うnet472 や netstandard2.0 が見える → dotnet-framework-netstandard-bridge を開く<Project Sdk= が無い project がある → SDK-style へ寄せる計画を先に考えるdotnet --list-sdks
dotnet new globaljson --sdk-version 9.0.312 --roll-forward latestFeature
dotnet --version
global.json があると、ローカルと CI で同じ SDK 系列を使いやすくなります。
roll-forward は完全固定ではなく、同系列の更新を安全に拾いたいときの逃げ道です。
既存 repo では、新しく作る前に既存の global.json を確認し、足りないときだけ追加します。
# New repo: .slnx を標準にする
dotnet new sln --name MySolution --format slnx
dotnet new classlib -n MyLibrary -o src\MyLibrary
dotnet new xunit -n MyLibrary.Tests -o tests\MyLibrary.Tests
dotnet sln MySolution.slnx add src\MyLibrary\MyLibrary.csproj
dotnet sln MySolution.slnx add tests\MyLibrary.Tests\MyLibrary.Tests.csproj
dotnet add tests\MyLibrary.Tests\MyLibrary.Tests.csproj reference src\MyLibrary\MyLibrary.csproj
# Existing .sln: 変更前に migrate する
dotnet sln MySolution.sln migrate
新しい solution は基本的に .slnx を標準にします。
既存の .sln を変更するときは、まず dotnet sln migrate を通してから進めます。
.csproj、.sln / .slnx、project reference は、対応する dotnet コマンドがあるなら CLI を優先します。
SDK の既定値、テンプレート更新、将来の互換性を CLI 側に任せるためです。
補足
.slnと.slnxを同じ場所に残すと CLI の自動検出が壊れやすくなります。
migrate 後は検証し、問題がなければ旧.slnを残さない運用を基本にします。
ただし、ツール互換性や業務上の制約がある場合は既存.slnを維持して構いません。
Directory.Build.props を repo root に置き、品質ゲートを project ごとに重複させないようにします。
単一の .NET 5+ / .NET 8+ 系 repo なら、まずは次のような最小構成で十分です。
<Project>
<PropertyGroup>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<AnalysisLevel>9.0-recommended</AnalysisLevel>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
</Project>
Nullable と TreatWarningsAsErrors が、雑な生成を通さない最小の柵です。
AnalysisLevel は latest のままにせず固定すると、SDK 更新で警告集合が急に変わりにくくなります。
netstandard2.0 や net472 を含む mixed TFM では、同じ設定を無条件で貼らないでください。
その場合は build contract も条件付きに寄せます。
<Project>
<PropertyGroup>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<LangVersion>12.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net5.0'))">
<Nullable>enable</Nullable>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<AnalysisLevel>9.0-recommended</AnalysisLevel>
</PropertyGroup>
</Project>
netstandard2.0 の共有層をどこに切るか、net472 をどう隔離するかは dotnet-framework-netstandard-bridge の責務です。
Step 0 で mixed TFM を検出したら、ここで深追いせず bridge skill に渡します。
Central Package Management を使う場合は、Directory.Packages.props を置きます。
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
</ItemGroup>
</Project>
local tool は manifest で固定します。
dotnet new tool-manifest
dotnet tool install dotnet-format
追加の analyzer や CLI を入れる場合も、まずは dotnet tool か PackageReference の正規ルートを使います。
既存 repo で Directory.Packages.props があるなら、新しく作らずにそこへ寄せます。
.editorconfig を build contract にするdotnet new editorconfig
.editorconfig は target repo 側の build contract であり、dotnet format --verify-no-changes の正本です。
共有テンプレートから万能な 1 枚を配るより、target repo で生成したものを最小差分で育てます。
dotnet new editorconfig を土台にし、repo root の .editorconfig を正本にする.editorconfig を消さず、dotnet format --verify-no-changes --verbosity diagnostic で診断してから差分を足すDirectory.Build.props: TreatWarningsAsErrors、AnalysisLevel、Nullable.editorconfig: formatting と rule severity の明示root = true
[*.cs]
dotnet_analyzer_diagnostic.category-Style.severity = warning
dotnet_analyzer_diagnostic.category-Design.severity = warning
dotnet_analyzer_diagnostic.category-Reliability.severity = warning
dotnet_analyzer_diagnostic.category-Performance.severity = warning
dotnet_diagnostic.CS8602.severity = error
dotnet_diagnostic.CS8604.severity = error
dotnet_diagnostic.CS8618.severity = error
最初から naming や doc comment の細則まで全部を強制しないほうが安全です。
まずは dotnet format --verify-no-changes と null 安全に直結する最小セットを gate にし、追加 analyzer の細則は repo ごとに増やします。
つまり、この skill は .editorconfig の考え方を示し、実ファイルの正本は target repo 側に持たせます。
dotnet restore
dotnet build --no-restore
dotnet format --verify-no-changes
dotnet test --no-build
この順序にそろえると、依存解決、コンパイル、整形差分、テスト失敗の切り分けがしやすくなります。
警告を見逃したくない repo では、Directory.Build.props 側で TreatWarningsAsErrors を有効にします。
既存コードベースでは、いきなり全部を厳格化しないほうが安全です。
.sln があるなら、まず dotnet sln migrate を検討するglobal.json を追加または確認するdotnet restore / dotnet build --no-restore で現状の成功ラインを確認するDirectory.Build.props を追加し、Nullable から寄せるTreatWarningsAsErrors.editorconfig があれば上書きせず、gate 用の差分を足して dotnet format --verify-no-changesDirectory.Packages.props と local tool manifestの順で寄せると、どこで破綻したかを追いやすくなります。
.csproj、.sln / .slnx、PackageReference を最初から手書きしない.slnx を使う.sln の変更は dotnet sln migrate を標準にし、.sln と .slnx を並べて残さないnet472 や netstandard2.0 が見えたら、modern .NET 単独前提で build contract を貼らないNoWarn や warning suppress は最後の手段にするDirectory.Build.props と Directory.Packages.props は repo root に置くglobal.json がある repo では、手元の新しい SDK に勝手に寄せないdotnetrepo-onboardingdotnet-framework-netstandard-bridgedotnet-modern-csharp-coding-standardsdotnet-slopwatchgit-commitQ: なぜ .csproj を手書きしないの?
A: SDK テンプレート、target framework、implicit usings、test project の既定値を CLI が正しく持っているからです。人が最初から書くより、dotnet new を起点にしたほうが再現性を保ちやすくなります。
Q: なぜ .slnx を標準にするの?
A: .slnx は XML ベースで差分を読みやすく、CLI でも扱えます。この skill では新規作成の標準として推します。既存 .sln を触るときは、まず dotnet sln migrate を通すのを正道とします。
Q: .sln を使い続けてはいけないの?
A: ツール互換性や業務上の事情で問題があるなら例外扱いにして構いません。ただし、標準は .slnx とし、理由がある場合だけ .sln を残します。
Q: AnalysisLevel は latest ではだめ?
A: latest は SDK 更新で実体が変わります。再現性を優先するなら、9.0-recommended のように固定して、上げるときだけ意図的に更新するほうが安全です。
Q: .NET Framework 4.x と .NET 5+ を一緒に扱うときは?
A: 共有が必要なら netstandard2.0 を基準にし、setup skill では mixed TFM を検出して dotnet-framework-netstandard-bridge に渡します。境界設計そのものは bridge skill の責務です。