【まとめ】利用OSSライセンスの一覧を自動で生成する方法

この記事は、日立グループ OSS Advent Calendar 2020 の8日目の記事になります。

# はじめに

毎々お世話になっております。
今回は製品やサービスが利用しているOSSのライセンス一覧を自動で生成する方法についてまとめます。

# 前提

本記事で紹介する方法は基本的に「無償の方法であること」「パッケージマネージャ経由で利用されるOSSが対象であること」を条件とします。また、どのレベルで一覧生成を行うか（ライセンス名のみ、ライセンス全文含む、etc.）は問いません。
それではいきましょう。

# 各種言語向け

まずは、特定の言語やパッケージマネージャに特化したものでなく、さまざまなタイプに対応した方法について紹介します。

## FOSSA

FOSSAはOSSライセンスを管理するためのクラウドサービスです。ライセンス一覧の生成だけでなく、OSSのライセンスに関する問題の検出等をプロジェクト横断で行うことができます。
https://fossa.com/
個人利用は無料で、主なプログラミング言語、パッケージマネージャには全て対応しています。

参考：[OSSライブラリのライセンス管理の決定版「FOSSA」を使ってみよう](https://qiita.com/d-morishita/items/7ee9242652975fc21b72) 

## licensed

licensedはGitHub社で社内ツールとして利用されていたものがOSSとして公開されたものです。Java、PHP、Python、JavaScript、Ruby、Golang、Haskell等のプロジェクトに対応しています。
https://github.com/github/licensed

参考：[OSSライブラリのライセンスをチェックしてくれるGitHub製ツール「licensed」](https://matsnow.hatenablog.com/entry/library/licensed)

## LicenseFinder

LicenseFinderはpivotal（現VMware）社のOSSです。Ruby、Python、Javascript、Go、Java等のプロジェクトに対応しています。
https://github.com/pivotal/LicenseFinder

参考：[LicenceFinder で Rails プロジェクトで使用しているパッケージのライセンスを出力する](https://qiita.com/mtsuge/items/9e08ff2570effcf6d47c)

# JavaScript（Node.js、フロントエンド）向け

## license-checker

license-checkerはnpmで管理されているライブラリのライセンスを収集するツールです。GitHubのStar数から考えるとnpm系ではメジャーなツールかと思われます。他のライセンスチェッカーから利用されたりもしています。
https://github.com/davglass/license-checker

参考：[Nodeアプリが依存するnpmモジュールライセンスをlicense-checker & Jenkinsで自動チェック](https://one-it-thing.com/269/)

## yarn licenses

yarnで管理されるプロジェクトの場合、標準のlicensesコマンドを使ってライセンス一覧およびライセンス条項文を生成することができます。
https://classic.yarnpkg.com/ja/docs/cli/licenses/

参考：[yarnで依存ライブラリのlicenseをファイル出力](https://shinji-japan.hatenadiary.jp/entry/2019/11/24/102319)

## legally

legallyはnpmパッケージのライセンス情報を収集するツールです。ライセンス情報をどこから取得したか(package/License/README)も分かるように出力されます。
https://github.com/franciscop/legally

## bower-license

bower-licenseは、Bowerで管理されているライブラリのライセンスを収集するツールです。Bower利用者は減少しているかもしれませんが、Bower管理部分のライセンスリストのみを取得したい場合などには選択肢になり得ます。
https://github.com/AceMetrix/bower-license

## licensify

licensifyは生成するJSファイルにライセンスコメントを出力するbrowserifyプラグインです。browserifyを利用している場合は選択肢になり得ます。
https://github.com/twada/licensify

参考：[React + BrowserifyプロジェクトでJS/CSS/HTMLを圧縮(Minify)する](http://umi-uyura.hatenablog.com/entry/2015/07/29/193409)

## license-info-webpack-plugin

license-info-webpack-pluginは生成するJSファイルにライセンスコメントを出力するwebpackプラグインです。webpackを利用している場合は選択肢になり得ます。
https://github.com/yami-beta/license-info-webpack-plugin
他にもwebpack系としては[license-webpack-plugin](https://github.com/xz64/license-webpack-plugin)。

参考：[ライセンスコメントを出力する webpack プラグインを作りました](https://yami-beta.hateblo.jp/entry/2017/10/10/093943)

# Java（Maven/Gradle、Androidアプリ）向け

## License Maven Plugin

License Maven PluginはMavenプロジェクトで依存するOSSのライセンス情報を収集するためのMavenプラグインです。
https://www.mojohaus.org/license-maven-plugin/index.html

参考：[MavenでOSSのライセンス一覧を出力する](https://kazuhira-r.hatenablog.com/entry/2019/09/14/184054)

## License Gradle Plugin

License Gradle PluginはGradleプロジェクトで依存するOSSのライセンス情報を収集するためのGradleプラグインです。
https://github.com/hierynomus/license-gradle-plugin

## oss-licenses-plugin

oss-licenses-pluginはGoogle社がAndroidアプリ向けに公式で提供しているプラグインです。
https://github.com/google/play-services-plugins/tree/master/oss-licenses-plugin

参考：[com.google.gms:oss-licenses でライセンス表記を実装してみた](https://tech.trilltrill.jp/entry/2020/10/27/181937)

## LicenseToolsPlugin

cookpad社製のGradle pluginです。旧license-tools-pluginをKotlinでフルスクラッチで実装したとのこと。ライブラリ情報の手動追加等に対応しています。
https://github.com/cookpad/LicenseToolsPlugin

参考：[license-tools-pluginの移行に関するお知らせ](https://techlife.cookpad.com/entry/2020/01/16/090000)

## AboutLibraries

Androidアプリで利用しているOSSライブラリのライセンス一覧の生成やカスタマイズができるライブラリです。最近のリリースでGradleプラグインとしても利用できるようになったようです。
https://github.com/mikepenz/AboutLibraries

参考：[Androidアプリで使っているライブラリのライセンスをいい感じに表示する](https://cutmail.hatenablog.com/?page=1472744061)

# Objective-C/Swift（iOSアプリ）向け

## CocoaPods機能

Cocoapodsは各ライブラリのライセンス表記を集約し1つのplistファイルにまとめてくれる機能を標準で持っていますのでそれを利用することができます。
https://github.com/CocoaPods/CocoaPods/wiki/Acknowledgements

参考：[CocoaPodsでOSSライブラリのライセンス表記を自動生成する](https://qiita.com/tzono/items/e86af5041444e865f25d)

## LicensePlist

LicensePlistはiOSアプリ向けライセンス一覧生成ツールです。CocoaPodsおよびCarthageに対応しています。
https://github.com/mono0926/LicensePlist

参考：[LicensePlist というiOSアプリ利用ライブラリのライセンス一覧を生成するツールを作りました](https://medium.com/swift-column/license-plist-c0363a008c67)

# Python向け

## pip-licenses

pip-licensesはpipでインストールしたPythonパッケージのライセンスを表示するツールです。
https://github.com/raimon49/pip-licenses

参考：[Pythonパッケージの依存関係とライセンスを確認する](https://dev.classmethod.jp/articles/python-pipdeptree_licenses/)

# Golang向け

## go-licenses

go-licensesはGoogle社製のツールで、Goプロジェクトの依存ライブラリのライセンスを一覧として生成します。
https://github.com/google/go-licenses

## gocredits

gocreditsはGoのプロジェクトの依存ライブラリのLICENSEを抽出して、CREDITSという単一ファイルに書き出してくれるツールです。
https://github.com/Songmu/gocredits

参考：[依存ライブラリのLICENSE同梱のためのgocreditsというツールを作った](https://songmu.jp/riji/entry/2019-04-16-gocredits.html)

# PHP向け

## composer licenses

ComposerでPHPパッケージの管理を行う場合、標準のlicensesコマンドでライセンス情報のリストを取得することができます。
https://getcomposer.org/doc/03-cli.md#licenses

参考：[composerでインストールしたライブラリのライセンス確認方法](https://akamist.com/blog/archives/98)

## php-legal-licenses

php-legal-licensesはComcast社製のツールで、依存ライブラリのライセンステキストを一覧化します。
https://github.com/Comcast/php-legal-licenses

# Rust向け

## cargo-license

cargo-licenseはシンプルに依存ライブラリのライセンス情報を一覧化するツールです。
https://github.com/onur/cargo-license

## cargo-lichking

cargo-lichkingは依存ライブラリのライセンス情報を一覧化するツールです。互換性のチェックも可能です。
https://github.com/Nemo157/cargo-lichking

# Scala向け

## sbt-license-report

sbt-license-reportはsbtプロジェクトで利用するライブラリのライセンス一覧を生成するsbtプラグインです。
https://github.com/sbt/sbt-license-report

# 最後に

以上です。
各企業でプロジェクトごとに最適なものを選択いただき、開発効率を向上させていただければと思います。
他にも「こんなも著名なやり方があるよ！」「他言語はこういうのがあるよ！」といった情報があれば是非コメントいただければと思います。