Skip to content

第25章 研修全体のまとめと到達確認演習

この章では、ここまで学習してきたC#研修の内容を振り返り、最後に個人で小さな到達確認演習に取り組みます。

この研修では、C#の基本文法から始まり、クラス、オブジェクト指向、例外処理、Oracle Database接続、Webアプリ、Windowsフォームアプリまで学習してきました。

これまでに扱った主な内容は次の通りです。

C#の基本文法
クラスとオブジェクト
配列、List、LINQ
例外処理
Oracle Database接続
ASP.NET Core MVC
Windowsフォームアプリ
DataGridView
登録・更新・削除
Gitによる提出

すべてを完全に覚えている必要はありません。

大切なのは、現場で既存のコードを見たときに、次のように考えられることです。

このクラスは何を表しているのか
このメソッドは何をしているのか
どこでDBに接続しているのか
どこで画面に表示しているのか
どこで入力値を受け取っているのか
エラーが起きたとき、どこを確認すればよいのか

この章では、研修全体の流れを整理し、最後に小さな演習を通して、自分がどこまで理解できているかを確認します。


この章でできるようになること

Section titled “この章でできるようになること”

この章を終えると、次のことができるようになります。

  • C#研修で学んだ内容を大きな流れとして説明できる
  • コンソールアプリ、Webアプリ、Windowsフォームアプリの違いを説明できる
  • クラス、プロパティ、メソッドの役割を説明できる
  • DB接続処理の基本的な流れを説明できる
  • WebアプリにおけるController、Model、Viewの役割を説明できる
  • WindowsフォームアプリにおけるForm、イベント、DataGridViewの役割を説明できる
  • 既存コードを読むときの確認ポイントを説明できる
  • 小さな機能追加を自分で進められる
  • Gitで成果物を提出できる
  • 今後の学習課題を自分で整理できる

項目内容
開発環境Visual Studio 2022
対象これまで作成したC#プロジェクト
DBOracle Database
接続ユーザーpingt
使用する表employeesdepartments
提出方法Gitでcommit、push

25-1 研修全体の流れを振り返る

Section titled “25-1 研修全体の流れを振り返る”

研修の前半では、C#の基本を学習しました。

変数
データ型
演算子
if文
switch文
for文
while文
配列
List
メソッド
クラス
プロパティ
コンストラクター
継承
抽象クラス
インターフェイス
例外処理

これらは、どの種類のアプリを作る場合でも必要になる基礎です。

コンソールアプリ、Webアプリ、Windowsフォームアプリのどれを作る場合でも、最終的にはC#のコードを書きます。


中盤では、C#からOracle Databaseに接続しました。

基本的な流れは次の通りです。

接続文字列を用意する
OracleConnectionで接続する
OracleCommandでSQLを実行する
OracleDataReaderで結果を読み取る
オブジェクトに変換する
List<T>として返す

この流れは、コンソールアプリでも、Webアプリでも、Windowsフォームアプリでも共通でした。


後半:WebアプリとWindowsフォームアプリ

Section titled “後半:WebアプリとWindowsフォームアプリ”

後半では、2種類の画面アプリを体験しました。

ASP.NET Core MVC
→ ブラウザーで利用するWebアプリ
Windowsフォームアプリ
→ Windows上で動くデスクトップアプリ

表示方法は違いますが、どちらも次の流れは共通しています。

入力を受け取る
必要な処理を行う
DBに問い合わせる
結果を画面に表示する

25-2 コンソールアプリ、Webアプリ、Windowsフォームアプリの違い

Section titled “25-2 コンソールアプリ、Webアプリ、Windowsフォームアプリの違い”

コンソールアプリは、文字入力と文字表示を中心に動きます。

Mainメソッドから始まる
上から順番に処理される
Console.WriteLineで表示する
Console.ReadLineで入力する

学習初期には、処理の流れを理解しやすいという利点があります。


