Microsoft Learn のモジュール「Interact with data in Blazor web apps」を進めていると、Unit 9 で参照される Services/OrderState.cs がプロジェクト内に見当たらず、手が止まることがあります。この記事では「どこにあるのか」「どう作ればレッスンを続けられるのか」を、迷いやすいポイント込みで具体的に解説します。
現象:Unit 9 で「Services/OrderState.cs」を参照しているのに、GitHubのプロジェクト一式に存在しない
Microsoft Learn のハンズオンは、ユニットを順番に進めていくことでプロジェクトが完成していく構成になっています。そのため、Unit 9 まで進んだ時点で突然 Services/OrderState.cs が必要になったように見えても、手元のダウンロード済みプロジェクト(GitHub から取得した初期状態)には最初から入っていないケースがあります。
このとき、開発環境(Visual Studio / VS Code)では次のような形でエラーや違和感が出やすいです。
| 症状 | 起きやすいエラー例・状況 | 原因 | 対処の方向性 |
|---|---|---|---|
| OrderState が見つからない | OrderState が参照できない/型が存在しない | ファイル自体が未作成 | Unit 7 の本文コードから OrderState.cs を作成 |
| 名前空間が合わない | BlazingPizza.Services が見つからない、または using が通らない | namespace がプロジェクトと不一致 | プロジェクトのルート名前空間に合わせて修正 |
| フォルダー位置が違う | Services を作ったが参照されない/自分で迷子になる | プロジェクト直下ではない場所に作成 | プロジェクト直下(例:BlazingPizza/Services)に配置 |
| DI登録が不足 | 実行時にサービス解決できない(Stateが注入できない等) | サービス登録が未実施 | Unit 7〜8の手順(Program.cs への登録等)を再確認 |
結論:OrderState.cs は「GitHub ではなく Unit 7 のレッスン本文」に掲載されている
この問題のポイントはとてもシンプルで、OrderState.cs は GitHub に最初から入っているファイルではなく、Learn の Unit 7 の本文中にコードとして掲載されている、という点です。
つまり「GitHub のプロジェクト一式に無い=配布漏れ」ではなく、Learn の進め方としては次の流れになっています。
- Unit 7 の本文にある
OrderStateクラスのコードを読む - 自分のプロジェクトに
Services/OrderState.csを作成し、そのコードを貼り付ける - 以降の Unit(Unit 9 を含む)は、そのファイルが存在する前提で説明が進む
なぜ「GitHub に無い」のに学習が進むのか:Microsoft Learn ハンズオンの構造を理解する
Microsoft Learn の実践モジュールは、完成物を一括で配布するのではなく、受講者が途中でファイルを追加して完成に近づける形式がよく採用されています。これには次のメリットがあります。
- 「なぜそのクラスが必要か」「どこで使うか」を文脈の中で理解できる
- 状態管理(State management)や DI(依存性注入)など、Blazor の重要概念を手を動かして学べる
- 後続ユニットで「前提」として扱われるため、実務の開発フローに近い
一方で、途中ユニットを飛ばしたり、途中で別ブランチ・別ZIPを落としてしまったりすると「参照されているはずのファイルが無い」というズレが起きます。今回の OrderState.cs は、まさにその代表例です。
OrderState.cs を見つける:Unit 7 の本文からコードを探す手順
ポイントは、Unit 7 内の特定セクションにコードが掲載されていることです。次の手順で見つけるのが最短です。
- Microsoft Learn のモジュール「Interact with data in Blazor web apps」を開く
- Unit 7 のページへ移動する
- ブラウザ上で Ctrl + F(Mac は Command + F)を押してページ内検索を開く
- 検索欄に Handle the state of an order と入力して該当セクションへ移動する
- そのセクション内に掲載されている
OrderStateクラスのコードが、Services/OrderState.csの中身に相当する
ページ内検索は、英語セクション名だけでなくコード側のキーワードで当てるのも効果的です。特に、本文の見出しが翻訳表示になっている場合は「英語の見出しを探しても見つからない」ことがあるため、コードの識別子で探すと安定します。
| Ctrl+F でおすすめの検索語 | 見つかる場所の目安 | 狙い |
|---|---|---|
| Handle the state of an order | Unit 7 の該当セクション | 本文の「正しい位置」に到達する |
| OrderState | コード例のクラス定義 | クラス全体を確実に見つける |
| ShowConfigurePizzaDialog | メソッド定義付近 | 必要なメソッド群が揃っているか確認する |
| ConfirmConfigurePizzaDialog | 確認処理のメソッド付近 | 後続ユニットで呼ばれる箇所を特定する |
| ShowingConfigureDialog | 状態(フラグ)定義付近 | 「状態管理クラス」らしい形になっているか確認 |
実作業:Blazor プロジェクトに Services/OrderState.cs を作成して貼り付ける
ここからは、実際に手元の Blazor プロジェクト(例:BlazingPizza)にファイルを追加して、Unit 9 を続行できる状態にします。作業自体は難しくありませんが、フォルダー位置とnamespaceでつまずく人が多いので、そこを重点的に押さえます。
フォルダー構成の正解例(迷ったらこれに合わせる)
Learn の説明では Services/OrderState.cs と表現されることが多いため、プロジェクト直下に Services フォルダーを作るのが基本です。
BlazingPizza/
Services/
OrderState.cs
Pages/
Shared/
Program.cs
BlazingPizza.csproj
重要なのは、ソリューション直下ではなく、プロジェクト直下に作ることです。Visual Studio のソリューションエクスプローラーで表示が似ているため、誤って別の階層に作るケースがあります。
作成手順(Visual Studio / VS Code 共通)
- プロジェクト内に Services フォルダーが無ければ作成する(例:
BlazingPizza/Services) - OrderState.cs という C# ファイルを新規作成する
- Learn の Unit 7「Handle the state of an order」セクションに掲載されている
OrderStateクラスのコードを、そのまま貼り付ける - 貼り付けたら namespace がプロジェクトと一致しているかを確認する
- 保存してビルドし、参照エラーが解消されることを確認する
namespace の合わせ方(ここが一番つまずきやすい)
Learn のコード例では、次のような名前空間で掲載されていることが多いです。
namespace BlazingPizza.Services
{
public class OrderState
{
// プロパティやメソッド
// ShowingConfigureDialog, ConfiguringPizza, Order など
// ShowConfigurePizzaDialog, CancelConfigurePizzaDialog, ConfirmConfigurePizzaDialog など
}
}
この BlazingPizza の部分は、あなたのプロジェクト名(ルート名前空間)によって変わる可能性があります。例えばプロジェクト名が MyPizzaApp なら、MyPizzaApp.Services が自然です。
| 状況 | よくあるミス | 直し方 |
|---|---|---|
| プロジェクト名を変えている | 本文どおり BlazingPizza.Services のまま貼る | namespace を自分のプロジェクト名に合わせる |
| フォルダーは Services だが参照できない | 別階層の Services に作ってしまう | csproj と同階層に Services があるか確認 |
| using が通らない | 呼び出し側の using と namespace が不一致 | 呼び出し側の using を修正、または namespace を揃える |
特に「GitHub に無いから自分でそれっぽく作った」場合、namespace とクラス名だけ合っていても、中身のプロパティ・メソッドが不足して後続ユニットで詰まります。必ず Unit 7 の掲載コードをそのまま貼り付けるのが安全です。
ビルドで確認する:Unit 9 に進む前のチェックリスト
ファイルを作ったら、次の観点で「進めてよい状態」になっているか確認します。ここを省略すると、次のユニットで別のエラーとして噴き出して原因が分かりにくくなります。
| チェック項目 | 確認方法 | OK の目安 |
|---|---|---|
| ファイルパス | エクスプローラーで Services/OrderState.cs を確認 | プロジェクト直下に Services がある |
| クラス名 | public class OrderState になっているか | 綴りが一致、public で定義 |
| namespace | プロジェクトのルート名前空間と整合するか | 呼び出し側の using と一致 |
| 必要メンバー | Unit 7 掲載のプロパティ/メソッドが揃っているか | コピー漏れがない |
| ビルド | Visual Studio のビルド、または dotnet build | コンパイルエラーが消える |
CLI で確認したい場合は、プロジェクトフォルダーで次を実行します。
dotnet build
dotnet run
ビルドが通った時点で、少なくとも「ファイルが無い」「型が無い」「namespace が壊れている」といった初歩的な問題は解消できています。Unit 9 の続きに進む前に、ここまでを必ず一度クリアしておくのが効率的です。
それでもエラーが消えないときの切り分け:原因はだいたい3パターン
OrderState.cs を作成してもまだ詰まる場合、原因はほとんどが次のどれかです。闇雲にコードをいじるより、表の順番で潰す方が早いです。
| パターン | 起きていること | よくあるサイン | 対処 |
|---|---|---|---|
| 貼り付け漏れ | Unit 7 のコードが途中で欠けている | 特定メソッドだけ無い、プロパティ参照で落ちる | Unit 7 の掲載コードを最初から最後まで再コピー |
| namespace 不一致 | クラスはあるのに参照できない | using を追加しても通らない | OrderState 側と呼び出し側の namespace/using を揃える |
| 前提ユニットの未実施 | OrderState 以外の変更が不足 | 依存クラス、DI、UI側の前提が揃っていない | Unit 7〜8 の手順を「作業したか」目線で再確認 |
「前提ユニット未実施」を見抜くコツ
Learn は文章として読むと「理解した気」になりやすい一方で、後続ユニットは「実際にファイルを作ってある」前提で進みます。次のような状況があるなら、前提作業の抜けが濃厚です。
- Unit 7 のセクションを読んだが、実際にはファイルを作成していない
- 途中で別のPC/別環境に移って、プロジェクトをコピーし忘れた
- GitHub から落とし直したプロジェクトで再開してしまい、途中で追加したファイルが消えた
- ユニットを飛ばして「必要なところだけ」やろうとした
この場合、OrderState だけ追加しても次の前提で詰まる可能性があります。最短で戻るなら、Unit 7 の該当箇所から作業手順をなぞり直すのが結局いちばん早いことが多いです。
OrderState は何のためにある?Blazor の「状態管理」を理解すると迷いにくくなる
OrderState は、Blazor アプリ内で「注文の状態(どのピザを編集中か、設定ダイアログを表示するか、現在の注文内容は何か)」のような情報を、ページをまたいで保持するための 状態コンテナ(State container)として登場します。
Blazor では、単に変数を1つ置くだけだと、コンポーネントの再描画や画面遷移の都合で状態が散らかったり、引き回しが大変になったりします。そこで、次のような設計にすることで保守性が上がります。
- 状態(State)を
OrderStateのようなクラスに集約する - 必要なコンポーネントから DI で注入して参照・更新する
- 「表示中か」「編集中か」などのフラグや、現在の注文オブジェクトを一元管理する
今回の「OrderState.cs が無い」という出来事は、言い換えると「状態管理クラスを自分で追加する」実践ポイントに差しかかった、ということでもあります。意味を理解しながら作ると、次に同種のトラブルが起きても自力で復帰しやすくなります。
再発防止:Learn で「GitHub に無いファイル」に遭遇したときの探し方テンプレ
今回と同じタイプのトラブルは、Microsoft Learn のハンズオンで何度か遭遇しがちです。「あれ、リポジトリに無い…」となったとき、次のテンプレで探すと復旧が速くなります。
| 確認ポイント | やること | 見つかる可能性が高い場所 |
|---|---|---|
| 前のユニットを疑う | 1〜2ユニット戻って、追加手順がないか探す | 直前の Unit(今回なら Unit 7) |
| ページ内検索 | Ctrl/Command + F でクラス名やメソッド名を検索 | 本文中のコードブロック |
| 「作成する」系の文言 | “create” “add” “new file” 等の指示を探す | 手順の箇条書き |
| ファイルパス表記 | Services/OrderState.cs のようなパスを手掛かりにする | ユニット冒頭の説明や補足 |
特に、今回のように「後続ユニットが当然のように参照してくる」タイプは、どこかのユニット本文に“貼り付けるコード”が掲載されている可能性が非常に高いです。GitHub を何度更新しても出てこない場合は、リポジトリ探しより先に Learn 本文の検索に切り替えるのが正解ルートです。
まとめ:OrderState.cs が見つからないのは「配布漏れ」ではなく「Unit 7 で自分で作る前提」
Unit 9 で Services/OrderState.cs が見当たらないときは、GitHub を探し回るよりも、まず Unit 7 の「Handle the state of an order」セクションを開いて、掲載されている OrderState クラスのコードをプロジェクトに追加してください。
Servicesフォルダーをプロジェクト直下に作成OrderState.csを新規作成して Unit 7 のコードを貼り付け- namespace をプロジェクト名に合わせて確認
- ビルドしてエラーが消えたことを確認してから Unit 9 を続行
Microsoft Learn のハンズオンは「途中で作るファイル」が後半の前提になる構造が多いので、今回の経験をテンプレ化しておくと、Blazor 学習が一気にスムーズになります。

コメント