設計から手入力までの実践ガイド
“コードを丸ごと貼るだけ” では身につかないと思う人へ——
狙い
- 設計を意識した分割手順 と
- Visual Studio での「入力のコツ」 をセットで示し、“とりあえずコピペ” にならない開発プロセスを体験してもらう。
目次
0. ベースとなる設計
1. まずは 設計メモ を 5 分で書く
チェック項目 | 例(ターン制バトルの場合) |
---|---|
目的 | バトルの進行管理 をコアにした最小ロジック |
主な「もの」 | キャラクター / 戦闘 |
主な「動作」 | 攻撃する, ダメージを受ける, 勝敗を判定 |
責務分け | 「モデル層: キャラ情報」+「サービス層: 戦闘の段取り」 |
依存向き | Battle → Character だけ(逆は持たない) |
※ 紙に箇条書き or Visual Studio の Scratch Pad に残すだけで OK。
実装中に迷ったらこのメモに立ち返る癖を付けると“クラス肥大”を防げる。
2. クラスの骨格 を「手で打つ」ワザ
目的 | 入力ショートカット / 機能 | 使いどころ |
---|---|---|
自動プロパティ | prop → Tab×2 | public int HP { get; private set; } を即生成 |
フィールド+全プロパティ | propfull → Tab×2 | バッキングフィールドを含む形で作る |
コンストラクタの引数展開 | ctor → Tab×2 | 「必須パラメータはコンストラクタへ」習慣付け |
Console.WriteLine | cw → Tab×2 | ログ出力を素早く追加 |
未参照のクラス名・名前空間 | Ctrl +. | using の追加や自動生成を提案 |
メソッドのひな型 | override と打つ → 候補選択 → Tab | 抽象メソッドを実装するときに便利 |
ポイント
- 骨格 を先に入力してしまうと、実装漏れを防げて 小さな単位でビルド → 実行 のサイクルが回しやすい。
- Snippet は“Tab を 2 回”で展開。最初は覚えるより 右クリック ▸ Snippet を挿入 で一覧を見るとイメージがつかみやすい。
3. スケルトン作成フェーズ(10 分以内で終わらせる)
- 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);
}
}
- Player.cs と Enemy.cs を Snippet ベースで複製
- Player: そのまま Act 内を固定ダメージ攻撃に
- Enemy: Random をフィールド追加(propfull で private static にしても良い)
- Services フォルダー → Battle.cs
- List<Character> を propfull で作り、コンストラクタで .ToList()
- Run() と ExecuteTurn() の空メソッドを置き、TODO コメントで後回し宣言
- Program.cs に Main() を生成(main Snippet)し、Battle を new だけ書く。
ここまでで “エラーの数 0、警告だけ” を目指す。
ビルドが通る骨格 を作ることで 実装フェーズ は安心して書き替えられる。
4. 肉付けフェーズ(ビルド→テストを細かく)
- TODO を順番に潰す
- TakeDamage に Math.Max を実装 ⇒ F5 でビルドテスト
- 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;
}
- 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 つの習慣
- 骨格→ビルド→肉付け の 2 ステップ実装
- Snippet & ショートカット を 1 つずつ覚え、入力時間を設計思考に回す
- 手元メモ(目的・責務・依存向き)に立ち返りながら“何をどこに書くか”を判断
この流れで進めれば、「ただ貼り付けただけで動いたけど仕組みが分からない…」という不安は激減します。ぜひ自分のペースで手を動かし、設計 → 入力 → 実行 → リファクタリングの循環を体で覚えてください。
訪問数 2 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません