🥳

Node.js/パッケージのライセンスを検証する

2021/06/22に公開

TL;DR

npx license-checker --json | \
jq '. | to_entries | map(select(.value.licenses | tostring | test("(BSD|MIT|ISC|Apache|CC0-1.0|CC-BY-2.0|CC-BY-3.0|CC-BY-4.0|Public Domain|Unlicense|wtfpl)") | not)) | map(select(.key | test("__ignore_pattern__") | not )) | length' | \
xargs -I{} test {} -eq 0

__ignore_pattern__ は、検証の対象から除外したいパッケージのパターンを入力してください。
不要な場合は | map(select(.key | test("__ignore_pattern__") | not )) を削除します。

経緯

以前 Ruby on Rails での GPL 汚染 の話があったので、
Node.js のプロジェクトでも、ライセンスの検証を CI で回すようにしました。

このコマンドを導入したリポジトリの CI は Github Actions なのですが、
runs-on: ubuntu-latest, uses: actions/setup-node@v2npxjq も使えます。

解説

license-checker は、依存関係があるパッケージのライセンスを出力してくれます。
これを json で出力させるようにして、そこから jq でフィルタリングし、
xargstest で結果が 0 であるかを比較しているだけです。

license-checker による json の出力は、たとえば typescript ですと以下のようになります。

{
  "typescript@4.2.3": {                                                                                                      
    "licenses": "Apache-2.0",                                                                                                
    "repository": "https://github.com/Microsoft/TypeScript",                                                                 
    "publisher": "Microsoft Corp.",                                                                                          
    "path": "/path/to/node_modules/typescript",                                                      
    "licenseFile": "/path/to/node_modules/typescript/LICENSE.txt"                                    
  },
}

jq でのフィルタは、ひとまず以下をホワイトリストとして除外しています。

Discussion