Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】EF Core prototyping

2025年09月21日に「Dev.to」が公開したITニュース「EF Core prototyping」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

EF Coreプロトタイピングでは、データベース設計時にモックデータで機能検証し、ビジネス要件を満たすか確認する。コンソールアプリで開発を進め、ASP.NET Coreアプリへ簡単に移行できるため、効率的で一貫性のある開発手法となる。

出典: EF Core prototyping | Dev.to公開日:

ITニュース解説

データベースを設計する際、その構造が本当にビジネス上の要求を満たせるのかどうか、実際に試してみることは非常に重要だ。この試行錯誤のプロセスを「プロトタイピング」と呼ぶ。具体的には、開発段階のデータベースに仮のデータをたくさん入れて、データを読み込んだり(SELECT)、新しく追加したり(INSERT)、変更したり(UPDATE)、削除したり(DELETE)といった基本的な操作(これらを総称してCRUD操作と呼ぶ)を繰り返し行い、設計に不備がないか、スムーズに動作するかを確認する。

ここで使われている技術は「EF Core」と呼ばれるものだ。EF Coreは、C#のようなプログラミング言語を使って、データベースを直接操作するSQL文を書く代わりに、C#のオブジェクト(クラスのインスタンス)を操作するだけでデータベースのデータを扱えるようにする便利なツールだ。これはORM(Object-Relational Mapping)ツールの一種で、開発者はデータベースの細かい部分を意識せずに、アプリケーションのビジネスロジックに集中できるメリットがある。このニュース記事では、データベースとしてMicrosoft SQL Serverを使用している。

プロトタイピングは、まず「コンソールプロジェクト」というシンプルなアプリケーション形式で行うことが推奨されている。これは、本格的なWebアプリケーションを構築するASP.NET Coreプロジェクトよりも、手軽にデータベース操作のテストができるためだ。

コンソールプロジェクトでは、まずデータベースへの接続情報を設定する必要がある。これは通常、appsettings.jsonというファイルに記述する。このファイルは、データベースの接続文字列など、アプリケーションの設定情報を外部に切り出して管理するためのものだ。例えば、「どのサーバーの、どのデータベースに、どのような認証方法で接続するか」といった情報がこの接続文字列に含まれている。ニュース記事の例では、Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=BirthDaysDatabase;Integrated Security=True;Encrypt=Falseのような記述があり、これはローカルPCで動くSQL Serverの特定のデータベースに接続することを示している。

次に、この接続情報を利用してEF Coreのデータベースコンテキスト(DbContext)を設定するためのカスタムクラスProtoTypeContextを作成する。DbContextは、EF Coreにおいてデータベースとアプリケーションの橋渡しをする最も重要なクラスで、データベースのテーブルに対応するC#のオブジェクト(エンティティ)を管理し、それらの変更を追跡してデータベースに反映させる役割を担う。

ProtoTypeContextクラスは、DbContextOptionsというデータベース接続に関する詳細な設定を構築する機能を持っている。具体的には、UseSqlServerメソッドを使って、先ほどappsettings.jsonから読み込んだ接続文字列を指定し、SQL Serverへの接続方法を設定する。さらに、開発環境(CONSOLE_ENVIRONMENTという環境変数が"Development"の場合)では、EnableSensitiveDataLogging()という設定を有効にしている。これは、開発中にデータベース操作の詳細なログ(例えば、実行されたSQL文やパラメータの値など)を出力させるためのもので、デバッグや問題解決に非常に役立つ。しかし、本番環境ではセキュリティ上の理由から無効にしておくのが一般的だ。

このProtoTypeContextクラスを導入する利点は、依存性注入(DI)のような複雑な設定が不要なコンソールプロジェクトにおいて、一貫した方法でDbContextの設定を行える点にある。依存性注入とは、アプリケーションが必要とするオブジェクトやサービスを、手動で作成するのではなく、フレームワークが自動的に提供してくれる仕組みのことだ。ASP.NET Coreのような大規模なアプリケーションでは必須の技術だが、シンプルなコンソールプロジェクトではむしろ設定が煩雑になることがある。ProtoTypeContextを使うことで、そのような設定なしに、複数のプロトタイププロジェクトで同じデータベース設定を再利用できるようになる。

コンソールプロジェクトにEF Coreの機能を追加するには、「NuGetパッケージ」という形で必要なライブラリをインストールする必要がある。NuGetは、C#プロジェクトで利用できるライブラリを管理するシステムだ。EF Coreを使うための基本的なパッケージや、SQL Serverに接続するためのパッケージなどを追加する。

データベースの構造(スキーマ)を定義する方法としては、「Code First」と「Database First」の二つが主要だ。Code Firstは、C#のクラスでデータベースのテーブル構造を定義し、そのクラスをもとにEF Coreがデータベースのテーブルを作成する方法。Database Firstは、すでに存在するデータベースのテーブル構造からC#のクラスを自動生成する方法だ。プロトタイピングの段階では、どちらの方法でも構わないが、Code Firstはコードで直接構造を定義できるため、試行錯誤しやすいかもしれない。

そして、既存のDbContextクラス(例えばContextという名前のクラス)が、これまでは単にDbContextを継承していた部分を、新しく作成したProtoTypeContextを継承するように変更する。これにより、先ほどProtoTypeContextで定義した共通のデータベース接続設定や開発用ログ出力機能が、このContextクラスにも適用されることになる。

コンソールプロジェクトで十分な検証が行われ、データベースの設計やEF Coreの利用方法に自信が持てたら、次に本格的なASP.NET Coreプロジェクトへ移行する。コンソールプロジェクトとASP.NET Coreプロジェクトの間には、基本的なデータベース操作のコードに関して大きな違いはないため、スムーズに移行できる。

ASP.NET Coreプロジェクトでは、DbContextをアプリケーションの起動時に登録する方法が異なる。ここでは依存性注入の仕組みを使い、builder.Services.AddDbContext<Context>という記述でDbContextを登録する。これにより、アプリケーションの様々な部分でContextクラスが必要になった際に、ASP.NET Coreが自動的にそのインスタンス(実体)を提供してくれるようになる。接続文字列も、builder.Configuration.GetConnectionString("MainConnection")という方法でappsettings.jsonから安全に取得できる。

このプロトタイピングのアプローチを全てのプロジェクトで採用することで、データベース設計から実装、そして本格的なアプリケーションへの移行まで、一貫性のある作業フローを確立できる。各プロジェクトで異なる設定方法を用いるのではなく、共通のパターンに従うことで、開発効率が向上し、予期せぬ問題の発生を抑制することにも繋がる。これは、システム開発をスムーズに進めるための非常に効果的な方法と言える。