第15章:Extract Variable / Inline(式を読みやすく)🧠✨
長〜い式って、読んでるだけで脳が疲れるよね…😵💫💦 この章では、式に“名前”を付けて読みやすくする Extract Variable(= Introduce local variable) と、逆に“余計な一時変数”を消してスッキリさせる Inline(= Inline temporary variable) をセットで学ぶよ〜🪄✨
この章のゴール🎯✨
- 複雑な式を 「読める言葉」 に変える(=Extract Variable)🏷️💡
- 変数が増えすぎてゴチャゴチャしたときに 減らす判断 ができる(=Inline)🧹✨
- 短絡評価(&& / ||) を壊さない安全なやり方がわかる🛡️✅
- Visual Studio / VS Code で サクッと自動リファクタできるようになる⌨️⚡ (Quick Actions は Ctrl + . で開けるよ)(Microsoft Learn)
まずイメージ🍓:変数は“ミニ見出し”📌
Extract Variable(式→変数)✂️➡️📦
- 複雑な式の一部を 中間変数 にして、読みやすくする✨
- “意図”が見える名前にするのがコツ🏷️💕
Inline(変数→式)📦➡️✂️
- 意味が薄い一時変数を消して、ノイズを減らす✨
- “名付ける価値がない”なら消した方が読みやすいこともある🧼
1) Extract Variable(Introduce local variable)🏷️✨

