Microsoft Learn「Interact with data in Blazor web apps」でOrderState.csが見つからない原因と解決手順(Unit 7から作成)

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 内の特定セクションにコードが掲載されていることです。次の手順で見つけるのが最短です。

  1. Microsoft Learn のモジュール「Interact with data in Blazor web apps」を開く
  2. Unit 7 のページへ移動する
  3. ブラウザ上で Ctrl + F(Mac は Command + F)を押してページ内検索を開く
  4. 検索欄に Handle the state of an order と入力して該当セクションへ移動する
  5. そのセクション内に掲載されている OrderState クラスのコードが、Services/OrderState.cs の中身に相当する

ページ内検索は、英語セクション名だけでなくコード側のキーワードで当てるのも効果的です。特に、本文の見出しが翻訳表示になっている場合は「英語の見出しを探しても見つからない」ことがあるため、コードの識別子で探すと安定します。

Ctrl+F でおすすめの検索語見つかる場所の目安狙い
Handle the state of an orderUnit 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 共通)

  1. プロジェクト内に Services フォルダーが無ければ作成する(例:BlazingPizza/Services)
  2. OrderState.cs という C# ファイルを新規作成する
  3. Learn の Unit 7「Handle the state of an order」セクションに掲載されている OrderState クラスのコードを、そのまま貼り付ける
  4. 貼り付けたら namespace がプロジェクトと一致しているかを確認する
  5. 保存してビルドし、参照エラーが解消されることを確認する

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 学習が一気にスムーズになります。

この記事を書いた人

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

コメント

コメントする

目次