finops-waste について
finops-wasteは、GitHub Actionsのコストを調べるリポジトリチーム向けスキルです。スキップされた実行、ボットのトリガー、並行実行グループ、パスフィルターを分析し、修正案を提示します。
主な機能
- 01スキップされたワークフロー実行の分析
- 02ボット起動の実行を確認
- 03並行実行グループの不足を検出
- 04パスフィルター設定の確認
- 05具体的な修正案の提示
活用シーン
- 01GitHub Actionsの無駄を監査
- 02PRワークフローに実行キャンセルを追加
- 03ボット起動によるCIノイズを削減
- 04単一リポジトリのワークフロー設定を確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill finops-wasteインストール後、Claude Code で/finops-wasteを入力して読み込まれたか確認します。
同梱ファイルscripts/waste-analysis.sh
詳細
/finops:waste
GitHub Actions の無駄な実行パターンを特定し、実行可能な修正案を提示します。スキップされた実行、ボットによるトリガー、未設定の並行処理グループ、未設定のパスフィルターを分析します。
このスキルを使用する場面
| 次の場合にこのスキルを使用します... | 次の場合は代わりに関連スキルを使用します... |
|---|---|
| CI コストの無駄を解消する具体的な修正案(並行処理、パスフィルター、ボットの除外)が必要な場合 | 請求額と健全性の概要を確認したい場合 — /finops:overview を使用します |
PR ワークフローに cancel-in-progress を追加する必要がある場合 | ワークフローの実行頻度と所要時間の統計が必要な場合 — /finops:workflows を使用します |
| スキップされた実行やボットによる不要な実行を監査する場合 | キャッシュの肥大化や古いキャッシュを監査する場合 — /finops:caches を使用します |
| 1 つのリポジトリのワークフロー設定を修正したい場合 | 複数のリポジトリにわたって無駄をランキングしたい場合 — /finops:compare を使用します |
コンテキスト
- 現在のリポジトリ URL:!
git remote get-url origin - ワークフローファイル:!
find .github/workflows -maxdepth 1 \( -name '*.yml' -o -name '*.yaml' \)
パラメーター
| パラメーター | 説明 | デフォルト |
|---|---|---|
repo | owner/name 形式のリポジトリ | 現在のリポジトリ |
実行
1. API ベースの無駄な実行分析を行います:
bash "${SKILL_DIR}/scripts/waste-analysis.sh" "$REPO"
2. ワークフローファイルを分析します(ローカルファイルシステムが必要です):
echo ""
echo "=== Workflow File Analysis ==="
for f in .github/workflows/*.yml .github/workflows/*.yaml 2>/dev/null; do
[ -f "$f" ] || continue
name=$(basename "$f")
issues=""
# Check for concurrency
if ! grep -q "concurrency:" "$f"; then
issues="${issues}missing-concurrency "
fi
# Check for path filters (on push/pull_request without paths)
if grep -qE "^\s*(push|pull_request):" "$f" && ! grep -q "paths:" "$f"; then
issues="${issues}no-path-filter "
fi
# Check for bot filter
if ! grep -q "github.event.sender.type" "$f" && ! grep -q "github.actor" "$f"; then
issues="${issues}no-bot-filter "
fi
# Check for cancel-in-progress
if grep -q "pull_request:" "$f" && ! grep -q "cancel-in-progress:" "$f"; then
issues="${issues}no-cancel-in-progress "
fi
if [ -n "$issues" ]; then
echo " $name: $issues"
else
echo " $name: OK"
fi
done
修正案
分析後、検出結果に基づいて具体的な修正案を提示します。
修正:並行処理グループの追加
# Add to workflow file at top level or per-job
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true # For PR workflows
修正:ボットトリガーのフィルター
jobs:
build:
# Skip if triggered by a bot
if: github.event.sender.type != 'Bot'
runs-on: ubuntu-latest
steps: ...
または、特定のボット向け:
if: github.actor != 'dependabot[bot]' && github.actor != 'renovate[bot]'
修正:パスフィルターの追加
on:
push:
branches: [main]
paths:
- 'src/**'
- 'package.json'
- 'package-lock.json'
paths-ignore:
- '**.md'
- 'docs/**'
- '.github/**'
pull_request:
paths:
- 'src/**'
- 'package.json'
修正:重複する PR 実行のキャンセル
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
出力形式
=== Waste Analysis: org/repo ===
=== Skipped Runs ===
Total runs: 100
Skipped: 15 (15%)
By workflow:
CI: 10 skipped
CodeQL: 5 skipped
=== Bot-Triggered Runs ===
Bot-triggered: 25/100 runs
By bot:
dependabot[bot]: 15 runs
renovate[bot]: 10 runs
=== Workflow File Analysis ===
ci.yml: missing-concurrency no-path-filter
deploy.yml: OK
codeql.yml: no-bot-filter
=== Potential Duplicate Runs ===
Commit abc1234: 3 runs (CI, CodeQL, Security)
=== High-Frequency Workflows ===
CI: 67 runs in sample - review trigger conditions
エージェントによる最適化
| コンテキスト | コマンド |
|---|---|
| スキップされた実行数 | `gh run list --limit 100 --json conclusion --jq '[.[] |
| 失敗した実行(簡潔な出力) | gh run list --limit 50 --status failure --json name,createdAt |
| ワークフローファイルの確認 | bash "${SKILL_DIR}/scripts/waste-analysis.sh" "$REPO" |
| ファイル内の並行処理設定の確認 | grep -l "concurrency:" .github/workflows/*.yml |
| ボットによる実行 | `gh run list --limit 100 --json actor,conclusion --jq '[.[] |
実行後のアクション
- 修正の適用を提案する:検出した各問題について、ワークフローファイルを直接編集することを提案します
- 影響度に基づいて優先順位を付ける:まず実行頻度の高いワークフローに注目します
- 推奨事項をテストする:変更はまず機能ブランチでテストするよう提案します
- 追跡用の Issue を作成する:最適化作業を追跡するため、必要に応じて GitHub Issue を作成します
コメント
Markdown 対応