Skip to content

Instantly share code, notes, and snippets.

@sheepla
Last active October 10, 2026 14:23
Show Gist options
  • Select an option

  • Save sheepla/dbdfb5a10f6d9afd3e9521ef6aaa45f0 to your computer and use it in GitHub Desktop.

Select an option

Save sheepla/dbdfb5a10f6d9afd3e9521ef6aaa45f0 to your computer and use it in GitHub Desktop.
ASP.NET CoreでVertical Slice ArchitectureのWebアプリを新しく作るやつ
#!/usr/bin/env dotnet
#:package ProcessX@1.5.6
using Cysharp.Diagnostics;
using Zx;
// -----------------------------------------------------
// Configuration
// -----------------------------------------------------
var appName = "VsaTemplate";
var authFeatureProjectName = $"{appName}.Features.Auth";
var usersFeatureProjectName = $"{appName}.Features.Users";
var authFeatureTestsProjectName = $"{appName}.Features.Auth.Tests";
var usersFeatureTestsProjectName = $"{appName}.Features.Users.Tests";
var dbProjectName = $"{appName}.Infrastructure.Database";
var identityProjectName = $"{appName}.Infrastructure.Identity";
var emailProjectName = $"{appName}.Infrastructure.Email";
var jobsProjectName = $"{appName}.Infrastructure.Jobs";
var aspireHostProjectName = $"{appName}.AppHost";
await $"dotnet tool install csharpier";
await $"dotnet tool install aspire.cli";
await "dotnet new globaljson";
await "dotnet new gitignore";
await "dotnet new tool-manifest";
await "dotnet new sln";
await $"dotnet new webapi -o src/{appName}";
await $"dotnet new aspire-apphost -o src/{aspireHostProjectName}";
await $"dotnet new classlib -o src/{authFeatureProjectName}";
await $"dotnet new classlib -o src/{usersFeatureProjectName}";
await $"dotnet new xunit -o tests/{usersFeatureTestsProjectName}";
await $"dotnet new xunit -o tests/{authFeatureTestsProjectName}";
await $"dotnet new classlib -o src/{dbProjectName}";
await $"dotnet new classlib -o src/{identityProjectName}";
await $"dotnet new classlib -o src/{emailProjectName}";
await $"dotnet new classlib -o src/{jobsProjectName}";
await $"dotnet sln add src/{authFeatureProjectName}";
await $"dotnet sln add src/{usersFeatureProjectName}";
await $"dotnet sln add src/{dbProjectName}";
await $"dotnet sln add src/{identityProjectName}";
await $"dotnet sln add src/{emailProjectName}";
await $"dotnet sln add src/{jobsProjectName}";
await $"dotnet add src/{appName} reference src/{authFeatureProjectName}";
await $"dotnet add src/{appName} reference src/{usersFeatureProjectName}";
await $"dotnet add src/{appName} reference src/{dbProjectName}";
await $"dotnet add src/{appName} reference src/{identityProjectName}";
await $"dotnet add src/{appName} reference src/{emailProjectName}";
await $"dotnet add src/{appName} reference src/{jobsProjectName}";
await $"dotnet add tests/{authFeatureTestsProjectName} reference src/{authFeatureProjectName}";
await $"dotnet add tests/{usersFeatureTestsProjectName} reference src/{usersFeatureProjectName}";
await $"dotnet add src/{appName} reference src/{aspireHostProjectName}";
foreach (
var package in new string[]
{
"Cortex.Mediator",
"AxisEndpoints",
"AxisEndpoints.Extensions.CsvHelper",
"Serilog",
"Serilog.Sinks.Console",
}
)
{
await $"dotnet add src/{appName} package {package}";
}
foreach (
var package in new string[]
{
"Microsoft.EntityFrameworkCore",
"NpgSql.EntityFrameworkCore.PostgreSQL",
}
)
{
await $"dotnet add src/{dbProjectName} package {package}";
}
foreach (
var package in new string[] { "FluentEmail.Core", "FluentEmail.Smtp", "FluentEmail.Razor" }
)
{
await $"dotnet add src/{dbProjectName} package {package}";
}
foreach (var package in new string[] { "Microsoft.AspNetCore.Identity" })
{
await $"dotnet add src/{identityProjectName} package {package}";
}
foreach (var package in new string[] { "TickerQ" })
{
await $"dotnet add src/{jobsProjectName} package {package}";
}
Directory.CreateDirectory(Path.Combine("src", appName, "Middlewares"));
Directory.CreateDirectory(Path.Combine("src", appName, "Behaviors"));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment