Skip to content

PHPStan 分離環境対応設定

概要

本プロジェクトでは、開発環境とcore_srcディレクトリで依存関係を分離して管理しています。 この設定により、本番環境への影響を最小限に抑えながら、開発環境での型安全性を確保しています。

依存関係の構成

ルートディレクトリ (/)

  • 用途: 開発ツールの管理
  • 依存関係: PHPStan, PHPCS, PHPUnit等
  • composer.json: 開発ツールのみを含む

core_srcディレクトリ (/core_src)

  • 用途: アプリケーション依存関係の管理
  • 依存関係: Twig等のアプリケーションライブラリ
  • composer.json: 本番環境で使用される依存関係のみ

PHPStan設定 (phpstan.neon)

bootstrapFiles設定

yaml
bootstrapFiles:
  - vendor/autoload.php # ルートの開発ツール
  - core_src/vendor/autoload.php # core_srcのTwig等
  - config/phpstan_bootstrap.php # PHPStan用のWordPress関数モック

phpstan_bootstrap.phpの役割

config/phpstan_bootstrap.phpは、PHPStan静的解析時にWordPress環境で提供される関数や定数をモックするファイルです。

含まれる定義

  1. WordPress定数

    • MINUTE_IN_SECONDS: WordPress時間定数(実際にDailyDataPerUnitRepository.phpで使用)
  2. WordPress関数モック

    • sanitize_text_field(): テキストフィールドのサニタイズ
    • wp_strip_all_tags(): HTMLタグの除去
    • shortcode_atts(): ショートコード属性のマージ

含まれない定義(理由)

以下の定義は含まれていません。これらは実行時に他のファイルで定義されるため、PHPStanではignoreErrorsで無視しています:

  • ConfigRoot.phpで定義される定数: VERSION, MVC, VIEW, MODEL, SERVICE, CONTROLLER, UTIL, SHORTCODE等
  • ConfigGeneral.phpで定義される定数: HALL**_JAPANESE, HALL*ROMA, ICON, IMAGE_BASE_URL等
  • 使用されていない定数: CLASSHEATMAP_TABLE_SAMAI*(phpstan.neonで既に無視設定済み)

ignoreErrors設定(セキュリティ強化版)

yaml
ignoreErrors:
  # 未定義変数エラーの無視(段階的改善のため一時的に無視)
  # パス指定により特定ディレクトリのみに限定
  - 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/*

GitHub Actions対応

PHPStanワークフローの変更点

  1. core 依存関係のインストール:

    yaml
    - name: Install core dependencies
      run: |
        cd core_src
        composer install --no-progress --prefer-dist --optimize-autoloader
  2. PHPStan実行方法:

    yaml
    - name: Run PHPStan analysis
      run: composer analyse
      continue-on-error: true

ローカル開発環境

依存関係インストール

bash
# ルートディレクトリの開発ツール
composer install

# core_srcのアプリケーション依存関係
cd core_src && composer install

PHPStan実行

bash
# 設定ファイルを明示的に指定
vendor/bin/phpstan analyse --memory-limit=1G --configuration=config/phpstan.neon

# または composer script経由
composer analyse

本番環境デプロイ

本番環境ではcore_srcディレクトリのみがデプロイされ、core_YYYYMMDD_HHMMSSにリネームされます。 この設定により以下のメリットがあります:

  1. セキュリティ: 開発ツールが本番環境に含まれない
  2. パフォーマンス: 必要最小限の依存関係のみ
  3. 保守性: 開発環境と本番環境の依存関係を明確に分離

トラブルシューティング

Twig型定義エラーが発生する場合

  1. core_src/vendor/autoload.phpが存在することを確認
  2. phpstan.neonのbootstrapFilesにcore_src/vendor/autoload.phpが含まれることを確認
  3. ignoreErrorsパターンが適切に設定されていることを確認

検証方法

bash
# 設定確認と品質チェック(config/phpstan.neon の存在も検証される)
composer quality-check

# PHPStan設定の個別テスト(必要に応じて)
vendor/bin/phpstan analyse --memory-limit=1G --configuration=config/phpstan.neon test_twig_types.php