Microsoft developer platform documentation update:Aspire.Hosting.EntityFrameworkCoreで確認すべき変更点

2026年5月5日に確認されたMicrosoft developer platformのdocumentation updateで押さえるべき結論は、Aspire.Hosting.EntityFrameworkCoreの新しい説明ページが単純に追加されたわけではなく、既存のEF Core migrationsドキュメントとの重複が見つかり、最終的にPR #815は差分なしとして閉じられたという点です。一方で、開発者が見るべき実務上の変更は明確です。Aspire AppHostでEF Coreマイグレーションを扱うAddEFMigrations、RunDatabaseUpdateOnStart()、PublishAsMigrationScript()、PublishAsMigrationBundle()の確認が必要になります。特に、従来の手動Worker Service方式を使っているチーム、複数DbContextを持つサービス、CI/CDでマイグレーション成果物を生成しているチームは、設定の重複や実行タイミングを見直すべきです。(GitHub)

目次

今回のMicrosoft developer platform documentation updateで何が起きたのか

今回の更新対象は、GitHub上のmicrosoft/aspire.devリポジトリにあるPR #815「[docs] Add Aspire.Hosting.EntityFrameworkCore hosting integration documentation」です。

このPRは、microsoft/aspire#13481で導入されたAspire.Hosting.EntityFrameworkCoreのホスティング統合について、Aspire公式サイト側にドキュメントを追加する目的で作成されました。対象ブランチはrelease/13.3で、PR本文ではAspire.Hosting.EntityFrameworkCore NuGetパッケージ、AddEFMigrations()、RunDatabaseUpdateOnStart()、公開時のマイグレーション成果物生成などを説明する新規ページを追加する予定だったことが示されています。(GitHub)

ただし、レビューの過程で「内容の多くは既存ページにすでに入っている」と指摘されました。その結果、追加予定だったef-migrations-hosting.mdxとサイドバー項目は削除され、PRは実質的に差分なしの状態で閉じられています。つまり、5月5日の更新は“新機能の追加通知”というより、既存ドキュメントとの重複整理と確認のための更新と捉えるのが正確です。(GitHub)

読者が確認すべき変更点

今回のポイントは、PR #815そのものが最終的に空になったことではなく、AspireにおけるEF Coreマイグレーションの説明が、手動の移行サービス方式だけでなく、AppHost APIによる自動化方式まで広がっていることです。

特に確認したいのは次の4点です。

確認項目内容実務での意味
Aspire.Hosting.EntityFrameworkCoreAppHost側でEF Coreマイグレーション管理を扱うためのパッケージ既存のWorker Service方式以外の選択肢が増える
AddEFMigrations()プロジェクトリソースにマイグレーション用リソースを追加するAPIAppHost上でマイグレーションを明示的に管理できる
RunDatabaseUpdateOnStart()ローカル実行時にDB更新を自動実行する設定開発環境で毎回手動実行する手間を減らせる
PublishAsMigrationScript() / PublishAsMigrationBundle()aspire publish時にSQLスクリプトやバンドルを生成する設定CI/CDや本番展開前のDB変更確認に使える

既存のPR #774では、migrations.mdxに「Automated EF migrations with AddEFMigrations」セクションが追加され、パッケージ導入、AppHost設定、ローカル実行時の動作、公開時の成果物生成、publishContainer: trueを使ったコンテナ化まで説明対象に含められました。(GitHub)

対応すべきチームと対応不要なチーム

すべてのMicrosoft developer platform利用者がすぐに修正する必要があるわけではありません。影響を受けるのは、主に.NET AspireとEF Coreを組み合わせて使っている開発チームです。

