了解しました。それでは、license-checkernode_modules 配下のライセンスファイルをすべて網羅しているか確認するためのスクリプトを JavaScript(Node.js) で作成します。


🎯 目的


📄 ファイル名: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.txtnode_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