【Minimal API】チュートリアルでSwashbuckleのインストールに失敗する

プログラミング

はじめに

Minimal APIのチュートリアルはとても丁寧で、スムーズに進めることができるなーと思っていたところ、チュートリアル通りに進めてもSwashbuckleのインストールに失敗してしまう…といったことがありました。本記事ではチュートリアルのはじめからSwashbuckleのインストールからSwaggerの動作確認まで、順番に消化していきます。チュートリアルは以下の2つがありますが、前者の方はシナリオがあったり、カード形式で段階を踏んで実施でき、取っつきやすい雰囲気だったので、前者で実施しました。

最小 API、Entity Framework Core、および ASP.NET Core でデータベースを使用する - Training
最小 API アプリケーションにデータベースを追加する方法について説明します。
チュートリアル: ASP.NET Core を使って最小 API を作成する
ASP.NET Core を使用して最小 API を構築する方法を説明します。

プロジェクト作成

まず、.NETのインストールは完了している前提で、プロジェクトを作成していきます。

dotnet new web -o PizzaStore -f net8.0

ビルダー確認

プロジェクトを作成した時点で、Program.csのコードは以下のようになっていると思います。この状態で、dotnet runしてローカルサーバーにアクセスすると、Hello world!という文字列が返ってくるはずです。

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

自己文書化

ここでインストールが推奨されているSwaggerですが、これはOpenAPI仕様に基づくオープンソースのツールセットで、APIの設計・構築・文書化・使用を支援するために使用されます。APIの利用者と提供者間のコミュニケーションを円滑にするもので、上手く導入できれば効率的に運用ができるといったシロモノです。

これをインストールしていきます。

dotnet add package Swashbuckle.AspNetCore
インストールが上手くいかない

ドキュメント通りに進めていたところ、

PS C:\Users\xxx\PizzaStore> dotnet add package Swashbuckle.AspNetCore --version 6.5.0
  復元対象のプロジェクトを決定しています...
  Writing C:\Users\xxx\AppData\Local\Temp\tmphesanb.tmp
info : X.509 certificate chain validation will use the default trust store selected by .NET for code signing.
info : X.509 certificate chain validation will use the default trust store selected by .NET for timestamping.
info : パッケージ 'Swashbuckle.AspNetCore' の PackageReference をプロジェクト 'C:\Users\xxx\PizzaStore\PizzaStore.csproj' に追加しています。
info : C:\Users\xxx\PizzaStore\PizzaStore.csproj のパッケージを復元して
います...
error: NU1100: 'net8.0' に対する 'Swashbuckle.AspNetCore (>= 6.5.0)' を解決できません。
error: パッケージ 'Swashbuckle.AspNetCore' はプロジェクト 'C:\Users\xxx\PizzaStore\PizzaStore.csproj' の 'all' フレームワークとの互換性がありません。

上記のようなエラーが出て、インストールができませんでした。.NETのバージョンを下げても変わらずで、しばらく悩みました。

原因

原因は、dotnet CLIのパッケージソースにnuget.orgが登録されていなかったためでした。

dotnet nuget add source コマンド - .NET CLI
dotnet nuget add source コマンドを使うと、NuGet 構成ファイルに新しいパッケージ ソースを追加できます。

コマンドとしては、以下を実行した後に、dotnet addすれば解決しました。

dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org

Program.cs追記

Swaggerのインストールができたら、Swaggerを使用するために、Program.csにコードを追記します。コード全体は以下です。

using PizzaStore.DB;
using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
     c.SwaggerDoc("v1", new OpenApiInfo { Title = "PizzaStore API", Description = "Making the Pizzas you love", Version = "v1" });
});

var app = builder.Build();

app.MapGet("/pizzas/{id}", (int id) => PizzaDB.GetPizza(id));
app.MapGet("/pizzas", () => PizzaDB.GetPizzas());
app.MapPost("/pizzas", (Pizza pizza) => PizzaDB.CreatePizza(pizza));
app.MapPut("/pizzas", (Pizza pizza) => PizzaDB.UpdatePizza(pizza));
app.MapDelete("/pizzas/{id}", (int id) => PizzaDB.RemovePizza(id));

if (app.Environment.IsDevelopment())
{
   app.UseSwagger();
   app.UseSwaggerUI(c =>
   {
      c.SwaggerEndpoint("/swagger/v1/swagger.json", "PizzaStore API V1");
   });
}

app.Run();

Swaggerの動作確認

dotnet runを実行し、立ち上がったローカルサーバーのURLの末尾に/swaggerを追加して、アクセスすると、以下のような画面になります。ここまで確認できればOKです。

コメント

タイトルとURLをコピーしました