対象対応優先度理由
Aspire AppHostでEF Coreを使っている高AddEFMigrationsを導入できるか確認する価値がある
手動のMigration Worker Serviceを作っている高新APIと処理が重複しないか確認が必要
複数のDbContextを1つのサービスで扱っている高DbContext指定やリソース名の整理が必要
aspire publishをCI/CDに組み込んでいる中〜高マイグレーションスクリプトやバンドル生成の使い分けを検討できる
EF Coreを使っていないAspireプロジェクト低今回の更新による直接影響は小さい
Aspireを使っていない通常のASP.NET Coreアプリ低EF Core自体の基本的なマイグレーション運用は従来通り

特に注意したいのは、すでに自前のWorker ServiceでDatabase.MigrateAsync()を実行しているケースです。そこへRunDatabaseUpdateOnStart()を安易に追加すると、開発環境で同じマイグレーション処理を二重に設計してしまう可能性があります。EF Coreマイグレーションは通常、適用済み履歴を見て差分実行されますが、実行タイミングやシード処理まで重なると、期待しないデータ投入や起動順の問題につながります。

Aspire.Hosting.EntityFrameworkCoreでできること

Aspire.Hosting.EntityFrameworkCoreは、Aspire AppHostからEF Coreマイグレーション管理を行うためのホスティング統合です。リポジトリのREADMEでは、対象プロジェクトがMicrosoft.EntityFrameworkCore.Designを参照する必要があること、AppHostにAspire.Hosting.EntityFrameworkCoreを追加すること、AddEFMigrationsでマイグレーションリソースを定義することが説明されています。(GitHub)

基本イメージは次のようになります。

dotnet add package Aspire.Hosting.EntityFrameworkCore
var db = builder.AddPostgres("pg")
    .AddDatabase("appdb");

var api = builder.AddProject<Projects.Api>("api")
    .WithReference(db);

var apiMigrations = api.AddEFMigrations(
    "api-migrations",
    "MyApp.Data.AppDbContext");

この設定により、AppHost上でAPIプロジェクトに紐づくEF Coreマイグレーションリソースを扱えるようになります。DbContextが1つだけなら型名指定を省略できる場合がありますが、複数DbContextがある場合は、どのDbContextに対するマイグレーションなのかを明示するほうが安全です。

ダッシュボードから使える操作

AddEFMigrationsを呼び出すと、Aspire Dashboard上でマイグレーション関連のコマンドを扱えるようになります。READMEでは、Update Database、Drop Database、Reset Database、Add Migration、Remove Migration、Get Database Statusなどのコマンドが示されています。(GitHub)

コマンド用途注意点
Update Database未適用のマイグレーションをDBに適用開発DB向けに使うのが基本
Drop DatabaseDBを削除誤操作防止のため対象環境を確認
Reset DatabaseDBを削除して再作成シードデータや検証用データが消える可能性がある
Add Migration新しいマイグレーションを作成作成後は対象プロジェクトの再ビルドが必要
Remove Migration直近のマイグレーションを削除適用済みDBとの整合性に注意
Get Database Status現在のマイグレーション状態を確認CI前や動作確認時に有用

実務では、これらの操作を本番DB向けの手軽な管理画面として使うのではなく、ローカル開発や検証環境での状態確認・マイグレーション作成補助として使うのが安全です。

RunDatabaseUpdateOnStart()はローカル起動の自動化として考える

RunDatabaseUpdateOnStart()は、AppHost起動時にマイグレーションを自動適用するための設定です。

var apiMigrations = api.AddEFMigrations(
        "api-migrations",
        "MyApp.Data.AppDbContext")
    .RunDatabaseUpdateOnStart();

api.WaitForCompletion(apiMigrations);

公式ドキュメントの更新内容では、RunDatabaseUpdateOnStart()はローカル実行モードに関係する説明として扱われています。aspire publishや実際のデプロイで同じように自動実行されると考えると誤解しやすいため、環境ごとの実行タイミングを分けて設計する必要があります。(GitHub)

実務での判断基準は次の通りです。

