7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravelプロジェクトに静的解析ツール(Larastan)を導入

Last updated at Posted at 2023-05-24

1. はじめに

Laravelプロジェクトにおいて、コードの品質管理は何をしていますか?
大抵のプロジェクトではコードレビューで品質の担保をしていると思いますが、
設計・コーディングに集中できるように、少しでもレビュー時間を減らしたいですよね。

また、型の定義やPHPDocなどのミスは指摘しやすい分、
ほかのエラーハンドリングなど保守性の観点を見逃してしまうこともあると思います。

静的解析ツールを導入することで、そういった機械的な観点を事前に検出し、
レビュー時にはプロジェクトにおいて必要な観点のチェックに集中することができるようになるはずです。

本記事では、Laravelの静的解析ツールであるLarastanについてご紹介します。

2. 対象読者

  • Laravelを用いた開発経験がある方
  • 静的解析ツールについて学びたい方

3. 目次

4. 環境

  • PHP 8.2
  • Laravel 9.19
  • Larastan 2.6

5. 本編

5.1 Larastanとは

Larastanとは、Laravelに特化した静的解析ツールです。
LarastanはPHPの静的解析ツールであるPHPStanをベースにしており、Laravelのコードに特化したルールを追加しています。

Larastanではコード内のエラー検出に重点を置いており、コードの品質を向上させるためのツールとして活用することができます。

5.2 Larastanのインストール

まずLarastanをプロジェクトにインストールします。Composerを使用して、以下のコマンドを実行します。

$ composer require nunomaduro/larastan:^2.0 --dev

※Larastan2.xを使用する場合、下記条件を満たしている必要があります。

  • PHP 8.0以上
  • Laravel 9.0以上

5.3 設定ファイルの作成

次に、プロジェクトルートにphpstan.neonファイルを作成します。

phpstan.neon
includes:
    - ./vendor/nunomaduro/larastan/extension.neon

parameters:

    paths:
        - app/

    # Level 9 is the highest level
    level: 5

#    ignoreErrors:
#        - '#PHPDoc tag @var#'
#
#    excludePaths:
#        - ./*/*/FileToBeExcluded.php
#
#    checkMissingIterableValueType: false

利用可能なオプションについては、PHPStanのドキュメントを参照してください。

5.4 静的解析の実行

最後に、phpstanコマンドを実行します。
Larastanはプロジェクトのコードを解析し、コード内のエラーや問題点を探し出します。解析結果はターミナルに出力され、具体的な問題点とその存在するファイル・行数が示されます。

$ ./vendor/bin/phpstan analyse

Note: Using configuration file /var/www/api/phpstan.neon.
 50/50 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

 [OK] No errors

エラーがなければこのような表示になります。

例えば、Userモデルに未定義のプロパティを参照している場合は下記のようなエラーが表示されます。

$ ./vendor/bin/phpstan analyse

Note: Using configuration file /var/www/api/phpstan.neon.
 50/50 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

 ------ --------------------------------------------------------------------------
  Line   Services/AuthService.php
 ------ --------------------------------------------------------------------------
  34     Access to an undefined property App\Models\User::$foge.
         💡 Learn more:
            https://phpstan.org/blog/solving-phpstan-access-to-undefined-property
 ------ --------------------------------------------------------------------------

  [ERROR] Found 1 error

5.5 設定のカスタマイズ

phpstan.neonを編集することで、様々な設定をカスタマイズすることができます。

ここでは、設定項目の1つである、解析の厳しさを設定するレベル(level: x)について説明します。

レベルは0から9まであり、数値が大きいほど厳しく解析を行います。レベルは累積的であり、例えば、レベル5を設定すると、レベル0からレベル5までのルールが適用されます。各レベルについての詳細は、次のサイトを参照してください。

5.6 Github Actionsでの利用

ここまでは、コマンドラインでの実行を紹介しましたが、最後にGithub Actionsでの利用方法を紹介します。

プロジェクトのルートに.github/workflows/phpstan.ymlを作成します。

下記では、pushイベントが発生した場合に、Larastanを実行するジョブを定義しています。そうすることで、コードをpushするたびにLarastanが実行され、コード内の問題点を検出することができ、未然にバグを防ぐことができます。

phpstan.yml
name: larastan job

on:
  push:

jobs:
  larastan:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: 8.2
        tools: composer:v2

    - name: Get Composer Cache Directory
      id: composer-cache
      run: echo "::set-output name=dir::$(composer config cache-files-dir)"

    - name: Cache Composer dependencies
      uses: actions/cache@v2
      with:
        path: ${{ steps.composer-cache.outputs.dir }}
        key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-composer-

    - name: Install dependencies
      run: composer install --prefer-dist --no-progress

    - name: Run Larastan
      run: ./vendor/bin/phpstan analyse

6. さいごに

Larastanは、Laravelの開発において、コードの品質を向上させるための強力なツールです。コードの問題を早期に発見し、バグの予防やコードレビューの効率化に役立ててください!

7. 参考サイト

7
2
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
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?