Laravel開発の必須ツール、Larastanを紹介

Laravel

こんにちは!

突然ですが、Laravelを使っていてコードの可読性の低さやバグの多さに悩んでいませんか?
特に、プロジェクトが大きくなるにつれて、保守性や可読性が低下し、開発チーム全体の生産性が影響を受けることも。

そんな悩みを解消するための強力なツールが、今回ご紹介する「Larastan」です。
Larastanは、PHPStanを基にしたLaravel専用の静的解析ツールで、型安全性を向上させると同時に、潜在的なバグを事前に検出することができます。

本記事では、LarastanがどのようにLaravel開発をサポートするのか、その導入方法や実際の活用事例を紹介します。開発の効率を高めたいあなたに、ぴったりの情報をお届けします!

導入方法

まずは公式サイトをご紹介します。

GitHub - larastan/larastan: ⚗️ Adds code analysis to Laravel improving developer productivity and code quality.
⚗️ Adds code analysis to Laravel improving developer productivity and code quality. - larastan/larastan

こちらの公式に沿って解説していきます。

まずは、composer経由でLarastanをLaravelプロジェクトにインストールしていきましょう。

$ composer require --dev "larastan/larastan:^2.0"
注意 最新版では、PHP8.0以上/Laravel9.0以上のバージョンが必要になります。ご注意ください。

phpstanの設定

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

$ touch phpstan.neon

作成した設定ファイルを以下のように編集します。

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

parameters:

    paths:
        - app/

    # Level 9 is the highest level
    level: 5

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

重要なのは、以下の行です。

level: 5

ここで、解析のレベルを設定しています。解析レベルは1〜9まであり、数字が大きくなるにつれて判定が厳しくなります。なおデフォルトでは、5となっています。

解析実行

ここまでで基本的なセットアップは終了です。非常に簡単ですよね。

解析を実行するには、以下のコマンドを実行します。

$ ./vendor/bin/phpstan analyse

何もエラーがなければ、以下のような出力になります。

larastan成功

エラーがあった場合は、以下のようになります。

具体的にどこがどのような理由でエラーになっているかがわかるので、便利ですよね✨

運用方法あれこれ

普通にコマンドを叩いて、都度解析結果を確認するのでも良しです。
ただ、より本格的に開発に組み込みたい場合は、次に紹介する方法など試してみてはいかがでしょうか。

Gitのpre-pushフックにLarastanを導入する

お恥ずかしながら筆者は最近知ったのですが、Gitには「pre-pushフック」といって、リポジトリにpushする前に特定の処理を実行できる機能があったらしいです。というわけで、これを使ってみます。

pre-pushフックの実行ファイルは、.git/hooks/pre-pushになるようです。デフォルトで、.git/hooks/pre-push.sampleというファイルがあるので、こちらをコピーしていきます。

$ cp .git/hooks/pre-push.sample .git/hooks/pre-push
$ vim .git/hooks/pre-push

テキストエディタはなんでも良いですが、今回はvimで編集していきます。

echo "larastan実行中..."

cmd="./vendor/bin/phpstan analyse"

$cmd

if [[ $? -ne 0 ]]; then
  echo "静的解析が失敗したので、pushしませんでした"
  exit 1
fi

echo "静的解析が通ったので、pushを進めます"

exit 0

こんな感じでシェルスクリプトを書くと、pushする前にLarastanを実行してくれます。

$ git push -u origin master

larastan実行中...
静的解析が通ったので、pushを進めます
...

他にも、pre-commitフックなど色々とあるみたいなので、ぜひ一度調べてみると良いです。

CIでLarastanを実行する

例えば、GitHub ActionsなどでリポジトリにpushするたびにLarastanを実行することもできます。

$ mkdir .github/workflows && touch .github/workflows/laravel-test.yml

laravel-test.ymlを次のように編集します。

name: Laravel Test

on:
  push:
    branches:
      - master

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3

    - name: Set up PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.2'
    
    - name: Install dependencies
      run: |
        cp .env.example .env
        composer install
        php artisan key:generate

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

こうすることで、masterブランチにpushされるたびに、Larastanを実行することができるようになります。

コメント

タイトルとURLをコピーしました