Webアプリは、ブラウザーからアクセスして利用します。

ASP.NET Core MVCでは、次の役割に分かれます。

Controller
リクエストを受け取り、処理の流れを決める
Model
画面で扱うデータを表す
View
HTMLとして画面を表示する
Repository
DBアクセス処理を担当する

Webアプリでは、URL、Controller、Viewの対応関係を意識することが重要です。


Windowsフォームアプリは、画面上の部品を操作して利用します。

Form
Button
TextBox
Label
DataGridView
MessageBox

処理は、ボタンクリックなどのイベントをきっかけに実行されます。

ボタンをクリックする
クリックイベントが実行される
DB処理や画面表示を行う

Windowsフォームアプリでは、画面部品の Name とコードの対応を意識することが重要です。


この研修では、さまざまなクラスを作成しました。

Employee
EmployeeListItem
EmployeeDetail
EmployeeEditModel
EmployeeRepository

それぞれの役割は異なります。

クラス主な役割
Employee社員そのものを表す
EmployeeListItem一覧表示用の1行分を表す
EmployeeDetail詳細表示用のデータを表す
EmployeeEditModel登録・更新入力用のデータを表す
EmployeeRepositoryDBアクセス処理を担当する

同じ社員情報でも、画面や処理によって必要な形が異なります。

そのため、用途に応じてクラスを分けることがあります。


クラスには、プロパティとメソッドを定義できます。

public class Employee
{
public int EmployeeId { get; set; }
public string EmployeeName { get; set; } = "";
public string GetDisplayText()
{
return $"{EmployeeId}{EmployeeName}";
}
}

プロパティは、データを表します。

EmployeeId
EmployeeName
DepartmentName
Salary

メソッドは、処理を表します。

GetDisplayText
GetEmployeeListItems
Insert
Update
Delete

現場でコードを読むときは、まず次のように確認します。

このクラスは何を表しているか
どのプロパティを持っているか
どのメソッドが何をしているか

25-4 DBアクセス処理の振り返り

Section titled “25-4 DBアクセス処理の振り返り”

SELECT文を実行するときは、主に次のクラスを使いました。

OracleConnection
OracleCommand
OracleDataReader

流れは次の通りです。

using (OracleConnection connection = new OracleConnection(_connectionString))
{
connection.Open();
using (OracleCommand command = new OracleCommand(sql, connection))
using (OracleDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// 1行分のデータを読み取る
}
}
}

ExecuteReader は、SELECT結果を読み取るときに使います。


登録・更新・削除では、ExecuteNonQuery を使いました。

int count = command.ExecuteNonQuery();

主に次のSQLで使います。

INSERT
UPDATE
DELETE

UPDATEDELETE では、処理された行数を確認できます。

1
1件処理された
0
対象データが見つからなかった

DBのNULLは、C#では DBNull.Value として扱います。

DBから読み取るとき:

employee.Salary = reader["salary"] == DBNull.Value
? null
: Convert.ToDecimal(reader["salary"]);

DBへNULLを渡すとき:

command.Parameters.Add("salary", OracleDbType.Decimal).Value =
employee.Salary.HasValue ? employee.Salary.Value : DBNull.Value;

DBを扱うときは、NULLの扱いを常に意識します。


25-5 既存システムを読むときの観点

Section titled “25-5 既存システムを読むときの観点”

現場では、新規開発だけでなく、既存システムの改修や調査を行うことが多くあります。

そのときは、いきなり全体を理解しようとせず、次の観点で少しずつ確認します。


利用者に見えている画面から確認します。

どの画面か
どのボタンか
どの入力欄か
どの一覧か

Windowsフォームアプリなら、フォームとコントロール名を確認します。

Webアプリなら、URL、Controller、Viewを確認します。


画面操作に対応する処理を確認します。

Windowsフォームアプリ:

btnSearch_Click
btnInsert_Click
btnUpdate_Click
btnDelete_Click

