macOS環境でNuGetパッケージをプッシュする
さて、今回は前回記事よりはだいぶマシでした。正直に申し上げて今回の手順はこちらのQiita記事の内容とほとんど変わりありません。ただしちゃんとハマりどころはあるのでご安心いただきたいのです。
環境
環境については前回と変わりません。例によってどこからともなくやってきた(おそらくXamarinと同時にインストールされた)Mono v4.6.2がNuGetのランタイムとなります。
OS | macOS Sierra (v10.12.1) |
.NET | Mono v4.6.2 |
NuGet | v3.4.4 |
IDE | Xamarin Studio Community v6.1.4 |
手順
前提として、すでに前回記事に示した手順でnupkgファイルが手元にあるものとします。
まずはNuGet Galleryにアカウントを作成します。サイト右上の「Register / Sign in」からアカウント作成もしくはログインのためのページにアクセスできます。
アカウントを作成すると登録したメールアドレスに確認のメール「[NuGet Gallery] Please verify your account.」が届きます。このメールに記載された一時URLをクリックしてWebページを表示するとアカウントの検証が済みます。これをしないとあとで使用するAPIキーが取得できません。
アカウントを作成したらアカウント情報ページにアクセスします。このページの一番下の方に「API Key」という欄があり「copy to clipboard」という部分をクリックすると、APIキーとなる文字列がクリップボードにコピーされます。このキーがあれば追加の認証なしに誰でも当該アカウント名義でパッケージをプッシュ(登録)できてしまうので、むやみにローカルに保存しないほうがいいでしょう。
そしてnuget push
コマンドを実行します。これによりパッケージがNuGet Galleryにプッシュ(登録)されます。
$ cd path/to/MyProject $ ls MyProject.csproj MyProject.nuspec MyProject.1.0.0.0.nupkg Properties bin obj ... $ mono path/to/nuget.exe push MyProject.1.0.0.0.nupkg \ -Source https://www.nuget.org/api/v2/package \ -ApiKey *****
冒頭で言及したQiita記事を読むと「NuGetによるプッシュ方法にはいろんな選択肢があるんだなー」なんて牧歌的とも言い切れないむしろ至極当然な気もする感想を抱いてしまいますが、そこは.NET on macOS。夢を見てはいけません。
上記の例の中でいうとまず-Source
オプションを付けないと怒られます。nuget help push
コマンドで表示されるヘルプには、あえて指定されていない場合はデフォルトのURLを使ってNuGet Galleryあてにプッシュする云々の記述がありますが騙されてはいけません。指定しないとふつうにエラーになります。
また-ApiKey
オプションも必須でした。NuGetのヘルプにはnuget setapikey
なるデフォルトのキーをローカルに登録しておくためのコマンドが示されているのですが、こちらは実行しても無意味でした。Windows環境では機能するのでしょうけれど、私のmacOS環境ではだめでした。前述のQiita記事にもある「nuget setapikey
コマンドのあと-ApiKey
指定無しでnuget push
コマンドを実行」という手順を行ったところnuget push
コマンドのあと(たぶん)NuGet Galleryのアカウント情報の入力を求められ、それも3回連続で入力をさせられたあとに結局401エラーでした。
PUT https://www.nuget.org/api/v2/package/
Unauthorized https://www.nuget.org/api/v2/package/ 453ms
401 (An API key must be provided in the 'X-NuGet-ApiKey' header to use this service)
まあなんにせよ。-Source
オプションと-ApiKey
オプションをつけて、それからnupkgファイル名を引数にしてプッシュすれば、そこからはすんなり登録完了です。パッケージ管理ページを見ると最前プッシュしたパッケージが確認できると思います。ただしプッシュしてから数十分経たないとGalleryの検索インデックスにのらないようで(これはパッケージ管理ページから遷移できる個別のパッケージのページにも警告として表示されます)、XamarinのNuGetパッケージ検索にヒットするようになるまではしばし待機です。
ちなみに、さっそく2つのパッケージをプッシュしてみました。
- Unclazz.Commons.Json - .NETアプリケーションからJSONを操作するためのライブラリ
- Tac.MetaServlet.Rpc - 過去記事でも紹介したTalend Administration CenterのRPCクライアント用ライブラリ