ボーナスチャレンジ¶
チャレンジ 2: Entity Framework Core でデータベース統合¶
難易度: 🔥🔥 上級
Info
静的な JSON データソースをリアルなデータベースに置き換えて、さらに発展させましょう。
このチャレンジでは、Entity Framework Core(EF Core)を使って静的 JSON ファイルを SQL Server または SQLite データベースに置き換え、C# の Weather API を強化します。データの永続化・マイグレーション・非同期データベース操作を実際に体験できる、現実に近いシナリオです。
学習目標¶
このチャレンジを完了することで、以下を習得できます:
- Entity Framework Core を ASP.NET Core Minimal API に統合する方法
- データベース操作を管理するためのデータモデルと DbContext の作成
- データベースマイグレーションとスキーマ管理の基礎
- データベースクエリへの async/await パターンの適用
- データリポジトリパターンへの依存性注入の活用
チャレンジのステップ¶
ステップ 1: Entity Framework Core のセットアップ
Agent モードで GitHub Copilot を使って:
- C# プロジェクトに Entity Framework Core の NuGet パッケージを追加する(例:
Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqliteまたはMicrosoft.EntityFrameworkCore.SqlServer) weather.jsonの構造をもとに適切なデータモデル(Country・Weather・City エンティティ)を作成するDbContextを継承してデータベーステーブルを定義するWeatherDbContextクラスを作成する
Tip
weather.json ファイルを分析して適切なエンティティモデルとリレーションを提案してもらうよう Copilot に依頼しましょう。
ステップ 2: データベースの設定とマイグレーションの作成
Agent モードで:
Program.csにデータベース接続を設定するdotnet ef migrations addを使って初回のデータベースマイグレーションを作成するdotnet ef database updateでデータベーススキーマを更新する
Important
Copilot が Program.cs を変更したりマイグレーションファイルを作成したりする際は、その操作をよく確認してください。生成されたマイグレーションコードを見て、どのようなスキーマ変更が適用されるかを理解しましょう。
ステップ 3: 初期データのシード
Agent モードで:
weather.jsonの気象データをデータベースに移入するシード処理を作成する- アプリケーション起動時にシードロジックを呼び出す
Note
既存の JSON ファイルからシードすることで、データベースに元の静的データと同じ情報が格納されます。
ステップ 4: エンドポイントをデータベースを使うように更新
Agent モードを使ってエンドポイントを更新する:
- エンドポイントハンドラーに
WeatherDbContextをインジェクトする - JSON ファイルの読み込みを EF Core のデータベースクエリに置き換える
- すべてのデータベース操作に async/await パターンを使う
- すべてのエンドポイントがこれまでと同じレスポンスを返すことを確認する
Success
エンドポイントを更新したら、Python テストを実行してデータベースバックエンドでも API が正しく動作することを確認しましょう。
ステップ 5: 検証とテスト
Python テストスイートを使って以下を検証する:
/エンドポイントが 200 を返す/countriesエンドポイントが正しい国リストを返す- weather エンドポイントが有効な国に対して正しいデータを返す
- 無効な国に対して 404 レスポンスが返る
これまでと同じ方法でテストを実行します:
cd src/python-app/webapp
pytest test_main.py -v
オプションの発展課題¶
- countries エンドポイントへのフィルタリングとページネーションの追加
- リレーション付きのより複雑なデータモデルの実装
- モック DbContext を使った xUnit の C# ユニットテストの作成
- インデックスを使ったクエリパフォーマンスの最適化