了解しました。それでは、license-checker
が node_modules
配下のライセンスファイルをすべて網羅しているか確認するためのスクリプトを JavaScript(Node.js) で作成します。
find
コマンドで検出したすべてのライセンス関連ファイルとlicense-checker
の JSON 出力に含まれる licenseFile
を比較しcompare-license-coverage.js
// compare-license-coverage.js
// ファイルシステムを扱うためのNode.js標準モジュールを読み込む
const fs = require('fs');
const path = require('path');
// license-checker の出力(license-checker-output.json)を読み込んでオブジェクトに変換
const checkerJson = JSON.parse(fs.readFileSync('license-checker-output.json', 'utf-8'));
// license-checker が検出した licenseFile の一覧をセットに格納(小文字で比較)
const checkerFiles = new Set(
Object.values(checkerJson)
.map(data => data.licenseFile && data.licenseFile.toLowerCase())
.filter(Boolean)
);
// find で取得した全ライセンスファイル一覧を読み込む(事前に all-license-files.txt を用意)
const allFiles = fs.readFileSync('all-license-files.txt', 'utf-8')
.split('\\n')
.map(f => f.trim().toLowerCase())
.filter(Boolean);
// checker のセットに含まれないファイルだけを抽出(差分リスト)
const missing = allFiles.filter(file => !checkerFiles.has(path.resolve(file)) && !checkerFiles.has(file));
// 集計と表示
console.log(`🎯 見つかったライセンス関連ファイル数: ${allFiles.length}`);
console.log(`✅ license-checker が認識している数: ${checkerFiles.size}`);
console.log(`❌ 未検出のファイル数: ${missing.length}`);
// 差分がある場合はリストを出力
if (missing.length > 0) {
console.log('\\n🔍 license-checker が検出していないライセンスファイル一覧:\\n');
missing.forEach(file => console.log(file));
} else {
console.log('\\n✅ すべてのライセンスファイルが license-checker によって検出されました。');
}
以下の 2 ファイルを準備する必要があります:
license-checker-output.json
npx license-checker --json > license-checker-output.json
all-license-files.txt
(node_modules
配下のライセンス関連ファイル一覧)Mac/Linux:
find node_modules -type f \\( -iname 'license' -o -iname 'license.txt' -o -iname 'license.md' -o -iname 'copying' -o -iname 'notice' \\) > all-license-files.txt
Windows(PowerShell):
Get-ChildItem -Recurse -File -Include license,license.txt,license.md,copying,notice -Path node_modules | ForEach-Object { $_.FullName } > all-license-files.txt