Skip to content

PHPStan設定のセキュリティと整合性改善

概要

このドキュメントは、PR #179 のフィードバックに基づいて実装されたセキュリティと整合性の改善について説明します。

実装された改善点

1. セキュリティ改善:PHPStanのignoreパターンの段階的改善

変更前(過度に寛容):

yaml
# 未定義変数エラーの無視(コードベース全体に適用)
- '#Variable \$[a-zA-Z0-9_]+ might not be defined\.#'
- '#Undefined variable: \$[a-zA-Z0-9_]+\.#'
- '#Variable \$[a-zA-Z0-9_]+ in isset\(\) always exists and is not nullable\.#'
- '#Variable \$[a-zA-Z0-9_]+ on left side of \?\? always exists and is not nullable\.#'

# Twig関連のエラーを一時的に無視(コードベース全体に適用)
- '#Class Twig\\Environment not found\.#'
- '#Class Twig\\Loader\\FilesystemLoader not found\.#'

変更後(パス指定による限定):

yaml
# 未定義変数エラーの無視(特定ディレクトリのみに限定)
- message: '#Variable \$[a-zA-Z0-9_]+ might not be defined\.#'
  paths:
    - core_src/View/*
    - core_src/pastFunctions/*
- message: '#Undefined variable: \$[a-zA-Z0-9_]+\.#'
  paths:
    - core_src/View/*
    - core_src/pastFunctions/*
- '#Variable \$[a-zA-Z0-9_]+ in isset\(\) always exists and is not nullable\.#'
- '#Variable \$[a-zA-Z0-9_]+ on left side of \?\? always exists and is not nullable\.#'

# Twig関連のエラーを一時的に無視(特定ディレクトリのみに限定)
- message: '#Class Twig\\Environment not found\.#'
  paths:
    - core_src/View/*
- message: '#Class Twig\\Loader\\FilesystemLoader not found\.#'
  paths:
    - core_src/View/*

効果:

  • コードベース全体ではなく、特定のディレクトリ(View、pastFunctions)のみでエラーを無視
  • セキュリティリスクを大幅に軽減
  • 段階的改善により、既存コードへの影響を最小化しながら徐々にエラーを解決
  • CI/CDパイプラインの継続性を保持

2. 設定の整合性:ワークフローとバリデーションスクリプトの統一

変更前:

  • バリデーションスクリプト: composer analyse を期待
  • GitHub Actions: vendor/bin/phpstan を直接実行

変更後:

  • 両方とも composer analyse スクリプトを使用
  • 統一された実行方法

効果:

  • ローカル開発とCI/CDの一貫性
  • 設定変更時の影響範囲の明確化
  • デバッグの簡素化

3. エラーハンドリングの改善:段階的改善のサポート

追加された設定:

yaml
- name: Run PHPStan analysis
  id: phpstan-check
  continue-on-error: true
  run: |
    echo "::group::PHPStan Analysis"
    # Run PHPStan using composer script for consistency with validation
    composer analyse
    echo "::endgroup::"

効果:

  • 段階的な品質改善が可能
  • CI/CDパイプラインの安定性向上
  • 開発フローの継続性

4. キャッシュ戦略の改善:core_src依存関係の考慮

変更前:

yaml
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}

変更後:

yaml
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock', 'core_src/composer.lock') }}

効果:

  • core_src依存関係の変更も適切に検出
  • キャッシュの精度向上
  • ビルド時間の最適化

5. Composer設定の明示化

変更:

json
"analyse": "vendor/bin/phpstan analyse --memory-limit=1G --configuration=config/phpstan.neon"

効果:

  • 設定ファイルの明示的な指定
  • 設定ミスの防止
  • 実行の一貫性

設定ファイルの変更箇所

config/phpstan.neon

  • ignoreErrorsセクションの具体化
  • セキュリティを考慮したパターン限定

.github/workflows/phpcs-check.yml

  • composer scriptの使用
  • continue-on-errorの追加
  • キャッシュキーの改善

composer.json

  • analyseスクリプトの設定明示化

検証方法

ローカル環境での検証

bash
# 設定確認と PHPCS / PHPStan / Deptrac を一括実行
composer quality-check

CI/CD環境での検証

  • GitHub Actions が正常に実行されることを確認
  • キャッシュが適切に動作することを確認
  • continue-on-errorにより段階的改善が可能であることを確認

今後の改善方針

  1. 段階的なエラー解決

    • continue-on-errorにより、段階的にPHPStanエラーを解決
    • 新規コードでのエラー発生を防止
  2. セキュリティの継続的改善

    • ignoreパターンの定期的な見直し
    • より具体的なパターンへの段階的移行
  3. パフォーマンス最適化

    • キャッシュ戦略の継続的改善
    • 分析時間の短縮

参考資料


最終更新: 2025-09-08 作成者: GitHub Copilot 関連Issue: #174 関連PR: #179