🏮
npmパッケージの最終更新日がわかるスクリプトを作った
処理概要と実行結果
Windowsのほうが都合がよかったのでPowerShellスクリプト
- 直下に
package.jsonを配置して、JSON解析 -
dependenciesとdevDependenciesからパッケージ名を取得 -
npm view <パッケージ名>でループ処理 & 必要な情報を取得 - 表形式でフォーマットして出力
- 1年以上更新のないパッケージもフィルタリングして出力

スクリプト
$path = "./package.json"
if (-Not (Test-Path -Path $path)) {
Write-Host "not found package.json in current directory."
exit 1
}
$json = (Get-Content -Path $path | ConvertFrom-Json)
$deps = $json.dependencies.PSObject.Properties.Name + $json.devDependencies.PSObject.Properties.Name
$today = Get-Date
Write-Host "scanning packages..."
$output = @()
foreach ($pkg in $deps) {
try {
$lastMod = npm view $pkg time.modified --json 2>$null | ConvertFrom-Json;
$date = [DateTime]$lastMod;
$daysAgo = $today - $date;
$output += [PSCustomObject]@{
Package = $pkg
LastModified = $date.ToString("yyyy-MM-dd")
DaysAgo = [math]::Floor($daysAgo.TotalDays)
};
} catch {
Write-Host "Error no such package: $pkg"
exit 1
}
}
Write-Host "finished scanning!"
$output | Sort-Object DaysAgo -Descending | Format-Table -AutoSize;
Write-Host "packages not updated for more than 1 year"
$output | Where-Object { $_.DaysAgo -ge 365 } | Sort-Object DaysAgo -Descending | Format-Table -AutoSize;
Write-Host "----------------------------------------------"
PowerShellでUTF-8日本語が使えないの忘れてて5分くらいハマったw
サプライチェーン攻撃には気を付けて
Discussion