はじめに
Webアプリケーション開発をしていると、
- DbContext
- HttpContext
という言葉を頻繁に目にします。
特に Entity Framework を使っていると、
DbContext は「当たり前の存在」になりがちですが、
「そもそも Context って何?」
と聞かれると、意外と説明に詰まります。
本記事では、
DbContext / HttpContext を日常的に使っている開発者向けに
Context という概念を「設計の言葉」として整理し、
コードの見え方がどう変わるかを説明します。
この記事で分かること
- DbContext / HttpContext に共通する「Context」の正体
- Context を「前提条件+未確定状態」として捉える考え方
- Context を意識することで設計がどう整理されるか
Context とは何か(結論)
Context とは、
ある処理を正しく行うために必要な
状態・前提・制約をひとまとめにしたもの
です。
重要なのは、Context は、処理そのものではなく
処理が成立する「文脈」
を表している点です。
比喩で理解する
- Context = 舞台のセットや設計図のようなもの
この Context が揃って初めて処理が正しく動きます。 - DbContext / HttpContext はその舞台の一部
- DbContext:データ操作のための小道具やセット
- HttpContext:1つのリクエストを処理するための舞台の設計図
DbContext から考える Context
DbContext をどう説明しているか
私は後輩に説明するときは、
「DB 操作をするための魔法の杖」
と表現しています。
一方で、設計の観点では、もう一段深い理解が必要です。
OnConfiguring は何を定義しているのか
Entity Framework の OnConfiguring は、
DbContext が成立するための前提条件を定義する場所
です。
- 接続先データベース
- 使用する DB プロバイダ
- ログや挙動に関する設定
これにより、
「この DbContext は、どの前提で DB 操作を行うのか」
が決まります。
DbContext が実際に持っているもの
- 接続先データベース
- 取得したエンティティ
- 変更状態(Change Tracker)
- トランザクションの境界
DbContext は DB 操作における「未確定の状態」を保持する Context
SaveChanges()は、Context に溜めた変更を「確定」させる操作です。
コード例:DbContext の未確定状態
using var context = new AppDbContext();
var order = new Order { ProductId = 1, Quantity = 2 };
context.Orders.Add(order); // Context に未確定状態として追加
//この時点ではまだ DB に反映されていない、Context に溜めた変更状態ということです
context.SaveChanges(); // 確定
//Add した時点で未確定状態、SaveChanges で確定
HttpContext は何の Context か
HttpContext は、
「1つのリクエストを正しく処理するための文脈」
を持っています。
含まれる情報の例
- ログインユーザー(
HttpContext.User) - ヘッダ
- Cookie / Session
- リクエストスコープ
Cookie の値やユーザー情報に応じて処理を分岐する場合は、
HttpContext が持つ前提条件に依存している ことになります。
コード例:HttpContext 依存の処理
public IActionResult Index()
{
var userName = HttpContext.User.Identity.Name;
//ユーザー情報に応じて処理が変わるため、処理の前提条件が Context に依存しています
if (userName == "admin")
return View("Admin");
return View("User");
}
なぜ Context を意識する必要があるか
Context を意識しない設計では、
- 状態があちこちに散らばる
- 「今どの前提で動いているか」が分からない
- 副作用が増える
逆に、
Context を明示すると、責務と境界が自然に見えてくる
ようになります。
まとめ
- Context とは「処理の文脈」
- DbContext は DB 操作用の Context
- HttpContext は リクエスト処理用の Context
- Context は「確定までの状態」を抱える器
日常的に使っている Context を抽象的に捉え、
設計の視点で
「どこで状態を持つか」
「どこで確定すべきか」
を考えるきっかけになればと思います。