Webアプリ:

Index
Details
Create
Edit
Delete

どの操作でどのメソッドが動くかを確認します。


DBにアクセスしている処理を確認します。

GetEmployeeListItems
FindById
Insert
Update
Delete

Repositoryでは、次の点を確認します。

どのSQLを実行しているか
どのテーブルを使っているか
どの列を取得しているか
どの条件で検索しているか
どのパラメーターを使っているか
NULLをどう扱っているか

エラーが起きた場合は、次の順番で確認します。

エラーメッセージを読む
どの操作で起きたか確認する
どのメソッドで起きたか確認する
SQLを確認する
SQL*Plusで同じSQLを試す
入力値を確認する
DBの制約を確認する

特にOracleでは、ORA- で始まるエラー番号が重要です。


この研修では、日々の成果をGitで提出してきました。

基本操作は次の通りです。

Terminal window
git status
git add .
git commit -m "メッセージ"
git push

Gitは、現場でも非常によく使われます。

この研修では高度なブランチ操作までは扱いませんでしたが、少なくとも次の習慣は重要です。

作業したら状態を確認する
意味のある単位でcommitする
提出や共有のためにpushする
エラーが出たら内容を確認する
自己判断で無理に進めすぎない

この章の最後に、個人で到達確認演習を行います。

目的は、完成度を競うことではありません。

次の力を確認することが目的です。

仕様を読んで作業できるか
既存コードを参考にできるか
DBからデータを取得できるか
画面に表示できるか
入力値をチェックできるか
エラー時に確認できるか
Gitで提出できるか

制限時間内に、できたところまでを提出します。

未完成でも構いません。

大切なのは、次のことを説明できることです。

どこまでできたか
どこで詰まったか
どのエラーが出たか
次に何を確認すべきか

25-8 到達確認演習A:部署一覧表示アプリ

Section titled “25-8 到達確認演習A:部署一覧表示アプリ”

Oracle Databaseの departments 表を利用して、部署一覧を表示するアプリを作成してください。

WebアプリまたはWindowsフォームアプリのどちらで作成しても構いません。

講師から指定がある場合は、指定された形式で作成してください。


使用する表は departments です。

主な列:

department_id
department_name
manager_id

次の機能を作成してください。

部署一覧を表示する
部署IDを表示する
部署名を表示する
管理者IDを表示する

表示例:

1:総務:管理者ID 1001
2:営業:管理者ID 1002
3:開発:管理者ID 1003

次の構成を参考にしてください。

DepartmentsController
DepartmentListItem
DepartmentRepository
Views/Departments/Index.cshtml

処理の流れ:

/Departments にアクセスする
DepartmentsController.Index が呼ばれる
DepartmentRepository.GetDepartmentListItems が呼ばれる
departments表をSELECTする
Viewで一覧表示する

Windowsフォームアプリで作成する場合

Section titled “Windowsフォームアプリで作成する場合”

次の構成を参考にしてください。

Form1
DepartmentListItem
DepartmentRepository
DataGridView

処理の流れ:

一覧表示ボタンをクリックする
DepartmentRepository.GetDepartmentListItems が呼ばれる
departments表をSELECTする
DataGridViewに表示する

25-9 到達確認演習B:社員検索機能の追加

Section titled “25-9 到達確認演習B:社員検索機能の追加”

既存の社員一覧アプリに、検索機能を追加してください。

WebアプリまたはWindowsフォームアプリのどちらで作成しても構いません。


次の検索条件を1つ以上実装してください。

社員名で部分一致検索
部署IDで検索
給与が未設定の社員だけを表示

余裕があれば、複数条件を組み合わせてください。


SELECT
e.employee_id,
e.employee_name,
d.department_name,
e.hiredate,
e.salary
FROM
employees e
JOIN departments d
ON e.department_id = d.department_id
WHERE
e.employee_name LIKE :keyword
ORDER BY
e.employee_id

