見出し画像

依存モジュール(ライブラリ)のライセンスをチェックする仕組みを導入してみた

はじめに

こんにちは、SHIFT の開発部門に所属している Katayama です。

Node.js のプロジェクトに限らずだが、開発をする上では少なからず何かしらの OSS のライブラリに依存する事があると思う。

今回は Node.js を例に、ライブラリを利用する際にそのライブラリのライセンスをチェックする方法についてみていきたいと思う。

結論 どうやるのか?

NPM License Checkersimple-git-hookslint-stagedを利用する。

[study@localhost node-express]$ yarn add --dev license-checker simple-git-hooks lint-staged
{
	...
	"scripts": {
		...
		"prepare": "npx simple-git-hooks"
	},
	"lint-staged": {
		...
		"yarn.lock": "npx license-checker --production --failOn \"GPL;AGPL;LGPL;NGPL\" --summary"
	},
	"simple-git-hooks": {
		"pre-commit": "npx lint-staged --verbose",
	}
}

上記の設定で実際に git commit を行うと、以下のようになる(コミットリントを設定している関係で、コミットリントのログも見えている)。

仕組みに関して

simple-git-hooks と lint-staged

こちらについては、ESLint・Prettier を併用してコードスタイルのチェックは Prettier にまかせてみたにて触れているので、そちらを参照。

1 点、lint-staged の設定について補足をすると、今回はライブラリのチェックを行おうとしているので、コミット時に毎回ライセンスをチェックするのは処理として無駄がある。そこで依存関係に変化があった時(yarn の場合は yarn.lock が更新された時)のみにライセンスのチェックを行うように設定している。

※ライセンスチェックを行うタイミングとしては CI 上という選択肢もあるが、CI まで行ってしまってから修正…というのも手間がある気がしたので、今回はローカル上でチェックをする方法を採用してみた。

・参考:Command line flags --verbose

license-checker

このライブラリが依存関係のあるライブラリのライセンスをチェックしてくれる。コマンドの引数などについては公式に書かれているが、今回の設定では「GPL、AGPL、LGPL、NGPL」の 4 つのライセンス区分のライセンスが含まれていたら exit1(処理失敗)になる。

※ちなみに、git commit 時にライセンスチェックで NG があった場合には以下のようになる(あえて MIT を設定してエラーを出させている)。

まとめとして

今回は、ライブラリのライセンスをチェックし、例えば GPL などのライセンスであればコミットできないようにする方法についてみてきた。この設定を行っておく事で、俗に言われる GPL 汚染などを防ぐ事もできるだろう。

※今回は Node.js に関してみてきたが、フロントエンドのプロジェクトで webpack で build し全モジュールを bundle している場合、License Webpack Pluginなどを利用してライセンスチェックを行う事もできる。

・参考:license-checker で npm の依存ライブラリのライセンスを確認する


《 この公式ブロガーの記事一覧 》


執筆者プロフィール:Katayama Yuta
Yuta SaaS ERPパッケージベンダーにて開発を2年経験。 SHIFTでは、GUIテストの自動化やUnitテストの実装などテスト関係の案件に従事したり、DevOpsの一環でCICD導入支援をする案件にも従事。 昨年に開発部門へ異動し、再び開発エンジニアに。

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/