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