開発が進むにつれて、
- フォーマットが揃っていない
- 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へ組み込むことで、開発者全員が同じ基準でチェックを受けられるようになり、レビューの効率化や品質向上につながりました。