GitHub Artifacts Analyzer(GitHubアーティファクト解析ツール)

DevOps

概要

GitHub Artifacts Analyzer は、GitHub Actions が生成するアーティファクト(ビルド成果物やログなど)のストレージ使用状況を収集・解析し、どのリポジトリやアーティファクトがストレージを消費しているかを明確にするツールです。TypeScript で書かれた CLI ツールで、複数リポジトリ/組織単位でのスキャン、詳細なサイズ・日付別レポート、フィルタリング、ドライランによる安全な削除操作、対話的なクリーンアップをサポートします。API のページネーションやレート制限、認証(Personal Access Token)など運用面の考慮も組み込まれており、2GB 無料枠に悩む開発チームのストレージ最適化に有効です。

GitHub

リポジトリの統計情報

  • スター数: 26
  • フォーク数: 1
  • ウォッチャー数: 26
  • コミット数: 9
  • ファイル数: 9
  • メインの言語: TypeScript

主な特徴

  • GitHub Actions アーティファクトを横断スキャンして使用容量を集計・可視化
  • 日付やサイズでのフィルタリングと詳細レポート出力(JSON/CSV など想定)
  • ドライランや対話的確認を備えた安全なクリーンアップ操作
  • ページネーションやレート制限に配慮した API 呼び出し設計、組織/ユーザー両対応

技術的なポイント

本プロジェクトは TypeScript ベースの CLI ツールとして設計され、GitHub REST API(Actions Artifacts エンドポイント)を呼び出してデータを収集します。設計上の重要ポイントは以下です。

  • 認証とアクセススコープ: GitHub の Personal Access Token(PAT)や GitHub App トークンなどを用いて認証し、アーティファクト取得・削除のために適切なスコープ(repo, read:org 等)を要求します。これにより組織配下やプライベートリポジトリのアーティファクトも扱えます。
  • API ページネーションとレート制御: リポジトリ数やアーティファクト数が多い環境を想定し、一覧取得時はページネーションを確実に処理。並列リクエストは制限を設け、GitHub のレートリミットヘッダを参照したバックオフやリトライ戦略を導入して安定性を確保しています。
  • レポーティングとフィルタリング: 収集したメタデータ(サイズ、作成日時、アーティファクト名、実行 ID/ワークフロー)を集約し、リポジトリ別・日付別・サイズ順などでソート/絞り込みできる構成。出力は端末表示のほか JSON/CSV にして別ツールで集計可能にする想定です。
  • 安全な削除ワークフロー: 直接削除を行う前にドライランモードを提供し、対象アーティファクト一覧と合計削除見込み容量を提示。さらにインタラクティブ確認や一括削除オプションを使って誤削除を防ぎます。
  • 実装スタック: TypeScript を中心に据え、Octokit(公式の GitHub クライアント)やノード系の CLI 補助ライブラリを利用している可能性が高いです。コードはモジュール化され、API 呼び出し層・集計層・UI(CLI)層が分離されており、テストや将来的な拡張(例: S3 へのエクスポートや自動スケジューリング)を見据えた作りになっています。

総じて、本ツールは運用負荷の高い GitHub Actions のストレージ管理課題を「見える化」し、安全に削除まで踏み切れるように設計されている点が特徴です。組織のクォータ超過対策やコスト管理にも役立ちます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • DEVELOPMENT.md: file
  • LICENSE: file
  • README.md: file
  • examples.sh: file
  • package.json: file
  • tsconfig.json: file
  • src/index.ts: file
  • src/github.ts: file

…他 4 ファイル

まとめ

GitHub Actions のアーティファクト運用を可視化・自動化する実用的な TypeScript 製ツール。ストレージ最適化に有用。

リポジトリ情報:

README の抜粋:

GitHub Artifacts Storage Analyzer

GitHub GitHub issues [![GitHub stars](https://img.shields.io/github/stars/shanselman/github-artifacts-ana