了解しました!
今度は実際にlicense-checker
を使って依存パッケージのライセンスを取得し、クラスPackage
を使って整形し、現実によくあるライセンス(MIT, ISC, BSD-3-Clauseなど)を含んだ出力が見られるような実例を書きます。
collect-licenses-final.js
// 'license-checker' を読み込む
const checker = require('license-checker');
// 各パッケージ情報を構造化するクラス
class Package {
constructor(name, version, license) {
this.name = name;
this.version = version;
this.license = license || 'UNKNOWN';
}
// 整形出力用の文字列を返す
format(padWidth) {
const paddedLicense = this.license.padEnd(padWidth);
return `${paddedLicense} ← ${this.name}@${this.version}`;
}
}
// ライセンス情報を取得し、整形・出力するメイン処理
checker.init({ start: process.cwd() }, function (err, packages) {
if (err) {
console.error('エラー:', err);
return;
}
// パッケージ情報を Package クラスの配列に整形
const packageList = Object.entries(packages).map(([fullName, info]) => {
const [name, version] = fullName.split(/@(?=[^@]+$)/);
return new Package(name, version, info.licenses);
});
// ライセンス名の最大長を取得
const maxLicenseLength = packageList.reduce((max, pkg) => {
return Math.max(max, pkg.license.length);
}, 0);
// 整形表示
console.log('--- ライセンス一覧 ---\\n');
packageList.forEach(pkg => {
console.log(pkg.format(maxLicenseLength));
});
// JSON形式でも出力(他の処理用に)
console.log('\\n--- JSON出力形式 ---\\n');
console.log(JSON.stringify(packageList, null, 2));
});
プロジェクトのルートディレクトリで以下を実行します:
npm install -g license-checker
node collect-licenses-final.js
※ あらかじめプロジェクトで npm install
が済んでいる必要があります。
--- ライセンス一覧 ---
MIT ← [email protected]
BSD-3-Clause ← [email protected]
ISC ← [email protected]
Apache-2.0 ← [email protected]
MIT ← [email protected]
UNLICENSED ← [email protected]
UNKNOWN ← [email protected]
[
{
"name": "express",
"version": "4.18.2",
"license": "MIT"
},
{
"name": "serve-static",
"version": "1.15.0",
"license": "BSD-3-Clause"
},
{
"name": "finalhandler",
"version": "1.2.0",
"license": "ISC"
}
]
ライセンス名 | 説明 |
---|---|
MIT | 最も緩いライセンス、商用利用可 |
ISC | MITと似た超シンプルなライセンス |
BSD-3-Clause | 商用可、MITより若干厳しめ |
Apache-2.0 | 特許条項付き、商用向き |
UNLICENSED | 配布・再利用を許可していない私用向け |
UNKNOWN | ライセンス情報が見つからない |