---
title: PHPStanをチームに内緒で開発に取り入れる方法
tags: 
author: [Natsuki](https://convert.docswell.com/user/natsuki)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/8EDY5MLKEG.jpg?width=480
description: PHP勉強会 in 大阪(03/27)
published: October 08, 24
canonical: https://convert.docswell.com/s/natsuki/K7RG68-2024-10-08-175403
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/8EDY5MLKEG.jpg)

PHPStanをチームに内緒で
開発に取り入れる方法
株式会社ヘッドジャパン
Natsuki


# Page. 2

![Page Image](https://bcdn.docswell.com/page/V7P6GR23J8.jpg)

PHPStan使ってますか?


# Page. 3

![Page Image](https://bcdn.docswell.com/page/2JV36RDNEQ.jpg)

PHPStan使ってますか?
● PHPの静的解析ツール


# Page. 4

![Page Image](https://bcdn.docswell.com/page/5EG3NMY57L.jpg)

PHPStan使ってますか?
● PHPの静的解析ツール
● PHPDocに書いた型でチェックしてくれる


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4JQ5QRML7P.jpg)

PHPStan使ってますか?
● PHPの静的解析ツール
● PHPDocに書いた型でチェックしてくれる
● 未然に潜在的なエラーや問題を見つける


# Page. 6

![Page Image](https://bcdn.docswell.com/page/K749N8V5E1.jpg)

PHPStan使ってますか?
●
●
●
●
PHPの静的解析ツール
PHPDocに書いた型でチェックしてくれる
未然に潜在的なエラーや問題を見つける
levelの設定でルールの厳しさを調整できる


# Page. 7

![Page Image](https://bcdn.docswell.com/page/LJ1K52327G.jpg)

PHPStanが無いとき
引数が数値を表す文字列で
あれば、int型に変換する
‘aaaa’が渡されたとき
nullが返る


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GJWD5RP272.jpg)

PHPStanがあるとき
指摘してくれる！！


# Page. 9

![Page Image](https://bcdn.docswell.com/page/4EZGNRK4J3.jpg)

こんなエラーが出る
int型を返すべきなのに、return文がmissingだよ


# Page. 10

![Page Image](https://bcdn.docswell.com/page/Y76Y8RQGEV.jpg)

PHPStanすごい！うちのPJにも欲しい！！


# Page. 11

![Page Image](https://bcdn.docswell.com/page/G75G98RX74.jpg)

PHPStanすごい！うちのPJにも欲しい！！
でも、、、
● composer.jsonに変更が入るから仕事で触ってるPJに入れるには、
チームの同意が要る


# Page. 12

![Page Image](https://bcdn.docswell.com/page/9J2Y2KDQJR.jpg)

PHPStanすごい！うちのPJにも欲しい！！
でも、、、
● composer.jsonに変更が入るから仕事で触ってるPJに入れるには、
チームの同意が要る
● 個人的なPJなら自由に入れられるけど、大した規模じゃ無いからあん
まりエラーも無い


# Page. 13

![Page Image](https://bcdn.docswell.com/page/DEYGYN2YEM.jpg)

PHPStanすごい！うちのPJにも欲しい！！
でも、、、
● composer.jsonに変更が入るから仕事で触ってるPJに入れるには、
チームの同意が要る
● 個人的なPJなら自由に入れられるけど、大した規模じゃ無いからあん
まりエラーも無い
ごめんよ、うちでは飼ってあげられないんだ


# Page. 14

![Page Image](https://bcdn.docswell.com/page/VJNGPX8R78.jpg)

PHPStanすごい！うちのPJにも欲しい！！
でも、、、
● composer.jsonに変更が入るから仕事で触ってるPJに入れるには、
チームの同意が要る
● 個人的なPJなら自由に入れられるけど、大した規模じゃ無いからあん
まりエラーも無い
ごめんよ、うちでは飼ってあげられないんだ
そんなことない！！！


# Page. 15

![Page Image](https://bcdn.docswell.com/page/YE9W38KZE3.jpg)

仕事で触ってるPJに入れてみよう！！


# Page. 16

![Page Image](https://bcdn.docswell.com/page/GE8NM82Y7D.jpg)

仕事で触ってるPJに入れてみよう！！
project-a
L
src
L
vendor
L
composer.json


# Page. 17

![Page Image](https://bcdn.docswell.com/page/LELP3R297R.jpg)

仕事で触ってるPJに入れてみよう！！
project-a
my-phpstan
L
src
L
vendor
L
vendor
L
composer.json
L
composer.json
L
phpstan.neon


# Page. 18

![Page Image](https://bcdn.docswell.com/page/4JM4DR8V7W.jpg)

仕事で触ってるPJに入れてみよう！！
.gitignore
project-a
my-phpstan
L
src
L
vendor
L
vendor
L
composer.json
L
composer.json
L
phpstan.neon


# Page. 19

![Page Image](https://bcdn.docswell.com/page/PJRW4R5W79.jpg)

手順
1.
2.
3.
4.
サブディレクトリにPHPStanをインストール
phpstan.neonを作成
IDEの設定(vscode)
実行


# Page. 20

![Page Image](https://bcdn.docswell.com/page/PEXP2RKV7X.jpg)

1.サブディレクトリにPHPStanをインストール
my-phpstan内で
PJを初期化
composer init


# Page. 21

![Page Image](https://bcdn.docswell.com/page/3EKDMR55JD.jpg)

1.サブディレクトリにPHPStanをインストール
my-phpstan内で
PJを初期化
composer init
PHPStanをインストール
composer install phpstan/phpstan --dev
~/.config/git/ignore にmy-phpstanを追記


# Page. 22

![Page Image](https://bcdn.docswell.com/page/L73RY8K1J5.jpg)

2. phpstan.neonを作成
ルールの厳しさ(0〜8)
解析する対象のパス
(project-aのsrc)
NEON(YAMLみたいなやつ)で記述


# Page. 23

![Page Image](https://bcdn.docswell.com/page/87DY5M3K7G.jpg)

2. phpstan.neonを作成
project-a
my-phpstan
L
src
L
vendor
L
vendor
L
composer.json
L
composer.json
L
phpstan.neon


# Page. 24

![Page Image](https://bcdn.docswell.com/page/VJP6GR43E8.jpg)

4. IDEの設定(vscode)
拡張機能をインストール
https://marketplace.visualstudio.com/items?itemName=SanderRonde.phpstan-vscode


# Page. 25

![Page Image](https://bcdn.docswell.com/page/2EV36RXN7Q.jpg)

4. IDEの設定(vscode)
設定を変更


# Page. 26

![Page Image](https://bcdn.docswell.com/page/57G3NMV5JL.jpg)

5. 実行！！


# Page. 27

![Page Image](https://bcdn.docswell.com/page/4EQ5QR6LJP.jpg)

5. 実行！！
戻り値の型が定義されていない関数だと


# Page. 28

![Page Image](https://bcdn.docswell.com/page/KJ49N84571.jpg)

5. 実行！！
「戻り値の型を指定してね」


# Page. 29

![Page Image](https://bcdn.docswell.com/page/LE1K5242JG.jpg)

注意


# Page. 30

![Page Image](https://bcdn.docswell.com/page/GEWD5RX2J2.jpg)

注意
● 常にエラーが出てるので他のエラーに気付きにくくなる


# Page. 31

![Page Image](https://bcdn.docswell.com/page/47ZGNR64E3.jpg)

注意
● 常にエラーが出てるので他のエラーに気付きにくくなる
● 型情報を書かない人への不満が溜まる
（PHPStanが絶対正しいわけじゃない）


# Page. 32

![Page Image](https://bcdn.docswell.com/page/YJ6Y8R2G7V.jpg)

注意
● 常にエラーが出てるので他のエラーに気付きにくくなる
● 型情報を書かない人への不満が溜まる
（PHPStanが絶対正しいわけじゃない）
● あくまで使い方を学ぶため
○ levelを変えてみたり、色んな型を試したり


# Page. 33

![Page Image](https://bcdn.docswell.com/page/GJ5G982XJ4.jpg)

注意
● 常にエラーが出てるので他のエラーに気付きにくくなる
● 型情報を書かない人への不満が溜まる
（PHPStanが絶対正しいわけじゃない）
● あくまで使い方を学ぶため
○ levelを変えてみたり、色んな型を試したり
そして、ある程度使えるようになったらチームに布教して
型安全な開発体験の素晴らしさを共有


# Page. 34

![Page Image](https://bcdn.docswell.com/page/LE3RY8K475.jpg)

おまけ①（PHPStormの場合）
PHPStormは標準でvscodeの拡張機能と同等の機能がある
この辺の設定が必要


# Page. 35

![Page Image](https://bcdn.docswell.com/page/8EDY5M35EG.jpg)

おまけ②（CLIでの実行）
cliのコマンドだと
my-phpstan\\vendor\\bin\\phpstan analyze --configuration=&quot;./my-phpstan/phpstan.neon&quot;


# Page. 36

![Page Image](https://bcdn.docswell.com/page/V7P6GR4DJ8.jpg)

おまけ③（Laravelの場合）
larastanのREADME.mdを参考にしてください
1. phpstan/phpstanは不要でnunomaduro/larastanを使う
使用しているlaravelのバージョンによってlarastanのバージョンも違うので注意
2. サブディレクトリにorchestra/testbenchをインストール
Laravelを普通に入れてもいいけどこっちの方が軽量
3.
4.
5.
6.
phpstan.neonにincludesを追加
GooGee/ide-helper-file/から_ide_helper.phpをダウンロード
自作Facadeがあれば追記
excludePathsに_ide_helper.phpを追加しておくといいかも


