導入
実務のC#開発では、ログ・JSON・DBアクセス・検証・リトライといった「どのアプリでも必要になる処理」を、自分で全部書くことはしません。世界中で使われ、テストされ尽くしたNuGetパッケージ(ライブラリ)を組み合わせて作ります。この章に入る前に、「なぜライブラリに頼るのか」を、手作りのコードで体感しておきましょう。
図解
flowchart TB
APP["あなたのアプリ"]
subgraph NUGET["代表的なNuGetパッケージ(この章で扱う)"]
J["JSON<br/>Newtonsoft.Json"]
D["DBアクセス<br/>Dapper"]
L["ログ<br/>log4net"]
M["マッピング<br/>AutoMapper"]
V["入力検証<br/>FluentValidation"]
P["回復性<br/>Polly"]
C["CSV<br/>CsvHelper"]
T["テスト<br/>Moq"]
MED["メッセージ<br/>MediatR"]
H["文字列整形<br/>Humanizer"]
R["型安全HTTP<br/>Refit"]
end
APP --> NUGET
style NUGET fill:#e3f2fd
サンプル
// 例:「一時的な失敗はやり直したい」— リトライを"自作"するとこうなる
int attempt = 0;
string Fetch()
{
attempt++;
if (attempt < 3) throw new Exception("一時的な失敗"); // 最初の2回はわざと失敗
return "成功データ";
}
string result = "(未取得)";
for (int i = 1; i <= 5; i++) // 最大5回まで挑戦
{
try { result = Fetch(); break; } // 成功したら抜ける
catch (Exception ex) { Console.WriteLine($"{i}回目失敗: {ex.Message}"); }
}
Console.WriteLine($"結果: {result}");
// 1回目失敗: 一時的な失敗
// 2回目失敗: 一時的な失敗
// 結果: 成功データ
- 上のリトライは、待ち時間・回数上限・例外の種類を増やすほど複雑化する。この定番処理を
Pollyは宣言的な1行にする - ログ・JSON・DB・検証も同様で、「よくある処理」はたいてい定番ライブラリが存在する
- ライブラリを使う利点:テスト済み・高速・仕様が枯れている・情報が多い。自作はバグの温床になりやすい
- 選ぶ基準:ダウンロード数・更新の活発さ・ライセンス(商用条件が変わることもあるので確認する)
演習
int attempt = 0;
string Load()
{
attempt++;
if (attempt < 2) throw new Exception("失敗"); // 最初の1回だけ失敗する
return "OK";
}
// TODO: Load() を最大3回までリトライし、成功したら "結果: OK" と1行だけ出力してください
// (失敗時のログは出さなくてよい)
___
- 期待される出力:
結果: OK
ヒント1を見る
forループの中でtry { r = Load(); break; } catch { }とし、成功したらbreakで抜けます
ヒント2を見る
string r = ""; for (int i = 0; i < 3; i++) { try { r = Load(); break; } catch { } } Console.WriteLine($"結果: {r}");
まとめ
- 「どのアプリでも必要な処理」は自作せず、テスト済みのNuGetパッケージに任せる
- ライブラリ選定はダウンロード数・更新頻度・ライセンスで判断する
- 次のレッスンから、実務の定番パッケージを1つずつ手を動かして使う
次回: 老舗のJSONライブラリNewtonsoft.Jsonです。