Laravelで開発を続けていると、
- 型の間違いに気づかない
- コーディング規約が人によって違う
- レビューで毎回同じ指摘が入る
ということがよくあります。
そこで導入したのが
- Larastan
- Laravel Pint
です。
どちらも派手なツールではありませんが、導入してからレビューの質や開発効率が少しずつ改善したと感じています。
この記事では、それぞれの役割や導入方法、実際に使って感じたことを紹介します。
Larastanとは
LarastanはLaravel向けの静的解析ツールです。
内部的にはPHPStanをベースにしており、Laravel特有のコードも解析できます。
例えば、
- 型の不一致
- 存在しないメソッド呼び出し
- nullの可能性
- 到達しないコード
などを実行前に検出できます。
なぜ導入したのか
PHPは柔軟な言語ですが、その分実行するまでエラーに気づかないケースがあります。
例えば
$user = User::find($id);
echo $user->name;
一見問題なさそうですが、
find()はnullを返す可能性があります。
Larastanでは
Cannot access property name on User|null
という警告が表示されます。
実際にバグになる前に気付けるため、安心してリファクタリングできるようになりました。
導入
インストールします。
composer require --dev larastan/larastan
設定ファイルを作成します。
includes:
- vendor/larastan/larastan/extension.neon
parameters:
level: 5
paths:
- app
実行します。
vendor/bin/phpstan analyse
レベル設定
Larastanには解析レベルがあります。
0
↓
5
↓
8
↓
9
数字が大きいほど厳しくなります。
最初から最高レベルにすると大量の警告が出ることが多いため、
まずは
level: 5
くらいから始めるのがおすすめです。
Laravel Pintとは
PintはLaravel公式のコードフォーマッターです。
PHP-CS-Fixerをベースに作られています。
役割はシンプルで、
コードを自動で整形する
ことです。
導入
composer require --dev laravel/pint
実行します。
./vendor/bin/pint
これだけです。
例えば
修正前
if($user){
return $user;
}
Pint実行後
if ($user) {
return $user;
}
スペースやインデントなどを自動で整えてくれます。
pint.json
必要であればルールを変更できます。
{
"preset": "laravel"
}
Laravel標準のルールを使う場合はこれだけで十分です。
GitHub Actionsにも組み込める
例えばPR作成時に
- name: Run Pint
run: ./vendor/bin/pint --test
- name: Run Larastan
run: vendor/bin/phpstan analyse
とすることで、
- コードフォーマット
- 静的解析
を自動でチェックできます。
問題があればCIが失敗するため、品質を一定に保ちやすくなります。
導入して感じたこと
一番変わったのは、レビューの内容でした。
以前は
- インデントが違う
- 空行がない
- スペースが違う
といった指摘が多くありました。
Pintを導入してからは、それらを自動で直せるようになり、
レビューでは
- 設計
- 命名
- 実装方針
といった本質的な議論がしやすくなりました。
Larastanについても同様で、
「実行して初めて気付く不具合」が減り、リファクタリングへの心理的なハードルが下がったと感じています。
AIとの相性も良い
最近はAIでコードを書く機会も増えています。
便利な反面、
- 型が曖昧
- 存在しないメソッドを呼んでいる
- コーディングスタイルが統一されていない
といったコードが生成されることもあります。
LarastanとPintをCIに組み込んでおけば、AIが生成したコードも一定の品質でチェックできます。
まとめ
LarastanとPintは、それぞれ役割が異なります。
| ツール | 役割 |
|---|---|
| Larastan | 静的解析 |
| Pint | コードフォーマット |
どちらも導入コストはそれほど高くありません。
一方で、
- バグの早期発見
- コーディングルールの統一
- レビュー効率の向上
といった効果を得られます。
Laravelではテストに注目されることが多いですが、テストだけでは防げない問題もあります。
LarastanとPintを組み合わせることで、コードを書く前・実行する前の段階から品質を高められるようになりました。