利用シーンRunDatabaseUpdateOnStart()の適性理由
ローカル開発DBを毎回作り直す向いている起動時にスキーマを整えやすい
チーム内の検証環境条件付きで有効DB初期化ルールを明確にすれば便利
本番環境慎重に判断DB変更は承認・バックアップ・ロールバック設計が必要
複数サービスが同じDBを参照要設計起動順と同時実行を管理する必要がある

本番に近い環境では、起動時に自動でDBスキーマを書き換えるより、マイグレーションスクリプトやバンドルをCI/CDで生成し、レビューや承認プロセスを通して適用するほうが安全です。

PublishAsMigrationScript()とPublishAsMigrationBundle()の使い分け

今回のドキュメント更新で実務上重要なのは、ローカル起動だけでなく、公開時の成果物生成にも触れられている点です。

PublishAsMigrationScript()はSQLスクリプトを生成する用途、PublishAsMigrationBundle()はEF Coreのマイグレーションバンドルを生成する用途で使います。PR #774では、これらをaspire publish時のパイプラインに組み込む説明が追加されています。(GitHub)

var apiMigrations = api.AddEFMigrations(
        "api-migrations",
        "MyApp.Data.AppDbContext")
    .PublishAsMigrationScript()
    .PublishAsMigrationBundle();

使い分けは次のように考えると分かりやすいです。

方法向いているケースメリット注意点
SQLスクリプトDBAレビューが必要な組織差分を人が確認しやすい実行環境ごとの接続管理が必要
Migration BundleCI/CDで実行したい場合実行単位を成果物として扱える実行タイミングと接続文字列の管理が必要
Container化したBundleコンテナ環境で一度だけ実行したい場合デプロイ資産として扱いやすい再起動ポリシーを誤ると繰り返し実行される可能性がある

publishContainer: trueを使う場合の注意点

PublishAsMigrationBundle(publishContainer: true)を使うと、生成したマイグレーションバンドルをコンテナイメージとして扱えるようになります。PR #774では、このオプションが13.3向けの新しい説明として扱われ、Docker Compose、Azure Container Apps、Kubernetesなどの環境ごとの再起動防止パターンにも触れられています。(GitHub)

例として、ドキュメントでは次のような構成が示されています。

var db = builder.AddPostgres("pg")
    .AddDatabase("appdb");

var api = builder.AddProject<Projects.Api>("api")
    .WithReference(db);

var apiMigrations = api.AddEFMigrations(
        "api-migrations",
        "MyApp.Data.AppDbContext")
    .WithReference(db)
    .WaitFor(db)
    .PublishAsMigrationBundle(publishContainer: true);

ここで重要なのは、マイグレーション用コンテナがDBへ接続できること、DBが利用可能になってから実行されることです。ドキュメント更新では、publishContainer: trueを使う場合に.WithReference(db)と.WaitFor(db)を確認する説明が含まれています。(GitHub)

また、マイグレーションバンドルは基本的に再実行しても差分がなければ何もしない設計ですが、コンテナオーケストレーション側が終了したコンテナを自動再起動する設定になっていると、運用上のノイズや不要な再実行につながります。Docker Composeではrestart設定、Azure Container AppsではJob化、KubernetesではJobやrestartPolicyの調整を検討する必要があります。

既存プロジェクトで確認する手順

今回のMicrosoft developer platform documentation updateを受けて、既存プロジェクトでは次の順番で確認すると効率的です。

| 手順 | 確認内容 | 判断ポイント |
| -: | ——————————————– | ————————————– |
| 1 | AspireとEF Coreを組み合わせているか | 対象外なら対応不要 |
| 2 | 既存のマイグレーション実行方法を確認 | Worker Service、手動CLI、CI/CDのどれか |
| 3 | Aspire.Hosting.EntityFrameworkCoreを導入するか判断 | AppHostで一元管理したいなら候補 |
| 4 | DbContextの数を確認 | 複数なら型名指定やリソース名を明確にする |
| 5 | ローカル起動時の自動適用を使うか判断 | RunDatabaseUpdateOnStart()は開発環境中心に検討 |
| 6 | 公開時の成果物を決める | SQLスクリプト、Bundle、Container Bundleを選ぶ |
| 7 | CI/CDと本番適用手順を確認 | 自動適用、承認、ロールバックを分けて設計 |
| 8 | 重複実行を防ぐ | Worker ServiceとAddEFMigrationsの併用に注意 |