C#側では、前後に % を付けます。

command.Parameters.Add("keyword", OracleDbType.Varchar2).Value = "%" + keyword + "%";

WHERE e.department_id = :departmentId

部署IDは整数として受け取ります。

int.TryParse(input, out int departmentId)

WHERE e.salary IS NULL

DBのNULLを検索する場合は、= NULL ではなく IS NULL を使います。


25-10 到達確認演習C:小さなCRUD機能

Section titled “25-10 到達確認演習C:小さなCRUD機能”

余裕がある人は、社員情報の登録、更新、削除のいずれか1つを追加してください。

すべてを完成させる必要はありません。

まずは1つの操作を確実に動かすことを目標にします。


次の中から1つ以上選んでください。

社員を1件登録する
社員名を更新する
社員を1件削除する

INSERT INTO employees
(
employee_id,
employee_name,
yomi,
job_id,
manager_id,
hiredate,
salary,
commission,
department_id
)
VALUES
(
:employeeId,
:employeeName,
:yomi,
:jobId,
:managerId,
:hireDate,
:salary,
:commission,
:departmentId
)

UPDATE employees
SET
employee_name = :employeeName
WHERE
employee_id = :employeeId

DELETE FROM employees
WHERE employee_id = :employeeId

削除処理を作成する場合は、確認メッセージを表示してください。


この演習の制限時間は 120分 です。

時間内に完成しなくても構いません。

できたところまでを提出してください。


次の流れで進めてください。

1. どの課題に取り組むか決める
2. 画面または機能の構成を考える
3. 必要なModelを作る
4. Repositoryを作る
5. 画面からRepositoryを呼び出す
6. 動作確認する
7. Gitに提出する
8. 振り返りメモを書く

困った場合は、次の順番で確認してください。

エラーメッセージを読む
対象のファイルを確認する
直前に変更した箇所を確認する
SQL*PlusでSQLを確認する
入力値が想定通りか確認する
講師に質問する

質問するときは、次の情報を伝えます。

何をしようとしていたか
どの画面・どのボタンか
どのエラーが出たか
どこまで確認したか

到達確認演習では、次の内容を提出してください。

作成したプロジェクト
Gitへのcommit、push
振り返りメモ

振り返りメモは、Markdownファイルとして作成します。

ファイル名例:

final_reflection.md

次の内容を書いてください。

# 最終演習 振り返り
## 取り組んだ課題
例:到達確認演習A 部署一覧表示アプリ
## できたこと
- 部署一覧をDBから取得できた
- DataGridViewに表示できた
## 難しかったこと
- OracleDataReaderから値を取り出すところ
- DataGridViewの列見出し変更
## エラーと対応
- ORA-xxxxx が出た
- SQL*PlusでSQLを確認した
## 今後復習したいこと
- SQLパラメーター
- nullの扱い
- MVCのControllerとViewの対応

この演習では、完成度だけでなく、次の観点を確認します。

観点内容
仕様理解指示された内容を読んで作業できているか
基本文法C#の基本的な構文を使えているか
クラス利用ModelやRepositoryを分けて使えているか
DB接続Oracle Databaseに接続し、SQLを実行できているか
画面表示取得したデータを画面に表示できているか
入力チェック必要な入力チェックができているか
例外対応エラー時にメッセージ確認できているか
Git提出commit、pushできているか
振り返り自分の状況を説明できているか

すべてを完璧に満たす必要はありません。

現時点でどこまでできるかを確認し、今後の学習につなげることが大切です。


つまずき原因対応
何から始めればよいか分からない全体を一度に考えているまず一覧表示だけ作る
SQLは合っているのに画面に出ない画面側に渡していないRepositoryの戻り値と画面表示処理を確認する
Oracle接続でエラーになるDB起動や接続文字列の問題SQL*Plusで接続確認する
Viewで型エラーになる@model と渡している型が違うControllerの return View(...) を確認する
DataGridViewに列が出ないDataSource が設定されていないDataSource を確認する
NULLでエラーになるDBNull.Value を確認していない変換前にNULL確認する
検索結果が0件になるSQL条件や入力値が違うSQL*Plusで同じ条件を試す
Gitにpushできないリモートや認証の問題エラーメッセージを確認し講師に相談する

