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


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

はじめに

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

前提

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

各種言語向け

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

FOSSA

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

参考:OSSライブラリのライセンス管理の決定版「FOSSA」を使ってみよう

licensed

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

参考:OSSライブラリのライセンスをチェックしてくれるGitHub製ツール「licensed」

LicenseFinder

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

参考:LicenceFinder で Rails プロジェクトで使用しているパッケージのライセンスを出力する

JavaScript(Node.js、フロントエンド)向け

license-checker

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

参考:Nodeアプリが依存するnpmモジュールライセンスをlicense-checker & Jenkinsで自動チェック

yarn licenses

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

参考:yarnで依存ライブラリのlicenseをファイル出力

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)する

license-info-webpack-plugin

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

参考:ライセンスコメントを出力する webpack プラグインを作りました

Java(Maven/Gradle、Androidアプリ)向け

License Maven Plugin

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

参考:MavenでOSSのライセンス一覧を出力する

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 でライセンス表記を実装してみた

LicenseToolsPlugin

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

参考:license-tools-pluginの移行に関するお知らせ

AboutLibraries

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

参考:Androidアプリで使っているライブラリのライセンスをいい感じに表示する

Objective-C/Swift(iOSアプリ)向け

CocoaPods機能

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

参考:CocoaPodsでOSSライブラリのライセンス表記を自動生成する

LicensePlist

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

参考:LicensePlist というiOSアプリ利用ライブラリのライセンス一覧を生成するツールを作りました

Python向け

pip-licenses

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

参考:Pythonパッケージの依存関係とライセンスを確認する

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というツールを作った

PHP向け

composer licenses

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

参考:composerでインストールしたライブラリのライセンス確認方法

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

最後に

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