AgentSkillsCN

review-actions-workflow

评审GitHub Actions工作流,从安全性、最佳实践、性能及可维护性等多个维度提出优化建议。“评审工作流”“检查GitHub Actions”即可启动相关流程。

SKILL.md
--- frontmatter
name: review-actions-workflow
description: GitHub Actionsワークフローをレビューし、セキュリティ、ベストプラクティス、パフォーマンス、保守性の観点から改善提案を行う。「ワークフローをレビューして」「GitHub Actionsをチェック」で起動。
allowed-tools: Read, Glob, Grep, AskUserQuestion, Bash(bash */check-workflow.sh *)
model: opus
context: fork
agent: Explore

Review Actions Workflow

概要

GitHub Actionsワークフローファイル(.github/workflows/*.yml)をレビューし、以下の4つの観点から問題点を検出して改善提案を行うスキル。

実行方法

基本使用

code
ワークフローをレビューして
code
GitHub Actionsをチェック

オプション

オプション説明
--securityセキュリティチェックのみ/review-actions-workflow --security
--performanceパフォーマンスチェックのみ/review-actions-workflow --performance
--best-practicesベストプラクティスチェックのみ/review-actions-workflow --best-practices
--maintainability保守性チェックのみ/review-actions-workflow --maintainability
--file <path>特定のファイルのみレビュー/review-actions-workflow --file ci.yml
--fix修正提案を詳細に表示/review-actions-workflow --fix

使用例

code
# 全観点でレビュー
ワークフローをレビューして

# セキュリティのみチェック
GitHub Actionsのセキュリティをチェックして

# 特定ファイルのレビュー
ci.ymlをレビューして

チェック観点

1. セキュリティ

セキュリティ上のリスクを検出し、対策を提案する。

チェック項目重要度説明
スクリプトインジェクションユーザー入力が安全に処理されているか
pull_request_targetフォークからのPRで安全に使用されているか
シークレット管理シークレットが安全に扱われているか

Note: SHA固定、@main/@master参照、permissions最小化はlinterでチェック可能なため、このスキルではチェックしません。詳細はreferences/security-checks.mdを参照してください。

詳細: references/security-checks.md

2. ベストプラクティス

GitHub Actionsの効率的な使用パターンを確認する。

チェック項目説明重要度
キャッシュ活用setup-*のcacheオプション、actions/cacheの使用
マトリックスビルド複数環境テストの効率化
Reusable Workflowsワークフローの再利用機会
Composite Actions共通ステップの切り出し機会
case関数の活用**&&/`
bashのif文簡素化GitHub Actions式を使ったbashのif文をステップレベルif条件へ移動

⚠️ 重要: case関数関連のチェックは必須です。以下の3パターンを必ず確認してください:

  1. GitHub Actions式での&&/||使用
  2. bashスクリプト内でGitHub Actions式(${{ }})を使った条件分岐
  3. bashスクリプト内の値分岐のみのif-else文

詳細: references/best-practices.mdreferences/technic-case-function.md

3. パフォーマンス

実行時間とリソース効率を最適化する。

チェック項目説明
並列実行ジョブ間の依存関係最適化
concurrency重複実行の制御
timeout-minutes適切なタイムアウト設定
checkout最適化fetch-depth、sparse-checkout
不要なステップ削除可能なステップの特定

詳細: references/performance-checks.md

4. 保守性・可読性

長期的なメンテナンスを容易にする。

チェック項目説明重要度
命名規則ジョブ・ステップの明確な名前
環境変数管理マジックナンバーの排除
ファイル分割適切な粒度での分割
コメント複雑な処理の説明
DRY原則重複の排除
条件式の可読性**&&/`
bashのif文簡素化ステップレベルif条件への移動、case関数での値分岐簡素化

詳細: references/maintainability-checks.mdreferences/technic-case-function.md

レポート出力フォーマット

サマリー

code
## ワークフローレビュー結果

### 対象ファイル
- .github/workflows/ci.yml
- .github/workflows/cd.yml

### サマリー
| 観点 | 問題数 | 重要度高 | 重要度中 | 重要度低 |
|------|--------|----------|----------|----------|
| セキュリティ | 3 | 2 | 1 | 0 |
| ベストプラクティス | 2 | 0 | 1 | 1 |
| パフォーマンス | 1 | 0 | 0 | 1 |
| 保守性 | 4 | 0 | 2 | 2 |
| **合計** | **10** | **2** | **4** | **4** |

詳細レポート

code
## 詳細

### セキュリティ

#### [高] スクリプトインジェクションのリスク (ci.yml:25)

**現状:**
```yaml
- run: echo "PR Title: ${{ github.event.pull_request.title }}"

推奨:

yaml
- run: echo "PR Title: $PR_TITLE"
  env:
    PR_TITLE: ${{ github.event.pull_request.title }}

理由: ユーザー入力を直接シェルコマンドに展開すると、任意のコードが実行される可能性があります。環境変数経由で渡すことで安全に処理できます。


code

## 実装の流れ

### 必須チェック項目

以下の全てのチェックを**必ず実行**してください。各チェックで問題が見つからなくても「なし」として記録し、レポートに反映させること。

> **Note:** 各チェックは`check-workflow.sh`スクリプトで自動実行されます。スクリプトの詳細は本ファイルと同じディレクトリにあります。

---

### Step 1: ワークフローファイルの検出と読み込み

!`bash "${CLAUDE_PLUGIN_ROOT}/skills/review-actions-workflow/scripts/check-workflow.sh" --list-files`

各ファイルをReadツールで読み込み、YAML構造を解析する。

---

### Step 2: セキュリティチェック(3項目必須)

!`bash "${CLAUDE_PLUGIN_ROOT}/skills/review-actions-workflow/scripts/check-workflow.sh" --security`

**チェック内容:**
1. スクリプトインジェクションリスクを検出
2. シークレットを直接echoしているパターンを検出
3. pull_request_targetとhead.sha参照の危険な組み合わせを検出

---

### Step 3: ベストプラクティスチェック(5項目必須)

!`bash "${CLAUDE_PLUGIN_ROOT}/skills/review-actions-workflow/scripts/check-workflow.sh" --best-practices`

**チェック内容:**
1. cache未使用のsetup-*を検出
2. Reusable workflow使用状況
3. 【重要】GitHub Actions式での&&/||使用を検出(case関数への置き換え候補)
4. 【重要】bashでGitHub Actions式を使ったif文を検出(ステップレベルif条件への移動候補)
5. 【重要】bash内の複数行runスクリプトのif文を検出(case関数への置き換え候補)

---

### Step 4: パフォーマンスチェック(4項目必須)

!`bash "${CLAUDE_PLUGIN_ROOT}/skills/review-actions-workflow/scripts/check-workflow.sh" --performance`

**チェック内容:**
1. concurrency未設定を検出
2. timeout-minutes未設定のジョブを検出
3. checkout最適化の確認
4. キャッシュの保存/復元の対応確認

---

### Step 5: 保守性チェック(5項目必須)

!`bash "${CLAUDE_PLUGIN_ROOT}/skills/review-actions-workflow/scripts/check-workflow.sh" --maintainability`

**チェック内容:**
1. name未設定のステップを検出
2. ハードコードされたバージョンを検出
3. @main/@master参照を検出(linter推奨だが参考情報として記録)
4. 【重要】case関数で改善可能な条件式を検出
5. 【重要】bashスクリプト内の値分岐if-else文を検出

---

### Step 6: case関数適用可能性の詳細確認(必須・最重要)

!`bash "${CLAUDE_PLUGIN_ROOT}/skills/review-actions-workflow/scripts/check-workflow.sh" --case-function`

**⚠️ このステップは特に重要です。必ず実行してください。**

case関数は以下の3つのパターンで改善効果があります:

#### パターン1: GitHub Actions式での三項演算子風記述

```yaml
# 改善前
run: echo ${{ github.event_name == 'push' && 'production' || 'staging' }}

# 改善後(case関数で明示的に)
run: echo ${{ github.event_name == 'push' && 'production' || github.event_name == 'pull_request' && 'staging' || 'development' }}

パターン2: bashスクリプト内でGitHub Actions式を使った分岐

yaml
# 改善前
run: |
  if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
    echo "production"
  else
    echo "staging"
  fi

# 改善後(ステップレベルif + case関数)

パターン3: 値の分岐だけのif-else文

yaml
# 改善前
run: |
  if [[ "$ENV" == "production" ]]; then
    URL="https://example.com"
  elif [[ "$ENV" == "staging" ]]; then
    URL="https://staging.example.com"
  else
    URL="https://dev.example.com"
  fi

# 改善後(case関数)

この検出結果を基に、case関数での改善提案を必ずレポートに含めること。


Step 7: レポート生成

検出された全ての項目(問題なしも含む)をサマリーと詳細レポートにまとめる。

参考資料

使用タイミング

  • 新しいワークフローファイルを作成した後
  • ワークフローの修正・更新時
  • 定期的なセキュリティ監査
  • CI/CDパイプラインのパフォーマンス改善時
  • チームへのワークフロー引き継ぎ前

注意事項

  • このスキルはワークフローファイルの静的解析を行います
  • 実行時の動作やパフォーマンスは実測が必要です
  • セキュリティの問題は特に優先して対応してください
  • 修正提案は参考情報であり、プロジェクトの要件に合わせて判断してください

チェック漏れ防止のための注意事項

必須実行チェックリスト

レビュー時に以下の全項目を実行したことを確認してください:

セキュリティチェック(3項目)

  • スクリプトインジェクション検出
  • シークレット直接echo検出
  • pull_request_target危険パターン検出

ベストプラクティスチェック(5項目)

  • cache未使用検出
  • reusable workflow確認
  • 【重要】GitHub Actions式での&&/||検出
  • 【重要】bashでActions式を使ったif文検出
  • 【重要】bash内の値分岐if-else検出

パフォーマンスチェック(4項目)

  • concurrency未設定検出
  • timeout-minutes未設定検出
  • checkout最適化確認
  • キャッシュ保存/復元対応確認

保守性チェック(5項目)

  • name未設定ステップ検出
  • ハードコードバージョン検出
  • @main/@master参照検出
  • 【重要】case関数改善可能な条件式検出
  • 【重要】bash値分岐if-else詳細確認

特に注意: case関数関連チェック

case関数関連のチェックは3箇所で実施する必要があります:

  1. ベストプラクティスチェック(Step 3) - 項目3, 4, 5
  2. 保守性チェック(Step 5) - 項目4, 5
  3. case関数適用可能性の詳細確認(Step 6)これが最重要

Step 6を必ず実行し、3つのパターン全てを確認してください。

チェック実行時の注意

  • 各コマンドの実行結果は、問題が見つからなくても「なし」または「✓」として記録する
  • Step 6のcase関数チェックは省略禁止
  • レポートには全てのチェック項目の結果を含める(問題なしも含む)