特に、すでに以下のようなコードを持つWorker Serviceがある場合は要注意です。

await dbContext.Database.MigrateAsync(cancellationToken);

この処理を残したまま、AppHost側でもRunDatabaseUpdateOnStart()を設定すると、マイグレーションの責任範囲が分かれます。シンプルなプロジェクトならAddEFMigrationsへ寄せる、複雑なシード処理や業務固有の初期化があるならWorker Serviceを維持する、というように役割を明確にしましょう。

移行判断:Worker Service方式をやめるべきか

AddEFMigrationsがあるからといって、既存のWorker Service方式を必ず廃止すべきとは限りません。むしろ、どちらが運用に合うかを判断することが大切です。

比較項目Worker Service方式AddEFMigrations方式
実装の自由度高い標準APIの範囲で整理しやすい
シード処理との統合しやすいDB更新中心に考える必要がある
AppHostでの見通しやや分散しやすいAppHostに集約しやすい
Dashboard操作自前実装が必要コマンドとして扱いやすい
CI/CD成果物生成別途設計が必要PublishAsMigrationScript()などを使いやすい
初心者への分かりやすさコード量が多い設定の意図が見えやすい

おすすめの判断は次の通りです。

単純に「起動時にDBスキーマを整えたい」「開発環境でマイグレーション操作を見やすくしたい」なら、AddEFMigrations方式を検討する価値があります。

一方で、「マイグレーション後に複雑な初期データ投入を行う」「外部APIや複数DBをまたぐ初期化処理がある」「業務要件上、マイグレーション処理を独立したアプリケーションとして監視したい」場合は、Worker Service方式を維持するほうが扱いやすいことがあります。

設定時に失敗しやすいポイント

Microsoft.EntityFrameworkCore.Designの参照不足

AddEFMigrationsを使う対象プロジェクトでは、EF Coreのデザイン時機能が必要になります。READMEでは、対象プロジェクトがMicrosoft.EntityFrameworkCore.Designを参照する必要があることが説明されています。(GitHub)

ただし、dotnet add packageで追加した場合のPrivateAssets設定により、マイグレーションコマンド側から期待通り参照できない可能性がある点にも注意が必要です。導入後は、DashboardからGet Database StatusやAdd Migrationを実行し、コマンドが正しく動くか確認しましょう。

複数DbContextで型指定を省略する

1つのプロジェクトに複数のDbContextがある場合、AddEFMigrations("api-migrations")だけでは、どのDbContextを対象にするのかが曖昧になります。

この場合は、次のように完全修飾名を指定する運用にしたほうが安全です。

var userMigrations = api.AddEFMigrations(
    "user-migrations",
    "MyApp.Data.UserDbContext");

var orderMigrations = api.AddEFMigrations(
    "order-migrations",
    "MyApp.Data.OrderDbContext");

リソース名もapi-migrationsのように汎用的にせず、user-migrations、order-migrationsのように対象を分けると、Dashboard上の操作ミスを減らせます。

ローカル実行と公開時実行を混同する

RunDatabaseUpdateOnStart()はローカル起動時の自動化として便利ですが、公開時のマイグレーション適用とは別に考える必要があります。公開時はPublishAsMigrationScript()やPublishAsMigrationBundle()を使い、生成した成果物を誰が、どのタイミングで、どの接続先に対して実行するかを決めるべきです。

コンテナ化したマイグレーションの再起動設定を忘れる