いつ使う?🕒
- 式が長くて読めない😵💫
- 条件式が複雑でミスりそう💥
- 同じ計算(や同じ呼び出し)を何回もしている🔁
- デバッグで 途中の値を見たい👀(Watch に置ける!)
どうやる?(Visual Studio)⌨️✨
- 変数にしたい 式(expression)を選択する🖱️
- Ctrl + .(Quick Actions / Refactorings)を開く🎛️(Microsoft Learn)
- Introduce local variable を選ぶ✅(Microsoft Learn)
※右クリック → Quick Actions and Refactorings からでもOKだよ🖱️✨(Microsoft Learn)
どうやる?(VS Code)⌨️✨
- だいたい同じで、Ctrl + . → Refactorings → Extract Variable の流れ🪄 VS Code のリファクタ全体の考え方はこのページにまとまってるよ(Visual Studio Code)
例①:計算式が“読める”になる💎
Before(読みづらい…)😵💫
decimal total = price * quantity * (1m - discountRate) + shippingFee;
After(意味が見える!)✨
decimal subtotal = price * quantity;
decimal discounted = subtotal * (1m - discountRate);
decimal total = discounted + shippingFee;
ポイント💡
subtotal/discountedみたいに 値の意味が伝わる名前を付ける🏷️✨- “何をしてる式なのか”が一瞬で分かるようになるよ👀🌟
例②:条件式を“文章”にする🧩📝
Before(条件が長いと目が滑る…)🥺
if (user != null && user.IsActive && user.Plan != null && user.Plan.Type == PlanType.Premium)
{
GrantPremiumFeature(user);
}
After(安全に読みやすく)✨
bool isActiveUser = user?.IsActive == true;
bool isPremiumPlan = user?.Plan?.Type == PlanType.Premium;
if (isActiveUser && isPremiumPlan)
{
GrantPremiumFeature(user!);
}
ここ超大事⚠️✨
&&は短絡評価(左が false なら右を見ない)だよね🧠- でも、うっかりこうすると危険💥👇
// ❌危険:user.Plan が null のとき例外になる可能性
bool isPremiumPlan = user.Plan.Type == PlanType.Premium;
if (user != null && user.IsActive && isPremiumPlan) { ... }
✅安全に Extract したいなら
?.や== trueを使って null を吸収する- もしくは先に null を除外する(ガード節は次章で詳しくやるよ🚪✨)
2) Inline(Inline temporary variable)🧹✨
いつ使う?🕒
- 1回しか使わないのに変数が増えてて、読みにくい😵💫
- 変数名が薄い(
tmp,x,value)…😿 - “ただ置いただけ”の変数が多くてスクロールが長い📜💦
どうやる?(Visual Studio / VS Code)⌨️✨
- インラインしたい 一時変数にカーソルを置く🖱️
- Ctrl + .(Quick Actions / Refactorings)を開く🎛️(Microsoft Learn)
- Inline temporary variable を選ぶ✅(Microsoft Learn)
例:意味が薄い変数は消す🫧
Before(変数が増えてノイズかも)😵💫
decimal rate = 0.1m;
decimal tax = price * rate;
decimal total = price + tax;
After(この程度ならスッキリ)✨
decimal total = price + (price * 0.1m);
でもね…ここも判断があるよ🧠✨
0.1mが何か分からないなら、次章の Introduce Constant(マジックナンバー退治)でTaxRateにする方が気持ちいい🔢🧯- デバッグで途中の
taxを見たいなら、残すのもアリ👀✅
3) Extract と Inline の判断基準🧭✨
Extract Variable を選ぶとき✅
- その式に “名前を付ける価値” がある🏷️
- その値が ドメイン的に意味を持つ(例:
isEligibleForDiscount)💎 - 同じ式を2回以上使う(重複削減)🔁
- 条件式が複雑(読み間違い防止)🧩
Inline を選ぶとき✅
- 変数名が説明になってない(
tmp,x)😿 - 1回しか使わない&式も短い🫧
- 変数が多すぎて “本筋” が見えない🌫️
4) よくある落とし穴⚠️(ここで事故が減る!)🛡️✨
落とし穴①:短絡評価を壊す(&& / ||)💥
- 条件式の一部を先に変数にしちゃうと、本来は評価されないはずの右側が評価されることがある😵💫
- 対策✅:
?.やis not nullなどで安全にする/評価順を変えない
落とし穴②:副作用がある式は慎重に🎲⏰
例:DateTime.Now、乱数、I/O、状態を変えるメソッドなど
- Extract すると「呼ばれるタイミング」や「回数」が変わる可能性があるよ💦
- 対策✅:**“動作が変わらない?”**を必ず確認(テスト・実行・差分チェック)🧪✅
落とし穴③:変数名がフワフワ☁️
resultdatavalueだけだと、読者の脳内で補完できない😿- 対策✅:
is〜/has〜/total〜/discounted〜みたいに意味が分かる形へ🏷️✨
5) ミニ演習📝✨(手を動かすと一気に身につく!)💪💕
お題:条件式を読みやすくして、不要な変数は Inline してみよう🪄
Before
public static bool CanCheckout(User? user, Cart cart)
{
var price = cart.Subtotal();
var ok = user != null && user.IsActive && user.Address != null && user.Address.ZipCode.Length == 7
&& price > 0 && (price + cart.ShippingFee()) <= user.CreditLimit;
return ok;
}
ステップA(Extract Variable)🏷️✨
user周りの条件を “言葉” にするprice + cart.ShippingFee()みたいな式を分けて意味を付ける
ステップB(Inline)🧹✨
okが “ただの戻り値” で、式が十分読めるなら消す(Inline する)
例(After の一例)✅✨
public static bool CanCheckout(User? user, Cart cart)
{
bool isActiveUser = user?.IsActive == true;
bool hasValidZip = user?.Address?.ZipCode?.Length == 7;
decimal subtotal = cart.Subtotal();
decimal shipping = cart.ShippingFee();
decimal total = subtotal + shipping;
return isActiveUser
&& hasValidZip
&& subtotal > 0
&& user is not null
&& total <= user.CreditLimit;
}
ポイント💡
hasValidZipみたいな 質問文っぽい名前は条件式と相性が良いよ📝✨return ok;は Inline して return 式にすると、1行減ってスッキリしがち🧹
6) AI拡張の使いどころ🤖✨(安全にラクする💕)
命名案を出してもらう🏷️
- 「この式の意図が伝わる変数名を5つ出して。
is〜/has〜も混ぜて」💬✨ - 「ドメイン用語っぽい名前にして(例:checkout/credit limit/shipping)」💬📚
Extract/Inline 候補を探してもらう🔎
- 「読みづらい式を3つ指摘して、Extract Variable の候補を出して」🤖🧠
- 「Inline した方が良い一時変数があれば理由付きで」🧹✨
⚠️採用ルールはこれだけ守ると安心🛡️
- 提案は 差分で見る👀
- テスト or 実行で確認✅
- “意味”の最終決定は人間がする🏁✨
7) まとめチェックリスト✅🧾✨
- 長い式に 名前を付けて、意図が読めるようになった🏷️
-
&& / ||の 短絡評価を壊してない🧠🛡️ - 副作用がある式(時間・乱数・I/O)をうっかり Extract してない🎲⏰
- 意味が薄い一時変数は Inline してノイズを減らした🧹
- Ctrl + . の Quick Actions でサクッとやれた🎛️⚡(Microsoft Learn)
参考:最新版の言語・SDKの位置づけ🆕✨
C# は C# 14 が最新リリースで、.NET 10 上でサポートされているよ📦🌟(Microsoft Learn) また、.NET 10 のリリース案内では Visual Studio 2026 や VS Code の C# Dev Kit 側の更新にも触れられているよ🛠️✨(devblogs.microsoft.com)