読者です 読者をやめる 読者になる 読者になる

日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

leiningen しか使った事のないやつによる NuGet の使い方メモ

はじめに

最近は仕事上の理由からちょっとずつ .NET 関係を調べております。

今日は NuGet のお話。 NuGet は .NET 開発におけるパッケージマネージャー。 JavaMaven に近いポジション?Maven はほとんど使った事ないのでイメージだけで言ってます。

まともに使ってきたものは leiningen しかないのでその中でよく使ってきた機能が NuGet ではどうすればできるのかの観点だけでメモ。パッケージマネージャーを使うと何が嬉しいのかという話はこの記事ではしない。 その辺のメリットはググればいくらでも出てくる記事に任せる。

NuGet に関する網羅的な情報は公式ドキュメントの方にある。

インストール

参考

VisualStudio 拡張版と CLI

NuGet には VisualStudio 2015 上で動作する Visual Studio 拡張版と 単体で動作するコマンドライン(CLI)版の二つが存在する。

NuGet の全機能を使えるのは CLI 版のみらしい。プロジェクト毎に依存ライブラリを解決しつつイ ンストールしてくれるだけで良いのならVisual Studio 拡張版で良さそう。

CLI 版のインストール

ここから Windows x86 Commandline の latest exe をダウンロードし、 PATH の通った所にコピーするのみ。

以降は NuGet CLI についてのみのメモ。 *1

Visual Studio 拡張版のアップデート

Visual Studio 2015 には既に同梱されているとの事だが、今回使おうと思っている CLI 版と バージョンは合わせておいた方が良いかと思いこちらもアップデート。

公式トップにデカデカとある Install NuGet をクリックしてダウンロードされた Visual Studio 拡張ファイル(vsix)をダブルクリックしてインストールするだけ。

アップデート前のバージョンが何だったかは控えておらず失念。 *2

バージョン確認

CLI

> nuget
NuGet Version: 3.5.0.1938
usage: NuGet <command> [args] [options]
Type 'NuGet help <command>' for help on a specific command.

(以降各サブコマンドの簡易説明があるが省略)

Visual Studio 拡張版

メニューの - ツール->拡張機能と更新プログラム から開かれるダイアログで NuGet で検索して出てくる「NuGet パッケージマネージャー」を選択すると、 右にバージョン情報など出るのでそこで確認。 *3

今回自分が入れたのは 3.5.0.1996 だった。一番下の表記が CLI 版と微妙に違うけど大丈夫なんかな?

設定一覧

個別設定なら nuget config で行けそうだが、一覧をコマンドラインで見る方法は見つからず。 設定ファイルとその適用順に関しては公式のこちら に詳しく書いてある。

おおまかなイメージ的にはグローバルとプロジェクト単位それぞれで設定を持てるみたい。 設定が被っている場合の適用順はプロジェクト単位から優先して適用されるっぽい。

VisualStudio で表示・変更できる設定は?

%APPDATA%\NuGet\NuGet.Config にある。Visual Studio 2015 の GUI で変更した設定はこのファイルに反映される。 なお、これは CLI 版でもグローバル設定と言う扱い。

ちなみに Visual Studio 2017 及び NuGet 4.0 以降では Visual Studio のバージョン別に全ユーザに適用される設定も 持てるようになったとか。

パッケージの生成的なものはあるか

少しドキュメント探してみた感じだと lein uberjar 的なコマンドなさそうだなあ。

いや、nuget pack と言う一見それっぽいのはあるんだが、これで生成可能なパッケージは lein uberjar がカバーする範囲とは少し異なり、 外部ライブラリとか Visual Studio 拡張向けのパッケージ生成は可能だが、 Java の jar のような単体アプリとしても動作するようなパッケージを作る場合が見当たらなかった。

ローカル PC にパッケージリポジトリを持たせる

leiningen での依存関係の解決でのデフォルト動作のように、ライブラリを探しに行く時に ローカル PC に保持したリポジトリを探し、なければそこにダウンロードしてインストールする動作を NuGet でもやりたい。

と思って調べてみると、どうも NuGet 2.8 以降ではデフォルトでそういう動作になってるらしい

NuGet ではこういうのを local cache と呼ぶようで、CLI 版だと nuget locals all -list で確認できる。

上記コマンドで出てくるパスの中を実際に確認してみると確かにあった。 自分は NuGet パッケージは Visual Studio 2015 拡張版 NuGet 経由でしか入れてないので恐らく同じ挙動をしていると思われる。

ちなみに特に何も設定しないのにこの項目上げたのはググった時に最初に出てきた情報がプロジェクト毎にしか持てないというのが先に来てたので。 時間が経てばこの辺りの情報が上に来るようになるのを期待し敢えて書いておくことにした。

依存関係の解決

上記の挙動である事が分かったので、これは Visual Studio 上の GUI を使って利用したいライブラリを選んでインストールすれば良い。 CLI でも多分 nuget install を使えば可能だと思うが未検証。

まとめ

特に細かいカスタマイズもせず、外部ライブラリを利用するだけであれば Visual Studio 拡張版で十分だと思った。 公式のダウンロードで Visual Studio 拡張版をトップに持ってくる意図が何となく分かった。

*1:パッケージマネージャーを使った事があるなら、VS 拡張版は特に説明不要な気もする

*2:Visual Studio は再インストールするにはかなりサイズがデカいのであまり再検証する気にもならない

*3:余談だがメニューをたどれば出てくるようなものに対してスクショを貼り付けるのは個人的に記事スペースの無駄だと思う。 全くの PC 初心者向けと言うのならまだしも開発系でもたまにあるのが個人的にあまり好きじゃない。