2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Context とは何か?処理の文脈を設計で理解する

Last updated at Posted at 2025-12-17

はじめに

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 を抽象的に捉え、
設計の視点で
「どこで状態を持つか」
「どこで確定すべきか」
を考えるきっかけになればと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?