NuGetとは、Microsoftが提供する.NET開発向けのパッケージ管理システムのこと。ライブラリ導入と依存関係管理の仕組みを解説します。

システム開発・テクノロジー
NuGetとは?ざっくりと3行で
  • Microsoftが提供する.NET開発向けのパッケージ管理システムのこと。ライブラリ(パッケージ)の検索・インストール・更新・依存関係の管理を自動化する
  • JavaScriptのnpm・PythonのpipのようなものでNuGetは.NETエコシステムの標準パッケージマネージャーだ。必要なライブラリをコマンド1つで導入でき依存する別のライブラリも自動的に解決される
  • nuget.orgという公式のパッケージリポジトリに数十万のパッケージが公開されており、Newtonsoft.Json・Entity Framework・xUnitなど.NET開発で定番のライブラリがNuGet経由で配布されている

【深掘り】これだけ知ってればOK!

NuGetの基本的な仕組みを整理しよう。パッケージ:.nupkg形式でまとめられたライブラリ・ツール。nuget.org:公式のパッケージリポジトリ(ホスティングサービス)。パッケージマネージャー:Visual StudioのGUI・dotnet CLI・Package Manager Consoleの3つの方法で操作できる。依存関係解決:あるパッケージが依存する別のパッケージを自動的にインストールする。

NuGetの基本的な使い方を理解しよう。dotnet CLIでは`dotnet add package Newtonsoft.Json`でパッケージを追加する。Visual StudioではGUIのNuGetパッケージマネージャーで検索・インストールできる。インストールしたパッケージとバージョンは.csprojファイルのPackageReferenceに記録され、`dotnet restore`で復元できる。

セマンティックバージョニングとNuGetの関係を理解しよう。NuGetのパッケージはセマンティックバージョニング(MAJOR.MINOR.PATCH)に従う。MAJORは互換性のない変更・MINORは後方互換のある機能追加・PATCHはバグ修正を表す。`Version=”13.0.1″`のように厳密指定したり、バージョン範囲を指定して柔軟に更新したりできる。

サプライチェーン攻撃のリスクに注意しよう。NuGetに限らずnpm・PyPIなどのパッケージリポジトリは、悪意あるパッケージが正規のパッケージ名に似せて公開される「タイポスクワッティング」攻撃のリスクがある。信頼できる発行元のパッケージか・ダウンロード数や更新履歴は健全か・脆弱性が報告されていないかを確認することが重要だ。

プライベートNuGetフィードを理解しよう。社内専用のライブラリを公開リポジトリに出さずに配布したい場合、Azure Artifacts・GitHub Packages・自前のNuGetサーバーなどでプライベートフィードを構築できる。社内の共通コンポーネントを複数プロジェクトで再利用する際に活用される。

よくある誤解

NuGetは.NET開発以外でも使う汎用ツールだと思っている

NuGetは.NET(C#・F#・VB.NET)エコシステム専用のパッケージマネージャーだ。JavaScriptならnpm・Pythonならpip・JavaならMavenというように言語・プラットフォームごとに専用のパッケージマネージャーがある。

NuGetのパッケージはすべて安全だと思っている

nuget.orgは誰でもパッケージを公開できるため、悪意あるパッケージや脆弱性を含むパッケージが存在しうる。発行元の信頼性・ダウンロード数・更新頻度・既知の脆弱性を確認してから導入することがセキュリティ上重要だ。

会話での使われ方

ITKAGYO運営者デプロイ太郎のアイコン画像

このプロジェクトでJSONを扱うのでNuGetでSystem.Text.JsonかNewtonsoft.Jsonを追加してください。dotnet add packageで一発です。

リードエンジニアが新人にNuGetでのライブラリ追加方法を指示している場面。

ITKAGYO運営者デプロイ太郎のアイコン画像

このパッケージ、本家に名前が似ていますがダウンロード数が極端に少ないです。タイポスクワッティングの可能性があるので発行元を確認してください。

セキュリティ担当者が不審なNuGetパッケージのリスクを指摘している場面。

ITKAGYO運営者デプロイ太郎のアイコン画像

社内共通ライブラリはAzure Artifactsのプライベートフィードで配布しましょう。各プロジェクトからNuGet経由で参照できます。

アーキテクトが社内ライブラリの配布方法を提案している場面。

【まとめ】3つのポイント

  • .NET開発の標準パッケージ管理システムでライブラリ導入を自動化する:npmやpipの.NET版にあたるNuGetはライブラリの検索・インストール・更新・依存関係解決を自動化して.NETエコシステムの開発効率を支える基盤だ
  • nuget.orgの公式リポジトリで定番ライブラリが配布される:Newtonsoft.Json・Entity Framework・xUnitなど.NET開発で定番のライブラリが数十万単位でnuget.orgに公開されておりコマンド1つで導入できる
  • サプライチェーン攻撃に備えてパッケージの信頼性を確認する:タイポスクワッティングなどの悪意あるパッケージのリスクがあるため発行元の信頼性・ダウンロード数・更新履歴・既知の脆弱性を確認してから導入することがセキュリティ上重要だ

よくある質問

Q
NuGetとnpmはどう違いますか?
A

NuGetは.NET(C#など)向け、npmはJavaScript/Node.js向けのパッケージマネージャーです。役割は同じですが対象とする言語・エコシステムが異なります。

Q
NuGetパッケージはどうやってインストールしますか?
A

dotnet CLIなら`dotnet add package パッケージ名`、Visual StudioならGUIのNuGetパッケージマネージャーから検索・インストールできます。

Q
.nupkgファイルとは何ですか?
A

NuGetパッケージの形式で、ライブラリ本体・メタデータ・依存情報をZIP形式でまとめたファイルです。nuget.orgで配布されています。

Q
プライベートNuGetフィードはどう使いますか?
A

社内専用ライブラリを公開せずに配布する仕組みです。Azure Artifacts・GitHub Packages・自前サーバーなどで構築し、複数プロジェクトで共通コンポーネントを再利用できます。

【出典】参考URL

https://learn.microsoft.com/ja-jp/nuget/ :Microsoft公式のNuGetドキュメント
https://www.nuget.org/ :NuGet公式パッケージリポジトリ
https://e-words.jp/w/NuGet.html :IT用語辞典「NuGet」

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!
タイトルとURLをコピーしました