0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actionsで品質チェックを自動化する

0
Posted at

開発が進むにつれて、

  • フォーマットが揃っていない
  • Lintエラーが混ざる
  • 型エラーに気付かない
  • シークレットを誤ってコミットする
  • 脆弱性のあるライブラリを利用している

といった問題が発生しやすくなります。

これらはレビューで見つけることもできますが、人が毎回確認するには限界があります。

そこで、GitHub Actionsを利用して品質チェックを自動化しました。


なぜ自動化したのか

以前は、

  • ローカルでESLintを実行
  • 必要ならPrettierを実行
  • 型チェック
  • 静的解析

といった流れでした。

しかし、

  • 実行し忘れる
  • 開発者によって実行内容が違う
  • レビューで指摘される

ことも少なくありませんでした。

そこで、

Pull Requestを作成すれば、自動で品質チェックが実行される仕組みにしました。


全体構成

Pull Request

↓

GitHub Actions

├─ ESLint
├─ Prettier
├─ TypeScript
├─ PHPStan(Larastan)
├─ Pint
├─ Gitleaks
└─ Trivy

↓

結果をGitHubへ表示

レビュー前に問題が分かるため、

レビュアーはコードの内容に集中できます。


GitHub Actions

Workflowは次のような構成です。

name: Quality Check

on:
  pull_request:

jobs:
  quality:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - uses: shivammathur/setup-php@v2
        with:
          php-version: 8.3

      - run: npm ci
      - run: composer install

ここから各チェックを実行します。


ESLint

JavaScript・TypeScriptのLintを実行します。

- name: ESLint
  run: npm run lint

例えば、

  • 未使用変数
  • import漏れ
  • コーディングルール違反

などを検出できます。


Prettier

フォーマットの統一です。

- name: Prettier
  run: npm run format:check

インデントや改行など、

人による書き方の違いをなくせます。


TypeScript

型チェックを実行します。

- name: Type Check
  run: npm run typecheck

実行しているのは、

tsc --noEmit

です。

JavaScriptでは気付きにくい型エラーを早い段階で検出できます。


PHPStan(Larastan)

LaravelではLarastanを利用しています。

- name: PHPStan
  run: ./vendor/bin/phpstan analyse

例えば、

  • null参照
  • 型の不一致
  • 存在しないメソッド

などを検出できます。


Laravel Pint

コードフォーマットを確認します。

- name: Pint
  run: ./vendor/bin/pint --test

ローカルでは自動整形、

CIではチェックのみ実施しています。


Gitleaks

誤ってコミットした秘密情報を検出します。

- name: Gitleaks
  uses: gitleaks/gitleaks-action@v2

例えば、

  • APIキー
  • Token
  • Password
  • Secret

などを検出できます。

GitへPushする前に見つけられるため、セキュリティ事故の防止につながります。


Trivy

脆弱性チェックです。

- name: Trivy
  uses: aquasecurity/trivy-action@0.28.0
  with:
    scan-type: fs

利用しているライブラリやコンテナイメージに脆弱性がないか確認できます。

重大な脆弱性が見つかった場合は、Pull Requestの段階で気付けます。


実行結果

Pull Requestを作成すると、

✅ ESLint

✅ Prettier

✅ TypeScript

✅ PHPStan

✅ Pint

✅ Gitleaks

✅ Trivy

のように結果が表示されます。

失敗したジョブがある場合はマージ前に修正できます。


導入して感じたこと

一番変わったのは、

レビューで指摘される内容が減ったことです。

以前は、

  • フォーマットが違う
  • 未使用変数がある
  • import順がおかしい

といった指摘もありました。

現在はGitHub Actionsが自動で確認するため、

レビューでは、

  • 設計
  • 命名
  • 実装内容

といった部分に集中できるようになりました。


まとめ

今回構築したWorkflowでは、

  • ESLintでLintチェック
  • Prettierでフォーマット確認
  • TypeScriptで型チェック
  • PHPStan(Larastan)で静的解析
  • Pintでコードスタイル確認
  • Gitleaksでシークレット検出
  • Trivyで脆弱性診断

をPull Requestごとに自動実行しています。

品質チェックは人が行うよりも、ツールに任せた方が再現性があります。

GitHub Actionsへ組み込むことで、開発者全員が同じ基準でチェックを受けられるようになり、レビューの効率化や品質向上につながりました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?