Blog

libs.versions.toml に記載されているが利用されていないバージョン番号を探す

長年システムを運用していると、libs.versions.toml に記載があるが存在しないシステムが発生することがある。これを検出したい。

import toml
import os
import re
from collections import defaultdict

def scan_files(root_dir):
    usage_counts = defaultdict(int)
    for subdir, _, files in os.walk(root_dir):
        for file in files:
            if file.endswith('.gradle.kts'):
                with open(os.path.join(subdir, file), 'r') as f:
                    content = f.read()
                    for match in re.finditer(r'libs\.([a-zA-Z0-9._-]+)', content):
                        library = match.group(1).replace('.', '-')
                        usage_counts[library] += 1
    return usage_counts

def main():
    # TOML ファイルを読み込む
    with open('gradle/libraries.versions.toml', 'r') as f:
        toml_data = toml.load(f)
    
    libraries = toml_data['libraries']
    usage_counts = scan_files('.')
    
    # すべてのライブラリに対して使用状況をチェックする
    for library in libraries.keys():
        usage_count = usage_counts[library]
        unused_indicator = ' (*)' if usage_count == 0 else ''
        print(f'{usage_count} {library}{unused_indicator}')

if __name__ == "__main__":
    main()