😺
Visual Studioで開発したWeb APIをWSL2で実行するための環境設定
概要
この記事では、ASP.NET CoreでWeb APIを開発するチュートリアルから、Postgresqlへの接続、DBの作成、WSL2での動作確認を行います。
参考になれば幸いです。
開発環境
- OS: Windows11
- WSL2: Ubuntu 22.04
- 開発環境: Visual Studio 2022
- 開発言語: .NET6 #C
- フレームワーク: ASP.NET Core
- RDBMS: Postgresql
全体のながれ
- チュートリアルを参考にTodoアプリを作成する。
- データベースをInMemoryからPostgreslqに変更する。
- EF Core(Entity Framework Core)で、データベースマイグレーションを行い、DBを自動生成する。
- Windows環境で動作確認を行う。
- WSL2のSSH設定を行い、WSL2でアプリケーションを実行できるようにする。
実装
アプリケーションを作成する。
- Microsoft公式のチュートリアルで提供されているアプリケーションをベースに実装を進めます。
- このチュートリアルでは、Windows環境での動作確認を行います。
データベースをInMemoryからPostgreslqに変更する。
Postgresqlに接続するために、接続情報の追加と、DBへの接続設定を追加します。
- appsettings.jsonにDBの接続情報を追加します。
- DBのユーザーはDB作成権限を持っているユーザーにする必要があります。
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
+ // DBの接続情報を追加する。
+ "ConnectionStrings": {
+ "Ef_Postgres_Db": "Server=localhost; Database=todoapp; Port=5432; User Id=postgres; Password=[任意のパスワード];"
+ }
}
- Program.csにDBの接続設定を変更します。
- GetConnectionStringに、上記で追加したDBへの接続情報を渡す。
Project.cs
using Microsoft.EntityFrameworkCore;
using System.Runtime.InteropServices;
using TodoApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
- builder.Services.AddDbContext<TodoContext>(opt =>
- opt.UseInMemoryDatabase("TodoList"));
+ builder.Services.AddDbContext<TodoContext>(opt =>
+ opt.UseNpgsql(builder.Configuration.GetConnectionString("Ef_Postgres_Db")));
builder.Services.AddEndpointsApiExplorer();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
- これで、Postgresqlへ接続できるようになりました。
パッケージマネージャーコンソールで、DBのマイグレーションファイルを作成し、DBを自動生成する。
Visual Studioのパッケージマネージャーコンソールでコマンド実行し、DBを生成します。
ここでは、Windows環境のpostgresqlにDBを生成するため、ローカル環境にpostgresqlがインストールされている必要があります。
- Add-Migrationでデータベールのマイグレーションファイルを作成する。
- ファイル名は内容が分かりやすいものにします。
- コマンドの詳細は公式ドキュメントを確認します。
Add-Migration InitialCreate
- Update-Databaseでマイグレーション内容を反映する。
- オプションの設定が無ければ、ローカル環境にDBが生成されます。
Update-Database
- 生成されたDBを確認する。
- Visual Studioの機能などで、DBが生成されModelの内容のテーブルが存在することを確認します。
- アプリケーションを実行し、Get APIでDBからデータが取得できていることを確認する。
※ここまででアプリケーションがWindowsで正常に動作することを確認する。
WSL2でアプリケーションを実行する。
Windowsで実行していたアプリケーションを、WSL2のUbuntuで実行できるよう設定を行い、Linux環境での動作確認を行います。
- launchSetting.jsonにWSL2での実行設定を追加する。
launchSetting.json
{
"profiles": {
"WSL2: Ubuntu": {
"commandName": "WSL2", // commandNameにWSL2を設定する。
"launchBrowser": true,
"launchUrl": "https://localhost:5270/api/todoitems", // WSL2の環境へはlocalhostでアクセスできます。
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "https://localhost:5270"
},
"distributionName": "Ubuntu"
}
}
}
- WSL2のSSH設定を行う。
- SSH設定を行い、PowerShell等でSSHアクセスできることを確認します。
- 設定方法は以下のブログなどを参考に設定しました。
- 実行できることを確認。
- ここでは、DBが無いのでエラーが出る。
WSL2にDBを自動生成する。
WSL2でアプリケーションが実行できるまで、確認できたら、最後にWSL2上のPostgresqlにデータベースを生成し、データベースに接続できることを確認します。設定しない状態だと、WSL2で実行しているアプリケーションが、Windows側のデータベースにアクセスしようとし、エラーになります。
- Visual StudioからWSL2のpostgresqlにアクセスできるようにする。
- WSL2でpostgresql.confファイルの"listen_addresses"を、"localhost"から"*"に編集し、どのIPアドレスからもアクセスできるようにする。
- 実際の運用環境では、アクセスできるIPアドレスは、任意のアドレスに固定することをお勧めします。
- postgresqlのインストール方法など以下を参考にしてください。
- WSL2でpostgresql.confファイルの"listen_addresses"を、"localhost"から"*"に編集し、どのIPアドレスからもアクセスできるようにする。
- アクセスできるようになったら、Update-Databaseでデータベースを自動生成します。
- ここでは、WSL2のIPアドレスを指定します。
Update-Database -Connection "Server=[WSL2のIPアドレス]; Database=todoapp; Port=5432; User Id=postgres; Password=postgres;"
- 生成されたDBを確認する。
- 再度動作確認を行う。
- APIが動作することを確認する。
- データベースが存在しないエラーが解消され、Windowsと同様に実行できれば環境構築は完了です。
おわりに
以上で、ASP.NET Core APIのアプリケーションをWSL2で実行できるようになりました。
WSL2で開発することで、WindowsマシンでもLinuxとの環境の差などを考慮しながらVisual Studioで開発できるようになり、効率化できると思います。
分かりにくい点や、間違っている点などあればコメントいただけると幸いです。
Discussion