【ITニュース解説】🐘 Building a To-do API in .NET with PostgreSQL (Beginner Friendly)
2025年10月01日に「Dev.to」が公開したITニュース「🐘 Building a To-do API in .NET with PostgreSQL (Beginner Friendly)」について初心者にもわかりやすく解説しています。
ITニュース概要
.NETで初心者向けにTo-do APIを構築する手順を解説する。PostgreSQLをデータベースに、Entity Framework Core (EF Core) を使って接続。タスクの追加・取得機能を備えたAPIをゼロから開発し、必要な設定、モデル定義、エンドポイント実装、データベース連携の基礎を学ぶ。
ITニュース解説
本記事は、初心者向けに.NET環境でPostgreSQLデータベースと連携するToDo APIの構築手順を解説している。Webアプリケーション開発において、データの永続化は不可欠であり、データベースとの接続はその基礎となる。本プロジェクトでは、Microsoftが提供するソフトウェア開発プラットフォームである.NET、高機能なオープンソースのリレーショナルデータベースであるPostgreSQL、そして両者をつなぐEntity Framework Core (EF Core) を用いて、簡単なToDo管理APIを開発する。EF Coreは、C#のオブジェクトをデータベースのレコードに、クラスをテーブルにマッピングし、データベース操作を抽象化する役割を担う。
開発を始めるにあたり、いくつかの準備が必要となる。まず、ソフトウェア開発の基盤となる.NET SDKをインストールしておく。次に、データを格納するためのデータベースとしてPostgreSQLをインストールし、ローカル環境で起動させておく必要がある。さらに、PostgreSQL内に「todo_db」といった名前の空のデータベースを作成しておく。構築したAPIが正しく動作するかを確認するために、APIリクエストの送信とレスポンスの確認ができるツールであるPostman(またはcurl)も用意する。
環境が整ったら、必要なパッケージをプロジェクトに追加する。具体的には、「Npgsql.EntityFrameworkCore.PostgreSQL」と「Microsoft.EntityFrameworkCore.Design」の二つである。Npgsql.EntityFrameworkCore.PostgreSQLは、EF CoreがPostgreSQLデータベースと通信するために必要なコンポーネントを提供する。Microsoft.EntityFrameworkCore.Designは、データベースのスキーマ変更(マイグレーション)を管理するためのツールを提供するパッケージである。これらをインストールすることで、C#コードからデータベースを操作するための基盤が整う。
次に、アプリケーションがデータベースにどのように接続するかを定義する「接続文字列」を設定する。これは「appsettings.json」ファイル内に追加する。「DefaultConnection」という名前で、データベースのホスト名(ここでは「localhost」)、データベース名(「todo_db」)、ユーザー名(「postgres」)、パスワードなどの情報を記述する。この接続文字列は、アプリケーションがデータベースにアクセスするための詳細なデータベース接続情報であり、正確な情報が不可欠となる。
データベースに格納するデータの構造を定義するため、「Todo」モデルを作成する。これは、データベースのテーブルにおける列の定義に相当する。Todoクラスには、タスクを一意に識別する「Id」(主キー)、タスクの内容を示す「Title」(文字列)、タスクが完了したかどうかを示す「IsComplete」(真偽値)というプロパティが含まれる。EF Coreは、このC#のクラス定義に基づいて、後述するマイグレーション時に実際のデータベーステーブルを自動的に作成する。
データベースとのやり取りを管理する中心的なクラスとして、「AppDbContext」を追加する。これはEF Coreの「DbContext」クラスを継承しており、アプリケーションとデータベース間の橋渡しを行う。AppDbContext内には、Todoモデルに対応する「DbSet<Todo> Tasks」プロパティを定義する。このDbSetが、Todoオブジェクトのコレクション(データベーステーブルに相当)を表し、これを通じてデータベースへの問い合わせや更新操作を行う。DbContextは、データベース接続の管理、クエリの構築、変更の追跡といった重要な役割を担う。
アプリケーションの起動時に必要なサービスを登録し、APIのエンドポイントを定義するために、「Program.cs」ファイルを編集する。まず、PostgreSQLとの連携を有効にするため、AppDbContextをサービスとして登録する。この際、先ほど定義した接続文字列を利用して、AppDbContextがPostgreSQLに接続するように設定する。その後、実際のAPIエンドポイントを定義する。 一つは、すべてのタスクを取得するためのGETエンドポイントである「/api/tasks」である。このエンドポイントでは、AppDbContextを通じてデータベースのTasksコレクションからすべてのTodoオブジェクトを取得し、リストとして返す。 もう一つは、新しいタスクをデータベースに追加するためのPOSTエンドポイントである「/api/tasks」である。このエンドポイントは、リクエストボディからTodoオブジェクトを受け取り、それをDbSetに追加し、データベースへの変更を保存する。保存が成功すると、新しく作成されたタスクの情報とともに成功レスポンスを返す。これらのエンドポイントは、.NETの最小限APIの機能を用いて簡潔に記述されている。
C#コードで定義したモデルとDbContextに基づいて、実際にデータベースにテーブルを作成するために「マイグレーション」を実行する。まず、「dotnet ef migrations add InitialCreate」コマンドを実行することで、現在のモデル定義とデータベースの状態を比較し、その差分をマイグレーションファイルとして生成する。次に、「dotnet ef database update」コマンドを実行することで、生成されたマイグレーションファイルの内容をデータベースに適用し、PostgreSQL内に「Tasks」テーブルが作成される。このプロセスにより、手動でSQL文を書くことなく、コードベースでデータベースのスキーマを管理できる。
最後に、構築したAPIが正しく動作するかをPostmanでテストする。まず、HTTPのPOSTリクエストを「http://localhost:5000/api/tasks」に送信し、リクエストボディに新しいタスクの情報をJSON形式で含める。例えば、「{"title": "Learn EF Core", "isComplete": false}」といった内容である。このリクエストにより、新しいタスクがデータベースに保存される。次に、HTTPのGETリクエストを同じ「http://localhost:5000/api/tasks」に送信する。このリクエストに対するレスポンスとして、先ほど追加したタスクを含む、データベースに保存されているすべてのタスクのリストがJSON形式で返されることを確認する。これにより、APIがPostgreSQLデータベースと正常に連携し、データの追加と取得ができることが検証できる。
このように、本プロジェクトでは.NETの最小限API、PostgreSQLデータベース、そしてEntity Framework Coreを組み合わせて、データの永続化機能を備えたToDo APIを構築した。EF CoreがC#のオブジェクトとデータベース間の複雑なマッピングやデータ操作の多くの部分を自動で処理してくれるため、開発者はアプリケーションロジックに集中できる。この基礎的なAPIは、今後の機能拡張として、タスクの更新(PUT)や削除(DELETE)といった操作を追加することで、より完全なCRUD(Create, Read, Update, Delete)機能を持つAPIへと発展させることが可能である。