[Visual Studio] ソリューションで使っている NuGet パッケージのライセンスを一覧する Visual Studio 拡張

Visual Studio で開発していると使っている NuGet パッケージのライセンスをまとめて確認したいときがあります。

パッケージマネージャーコンソールで次のように実行すると、パッケージのライセンス URL 一覧を表示できたり、さらにコードを書き加えてライセンステキストをダウンロードしたりもできますが、十分ではないです。

Get-Package | Select-Object Id,LicenseUrl

Package Licenses

ツールを探してもなさそうなので、もう少し便利なものを Visual Studio 拡張として作りました。リスト化した Excel ファイルを作成して、ライセンステキストもダウンロードします。また、パッケージのライセンス URL とプロジェクト URL 情報からライセンスを推定します。

ダウンロード

ダウンロードは Visual Studio の「拡張機能と更新プログラム」から「PackageLicenses」で検索。もしくは Visual Studio Marketplace から。

使い方

ソリューションのコンテキストメニューに表示されます。

出力ウィンドウに Excel と同等の内容や、実行時のエラーなどが表示されます。

仕組み

ソリューションの packages フォルダーから NuGet パッケージを参照します。そのため古いパッケージが残ってたら、それらもリスト化します。

ライセンスは、NuGet パッケージのメタデータにある ライセンス URL と プロジェクト URL から推定します。

  1. URL が gnu.org, apache.org, opensource.org, creativecommons.org の場合、パスからライセンスを推定
  2. SPDX で定義されている URL から推定(License List Data を使用)
  3. URL が GitHub の場合、GitHub REST API からプロジェクトのライセンスを取得

ライセンステキストもダウンロードします。

  1. ライセンスを gnu.org, apache.org, opensource.org, creativecommons.org か SPDX のデータから推定した場合は、SPDX からライセンステキストをダウンロード
  2. ライセンスを GitHub から推定した場合は、GitHub REST API により取得
  3. ライセンスは推定できなかったが、ラインセンス URL が GitHub の場合、GitHub からダウンロード

その他

NuGet パッケージ 86,000 個あるうち人気 20,000 個ぐらいでライセンス推定したところ約50%ぐらい推定できました(推定結果が当たっているわけではない)。

パッケージによっては、ライセンス URL と GitHub にあるプロジェクトのライセンスが違っていることもあるので注意です。

GitHub API は単位時間あたりの回数制限があります。超過した場合は 自分で GitHub OAuth アプリを作り、ユーザー環境変数「PACKAGE-LICENSES-GITHUB-QUERY」に「client_id=your_oauth_app_client_id&client_secret=your_oauth_app_client_secret」を指定すると、参照して使います(セキュアでない一時的な方法です)。

リンク