本文へスキップ
BecomeCoder

C#実践コース · 第6章 代表的なNuGetパッケージとその使い方 · レッスン29

NuGetパッケージという発想 ― 車輪の再発明をやめる

ブラウザで完結

導入

実務の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です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。