Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

PHPStan使ってますか?

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

5. 実行!!

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

注意

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

my-phpstan\\vendor\\bin\\phpstan analyze --configuration="./my-phpstan/phpstan.neon" cliのコマンドだと おまけ②(CLIでの実行)

Slide 36

Slide 36 text

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