# バッチ設計書 43-Super-Linter（super-linter.yml）

## 概要

本ドキュメントは、GitHub Actionsワークフロー「Super-Linter」（super-linter.yml）のバッチ設計書である。Pull Request時にSuper-Linterを使用してコードベース全体の静的解析を実行し、コーディング規約やベストプラクティスへの準拠を検証するワークフローについて記載する。

### 本バッチの処理概要

本ワークフローは、Pull Request時にGitHub Super-Linter（slimバージョン）を使用して、コードベース全体に対してDockerfile Hadolintの静的解析を実行し、品質基準を維持する。

**業務上の目的・背景**：mrubyプロジェクトにはDockerfileが含まれており、Dockerfileのベストプラクティス違反がセキュリティリスクやビルドの非効率性につながる可能性がある。Super-Linterを使用してPull Request時にDockerfileの品質を自動検証することで、一貫した品質基準を維持し、レビュアーの負担を軽減する。

**バッチの実行タイミング**：Pull Request作成時および更新時に自動実行される。

**主要な処理内容**：
1. リポジトリのソースコードを完全な履歴付きでチェックアウトする（fetch-depth: 0）
2. Super-Linter（slim版v8.5.0）でDockerfile Hadolint検証をコードベース全体に対して実行する

**前後の処理との関連**：本ワークフローはPull Requestの品質ゲートとして機能し、pre-commit（No.42）やls-lint（No.44）等の他のLintワークフローと並行して実行される。Dockerfileの品質はDockerイメージビルド（No.48）の安定性に直接影響する。

**影響範囲**：Pull Requestのマージ可否判定。Dockerfile Hadolintの検証結果がPull Requestのステータスチェックとして表示される。

## バッチ種別

品質管理 / コードLint / CI（継続的インテグレーション）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（イベント駆動） |
| 実行時刻 | 該当なし（イベントトリガー） |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | Pull Request作成・更新時 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| GitHubリポジトリ | mrubyリポジトリがGitHub上に存在すること |
| Pull Request | Pull Requestイベントが発生していること |
| GITHUB_TOKEN | シークレットとしてGITHUB_TOKENが利用可能であること |

### 実行可否判定

GitHub Actionsのpull_requestイベントトリガーにより自動判定される。全てのPull Requestに対して実行され、ブランチのフィルタリングは行われない。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| VALIDATE_DOCKERFILE_HADOLINT | boolean | No | true | Dockerfile Hadolintの検証を有効化 |
| DEFAULT_BRANCH | string | No | master | デフォルトブランチ名 |
| VALIDATE_ALL_CODEBASE | boolean | No | true | コードベース全体を検証対象とする |
| GITHUB_TOKEN | string | Yes | secrets.GITHUB_TOKEN | GitHub APIアクセス用トークン |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| リポジトリソースコード | ファイルシステム | 完全なgit履歴付きでチェックアウトされたソースコード |
| Dockerfile | Dockerファイル | Hadolintによる検証対象のDockerfile |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| Pull Requestステータス | GitHub Check / Statuses | ワークフローの成功/失敗ステータス |
| GitHub Actionsログ | テキスト | Lint実行結果の詳細ログ |

### 出力ファイル仕様

本ワークフローはファイル出力を行わない。結果はGitHub Actionsのログおよびステータスとして出力される。

| 項目 | 内容 |
|-----|------|
| ファイル名 | 該当なし |
| 出力先 | GitHub Actionsログ / PRステータス |
| 文字コード | 該当なし |
| 区切り文字 | 該当なし |

## 処理フロー

### 処理シーケンス

```
1. リポジトリチェックアウト
   └─ actions/checkout@v6でfetch-depth: 0（完全履歴）でソースコードを取得
2. Super-Linter実行
   └─ super-linter/super-linter/slim@v8.5.0でDockerfile Hadolint検証を全コードベースに対して実行
```

### フローチャート

```mermaid
flowchart TD
    A[ワークフロー開始<br>Pull Request] --> B[リポジトリチェックアウト<br>fetch-depth: 0]
    B --> C[Super-Linter実行<br>Dockerfile Hadolint]
    C --> D{Lint結果}
    D -->|違反なし| E[ワークフロー成功]
    D -->|違反あり| F[ワークフロー失敗<br>違反詳細をログ出力]
```

## データベース操作仕様

### 操作別データベース影響一覧

本ワークフローはデータベース操作を行わない。

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| 該当なし | 該当なし | 該当なし | 該当なし |

### テーブル別操作詳細

該当なし。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | Hadolint違反 | DockerfileがHadolintルールに違反している場合 | Dockerfileを修正してPRを更新する |
| - | Super-Linterセットアップエラー | Super-LinterのDockerイメージ取得に失敗した場合 | GitHub Actionsを再実行する |
| - | チェックアウトエラー | リポジトリの完全履歴取得に失敗した場合 | ランナー状態を確認し再実行する |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 手動で再実行（GitHub Actions UIまたはPR更新） |
| リトライ間隔 | 該当なし（手動） |
| リトライ対象エラー | 一時的なインフラエラー |

### 障害時対応

Lint違反による失敗の場合は、ログから違反箇所とルールIDを特定し、Dockerfileを修正してPull Requestを更新する。インフラ起因の場合はGitHub Actions UIからワークフローを再実行する。

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | 該当なし（CI/CDパイプライン） |
| コミットタイミング | 該当なし |
| ロールバック条件 | 該当なし |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | リポジトリ全ファイル（VALIDATE_ALL_CODEBASE: true） |
| 目標処理時間 | 明示的な規定なし |
| メモリ使用量上限 | ubuntu-latestランナーのデフォルト（7GB RAM） |

## 排他制御

GitHub Actionsの標準動作により、同一PRに対する複数のワークフロー実行が発生する可能性がある。concurrencyの設定は定義されていないため、同時実行が許可されている。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | ワークフロー開始時 | GitHub Actionsの標準ログ（PRイベント情報） |
| 進捗ログ | Lint実行中 | 各ファイルのLint結果、検出された違反の詳細 |
| 終了ログ | ワークフロー終了時 | Lint結果サマリー |
| エラーログ | 違反検出時 | 違反ファイル名、行番号、Hadolintルール名、修正ガイダンス |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ワークフロー失敗 | 1回 | GitHubリポジトリの通知設定に従う |
| Lint違反検出 | 1件以上 | Pull Requestのステータスチェック |

## 備考

- Super-Linterはslimバージョン（v8.5.0）を使用しており、フルバージョンより軽量
- 現在有効化されているLinterはDockerfile Hadolintのみ。コメントアウトされた設定にBASH_EXEC、EDITORCONFIG、SHELL_SHFMTがある
- `fetch-depth: 0`により完全なgit履歴を取得するため、チェックアウトに時間がかかる場合がある
- 権限設定として`contents: read`と`statuses: write`が必要
- DEFAULT_BRANCHはmasterに設定されている