研修全体を振り返り、次の項目を確認してください。

  • C#の基本文法を使って簡単な処理を書ける
  • クラス、プロパティ、メソッドの役割を説明できる
  • List<T> を使って複数データを扱える
  • LINQで一覧を検索・絞り込みできる
  • 例外処理の基本を書ける
  • Oracle DatabaseにC#から接続できる
  • SELECT結果をオブジェクトに変換できる
  • DBNull.Value を考慮できる
  • SQLパラメーターを使える
  • ASP.NET Core MVCの基本構成を説明できる
  • Windowsフォームアプリのイベント処理を説明できる
  • DataGridViewに一覧を表示できる
  • Repositoryの役割を説明できる
  • Gitで成果物を提出できる
  • 自分が今後復習すべき内容を説明できる

時間があれば、隣の人または近くの人と、次の内容を説明し合います。

  1. 今回取り組んだ課題は何ですか。
  2. どのような機能を作りましたか。
  3. どのクラスを作成しましたか。
  4. DBアクセスはどこに書きましたか。
  5. 一番難しかったところはどこですか。
  6. エラーが出た場合、どのように確認しましたか。
  7. 今後、復習したい内容は何ですか。

発表する場合は、完成していない部分があっても構いません。

できたこと
できなかったこと
原因として考えたこと
次に確認したいこと

を説明できることが大切です。


演習が終わったら、できたところまでをGitに提出します。

Terminal window
git status
git add .
git commit -m "Chapter25 最終到達確認演習"
git push

振り返りメモも忘れずに追加してください。

Terminal window
git add final_reflection.md
git commit -m "最終演習の振り返りを追加"
git push

すでにまとめてcommitしている場合は、1回のcommitでも構いません。


  • 到達確認演習に取り組んだ
  • 作成したコードを保存した
  • DB接続が必要な場合、SQL*Plusでも確認した
  • 画面で動作確認した
  • エラーが残っている場合、内容をメモした
  • final_reflection.md を作成した
  • Gitにcommitした
  • Gitにpushした
  • どこまでできたか説明できる
  • 今後復習したい内容を説明できる

この章では、C#研修全体を振り返り、到達確認演習に取り組みました。

この研修で学習した内容は、現場でC#の既存システムを読むための土台になります。

特に重要な点は次の通りです。

  • C#の基本文法は、どの種類のアプリでも必要になる
  • クラスは、役割ごとに分けると読みやすくなる
  • DBアクセス処理は、Repositoryなどに分けると見通しがよくなる
  • Oracle Database接続では、接続、SQL実行、DataReader、オブジェクト変換の流れが基本になる
  • DBのNULLは DBNull.Value として扱う必要がある
  • SQLに値を渡すときは、文字列連結ではなくSQLパラメーターを使う
  • Webアプリでは、Controller、Model、Viewの役割を意識する
  • Windowsフォームアプリでは、Form、イベント、DataGridViewの役割を意識する
  • エラーが出たときは、エラーメッセージ、SQL、入力値、DB状態を順番に確認する
  • Gitで作業内容を提出する習慣は、現場でも重要である

研修終了後も、すべてを一度に理解しようとする必要はありません。

現場では、分からないコードに出会うことが普通です。

そのときに、

処理の入口はどこか
どのクラスが何を担当しているか
DBアクセスはどこか
画面表示はどこか
エラーは何を示しているか

を一つずつ確認できれば、少しずつ既存システムを読めるようになります。

この研修で作成したコードと、自分の振り返りメモを、今後の復習材料として活用してください。