設計から手入力までの実践ガイド

“コードを丸ごと貼るだけ” では身につかないと思う人へ——

狙い

  • 設計を意識した分割手順 と
  • Visual Studio での「入力のコツ」 をセットで示し、“とりあえずコピペ” にならない開発プロセスを体験してもらう。

0. ベースとなる設計


1. まずは 設計メモ を 5 分で書く

チェック項目例(ターン制バトルの場合)
目的バトルの進行管理 をコアにした最小ロジック
主な「もの」キャラクター / 戦闘
主な「動作」攻撃するダメージを受ける勝敗を判定
責務分けモデル層: キャラ情報」+「サービス層: 戦闘の段取り」
依存向きBattle → Character だけ(逆は持たない)

※ 紙に箇条書き or Visual Studio の Scratch Pad に残すだけで OK。

 実装中に迷ったらこのメモに立ち返る癖を付けると“クラス肥大”を防げる。


2. クラスの骨格 を「手で打つ」ワザ

目的入力ショートカット / 機能使いどころ
自動プロパティprop → Tab×2public int HP { get; private set; } を即生成
フィールド+全プロパティpropfull → Tab×2バッキングフィールドを含む形で作る
コンストラクタの引数展開ctor → Tab×2「必須パラメータはコンストラクタへ」習慣付け
Console.WriteLinecw → Tab×2ログ出力を素早く追加
未参照のクラス名・名前空間Ctrl +.using の追加や自動生成を提案
メソッドのひな型override と打つ → 候補選択 → Tab抽象メソッドを実装するときに便利

ポイント

  • 骨格 を先に入力してしまうと、実装漏れを防げて 小さな単位でビルド → 実行 のサイクルが回しやすい。
  • Snippet は“Tab を 2 回”で展開。最初は覚えるより 右クリック ▸ Snippet を挿入 で一覧を見るとイメージがつかみやすい。

3. スケルトン作成フェーズ(10 分以内で終わらせる)

  1. Models フォルダーを右クリック → 新しいクラス → Character.cs
namespace TurnBasedRpgFw48.Models
{
    public abstract class Character
    {
        // prop→Tab×2 を3回でプロパティ3つ
        public string Name { get; }
        public int HP { get; private set; }
        public int Atk { get; }

        // ctor→Tab×2 でコンストラクタを生成後、引数を追加
        protected Character(string name, int hp, int atk)
        {
            Name = name;
            HP   = hp;
            Atk  = atk;
        }

        public void TakeDamage(int amount) { /* 後で実装 */ }

        // override 用ひな型を先に置く
        public abstract void Act(Character opponent);
    }
}
  1. Player.cs と Enemy.cs を Snippet ベースで複製
    • Player: そのまま Act 内を固定ダメージ攻撃に
    • Enemy: Random をフィールド追加(propfull で private static にしても良い)
  2. Services フォルダー → Battle.cs
    • List<Character> を propfull で作り、コンストラクタで .ToList()
    • Run() と ExecuteTurn() の空メソッドを置き、TODO コメントで後回し宣言
  3. Program.cs に Main() を生成(main Snippet)し、Battle を new だけ書く。

ここまでで “エラーの数 0、警告だけ” を目指す。

ビルドが通る骨格 を作ることで 実装フェーズ は安心して書き替えられる。


4. 肉付けフェーズ(ビルド→テストを細かく)

  1. TODO を順番に潰す
    • TakeDamage に Math.Max を実装 ⇒ F5 でビルドテスト
  2. Battle.ExecuteTurn を 5 行だけで書き、まずは1 ターンだけ動くか確認
foreach (var actor in _actors.Where(a => a.IsAlive))
{
    var target = _actors.First(a => a != actor && a.IsAlive);
    actor.Act(target);
    if (!target.IsAlive) break;
}
  1. while ループを Run で完成させ、「勝敗が出る」までをゴールにする。

Tips — “こま切れ成功体験”

  • 1 つの関数が動くたびに 必ずコンソールで見る
  • デバッグ実行 (F5) より Ctrl + F5 の「デバッグなし」で素早く試す癖を付けるとテンポが上がる。

5. コーディング中に役立つ リファクタリング小技

ショートカット効果使いどころ
Ctrl + R, R変数/メソッドのリネーム“HP” → “HitPoint” に統一するときなど
Ctrl + K, C / U選択行をコメント化 / 解除動作比較テストをするときに
Ctrl + K, Dドキュメント全体を整形“波かっこ段差” を一発修正
Alt + Shift + ↑/↓行を上下に複製同じ構文を連続するとき
Ctrl + .using 自動追加 / 生成エラー行にキャレットを置いて提案を見る

6. 設計の次ステップを感じ取る

気づき伸ばす方向
Battle がだんだん長くなる行動順ロジックを ITurnOrderStrategy に抽出してみる
Random がテストを不安定にIRandom インターフェースを渡し、ユニットテストでダミー注入
キャラクター固有挙動が if 文だらけStrategy / State パターンの調査を開始

これらは 実装面倒になってから探す より、小さいうちにメモだけ起こしておくのがコツ。


7. まとめ ― “写経” で終わらせない 3 つの習慣

  1. 骨格→ビルド→肉付け の 2 ステップ実装
  2. Snippet & ショートカット を 1 つずつ覚え、入力時間を設計思考に回す
  3. 手元メモ(目的・責務・依存向き)に立ち返りながら“何をどこに書くか”を判断

この流れで進めれば、「ただ貼り付けただけで動いたけど仕組みが分からない…」という不安は激減します。ぜひ自分のペースで手を動かし、設計 → 入力 → 実行 → リファクタリングの循環を体で覚えてください。

訪問数 2 回, 今日の訪問数 1回