publishContainer: trueでマイグレーションバンドルをコンテナ化する場合、実行後にコンテナが終了します。環境によっては終了したコンテナを再起動しようとするため、Docker Compose、Azure Container Apps、Kubernetesごとに「一度実行して止める」設定を検討してください。

PR #815だけを見て「新規ページが追加された」と判断する

今回のPR #815は、当初は新しいページを追加する方針でしたが、既存のmigrations.mdxに内容があると判断され、重複ページは削除されました。したがって、確認先はPR #815だけでなく、既存のApply migrationsドキュメントとPR #774の変更内容です。(GitHub)

実務でのおすすめ対応

今回の更新を受けた実務対応は、次の3パターンに分けると整理しやすくなります。

ローカル開発を楽にしたい場合

ローカルのコンテナDBを頻繁に作り直すチームは、AddEFMigrationsとRunDatabaseUpdateOnStart()を検討しましょう。

var apiMigrations = api.AddEFMigrations(
        "api-migrations",
        "MyApp.Data.AppDbContext")
    .RunDatabaseUpdateOnStart();

api.WaitForCompletion(apiMigrations);

この構成にすると、APIやWorkerがDBスキーマ未作成の状態で起動して失敗するリスクを下げられます。ただし、既存のWorker Serviceが同じ処理をしていないか確認してください。

CI/CDでDB変更を管理したい場合

本番やステージングでは、起動時に自動でDB更新するより、成果物を作ってレビューする流れが向いています。

var apiMigrations = api.AddEFMigrations(
        "api-migrations",
        "MyApp.Data.AppDbContext")
    .PublishAsMigrationScript()
    .PublishAsMigrationBundle();

SQLレビューが必要な組織ではスクリプトを、パイプラインで実行したい場合はバンドルを中心に検討するとよいでしょう。

コンテナ環境で一度だけ実行したい場合

コンテナベースの環境に合わせたい場合は、publishContainer: trueを検討できます。

var apiMigrations = api.AddEFMigrations(
        "api-migrations",
        "MyApp.Data.AppDbContext")
    .WithReference(db)
    .WaitFor(db)
    .PublishAsMigrationBundle(publishContainer: true);

この場合は、接続文字列、DB起動待ち、再起動ポリシーの3点を必ず確認してください。特にKubernetesではDeploymentではなくJobとして扱う設計が必要になることがあります。

まず確認すべきチェックリスト

最後に、今回のMicrosoft developer platform documentation updateを受けて、開発チームで確認すべき項目をまとめます。

チェック確認内容
□Aspire AppHostでEF Coreを使っているか
□既存のマイグレーション実行方法を棚卸ししたか
□Worker ServiceとAddEFMigrationsが重複していないか
□対象プロジェクトにMicrosoft.EntityFrameworkCore.Design参照があるか
□複数DbContextの場合、対象DbContextを明示しているか
□RunDatabaseUpdateOnStart()を本番用途と誤解していないか
□PublishAsMigrationScript()またはPublishAsMigrationBundle()の使い道を決めたか
□publishContainer: trueを使う場合、DB参照と起動待ちを設定したか
□コンテナの再起動ポリシーを環境別に確認したか
□PR #815ではなく、既存のmigrations.mdxとPR #774の内容も確認したか

今回の更新は、表面上は「ドキュメント追加PRが閉じられた」という小さな動きに見えます。しかし実務では、Aspire AppHostでEF Coreマイグレーションを管理する選択肢が整理され、ローカル開発、Dashboard操作、CI/CDでの成果物生成を見直すきっかけになります。

まずは自分のプロジェクトで、マイグレーションを「どこで」「いつ」「誰の責任で」実行しているかを確認しましょう。そのうえで、単純な開発環境の自動化にはAddEFMigrations、本番適用にはスクリプトやバンドル、複雑な初期化にはWorker Serviceというように、用途別に使い分けるのが安全です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次