phpstanによる静的解析
あなたのコードをテストする方法は、あなたのプロジェクトの保守性を保証する1つの方法であり、また、製品の壊れた機能を出荷しないようにする方法です.CIツールTravis CI あなたがソースコントロールにプッシュするたびにコードをテストするのに役立ちます.
静的解析は、コードを実際に実行することなく、基本的な論理、ランタイムまたは類型例外のコードをテストするメソッドです.
あなたが推測したように、コードベースが実際に実行されないが、期待される日付型を返さないメソッドを持つような一般的なエラーでスキャンされているので、コードベースの静的解析が高速に発生します.
名前が意味する静的解析は、実際にバグをキャッチする前にコードを実行する必要はありません.DARTやJavaのような静的に型付けされた言語は、すでにこの機能をコンパイラに組み込まれています.彼らは常に定義
phpstanを使用するなどの言語構成のカップルをチェックします
最近ではPHPStan Pro phpstanのクリエイターによって発表されました、そして、それはすでに連続した腕時計モード(PHPで熱い再ローディング)で非常に有望です.Web UIとインタラクティブなフィクサー!良いニュースはすぐにエラーを見つけることによって時間とキーストロークのトンを保存するとphpstanあなたとあなたのために修正を提案することができます誰もが幸せです.
以下では、我々のプロジェクトでphpstanを使用する手順を実行します.
phpstanを選択したPHPプロジェクトで使用することができます.このチュートリアルでは、私が使用するスケルトンPHPライブラリを作成しました.マイ
私の作曲家のスクリーンショット.JSONセットアップ
phpstanをdev依存関係にインストールする
今すぐあなたの最初の解析を実行する準備ができて、コピーして、下記のコードをあなたの端末に貼り付けます.
The
phpstanは、
上記のエラーを生成したコードは次のようになります.
編集
彼らが大きくなる前にバグをキャッチし、問題を引き起こす.私がこれをする1つの方法は、phpstanをスクリプトセクションに加えることです
あなたの作曲家のスクリプトセクションに以下を加えてください.JSON :
-phpstan.ネオン:phpstanにphpstanで定義された設定で実行するように指示します.ネオン —レベル: phpstanにどのようなレベルでこの解析を実行しますか —それが我々のコードベースを横切って、分析進展を報告していないPHSTSTAに言う進歩は、特別な旗です.
これは、スクリプトスクリプトのスクリプトのセクションで我々のコードベースを分析するために作曲家スクリプトを加えることによって達成されることができます
あなたはサンプルを見つけることができます
静的解析は最近学んだことで、ユニークなデベロッパー体験をしなければならない.効率的でクリーンなコードを書くことができ、ソースコントロールにする前にエラーをキャッチできます.私は、この記事が静的解析がどのようにより良いコードを書いて、あなたの開発プロセスを改善するのを助けることができるかについての洞察をあなたに与えたことを望みます.あなたの考えとコメントを残してください.
静的解析は、コードを実際に実行することなく、基本的な論理、ランタイムまたは類型例外のコードをテストするメソッドです.
あなたが推測したように、コードベースが実際に実行されないが、期待される日付型を返さないメソッドを持つような一般的なエラーでスキャンされているので、コードベースの静的解析が高速に発生します.
静的解析
名前が意味する静的解析は、実際にバグをキャッチする前にコードを実行する必要はありません.DARTやJavaのような静的に型付けされた言語は、すでにこの機能をコンパイラに組み込まれています.彼らは常に定義
types
コンストラクタの中では、メソッドや変数に対してtypoや不正な型がある場合にはコンパイラは動作しません.phpstanのような静的な解析とツールの出現の前に、PHPの実行が行単位であるため、PHPのコードをデバッグするのに多くの時間を費やします.エラーが発生した後に実行を継続することがあります.phpstanを使用するなどの言語構成のカップルをチェックします
instanceof
, try-catch
ブロックtypehints
, 関数に渡される引数の数、呼び出されたメソッドと変数のアクセシビリティand many more .phpstan:お気に入りの言語で静的解析
最近ではPHPStan Pro phpstanのクリエイターによって発表されました、そして、それはすでに連続した腕時計モード(PHPで熱い再ローディング)で非常に有望です.Web UIとインタラクティブなフィクサー!良いニュースはすぐにエラーを見つけることによって時間とキーストロークのトンを保存するとphpstanあなたとあなたのために修正を提案することができます誰もが幸せです.
プロジェクトでのphpstanの使用
以下では、我々のプロジェクトでphpstanを使用する手順を実行します.
環境設定
phpstanを選択したPHPプロジェクトで使用することができます.このチュートリアルでは、私が使用するスケルトンPHPライブラリを作成しました.マイ
composer.json
インストール前のファイルphpstan
私の作曲家のスクリーンショット.JSONセットアップ
phpstanをdev依存関係にインストールする
composer require --dev phpstan/phpstan
インストール中ですphpstan
作曲家とのdev依存関係として.今すぐあなたの最初の解析を実行する準備ができて、コピーして、下記のコードをあなたの端末に貼り付けます.
phpstan analyse src
あなたのコンテンツに応じてsrc
ディレクトリは、このコマンドを実行した後にいくつかのエラーを得る可能性がありますので、我々はすぐに我々の好みにPHPSTANを設定する方法を見て、それは全く素晴らしいです.phpstanコマンド
The
analyse
キーワードは何かphpstan
コードベースを解析するには、コマンド内の3番目の引数を解析するコードへのパスです.ここで使ったsrc
私が書いたコードがどこにあるのかというと、私のベンダーフォルダや他のテンポラリフォルダを分析する必要はありません.しかし、あなたがテストを書いているならば、それはあなたのtests
ディレクトリも.phpstanにはextensions PhpUnit、Behatおよびmockのような模擬フレームワークのような人気のテストライブラリのために.構成
phpstanは、
neon
その設定のためのファイル形式phpstan.neon
プロジェクトフォルダのルートで.あなたが走るときはいつでもphpstan analyse
コマンドを探すphpstan.neon
ルートで、コードを解析するための設定として使用します.プロジェクトのルートで設定ファイルが見つからない場合は、phpstanもphpstan.neon.dist
としても存在しない場合は、デフォルトの設定を実行します.以下は、基本的な設定オプションを開始するためです.続きを読むhere .parameters:
level: max
paths:
- src
- test
上記の設定を使用すると、現在実行中のphpstan
コマンドpath
ソースコードに.これはあなたが一度有効なコマンドですphpstan.neon
ルートディレクトリにphpstan analyse
とlevel
maxに設定すると、より厳密な解析や不正なタイプヒント、不正な戻り値の型などのエラーが発生します.$ phpstan analyse
Note: Using configuration file Code\demo\photo-library\phpstan.neon.
1/1 [============================] 100%
------ ----------------------------------------------------------------------------------------
Line Photo.php
------ ----------------------------------------------------------------------------------------
7 Property Photo::$http has no typehint specified.
9 Method Photo::__construct() has parameter $token with no typehint specified.
25 Method Photo::photos() return type has no value type specified in iterable type array.
💡 Consider adding something like array<Foo> to the PHPDoc.
You can turn off this check by setting checkMissingIterableValueType: false in your
Code\demo\photo-library\phpstan.neon.
27 Method Photo::photos() should return array but returns string.
------ ----------------------------------------------------------------------------------------
この行に注意してください.Note: Using configuration file Code\demo\photo-library\phpstan.neon.
上記のエラーを生成したコードは次のようになります.
<?php
declare(strict_types=1);
use GuzzleHttp\Client;
class Photo{
private $http;
public function __construct(string $token)
{
$this->http = new GuzzleHttp\Client([
'base_uri' => 'https://photo.google.com',
'headers' => [
'Authorization' => 'Bearer ' . $token
]
]);
}
/**
* Returns an array of photos in the
* library
*
* @return array
*/
public function photos(): array
{
return 'Photos in the library';
}
}
上記のCodeBaseは比較的新しいので、PHP 7.4を使用して厳密な型を有効にしているので、数分後にこれらのエラーを解決することができます.これは、大きなコードベースを持っている場合ではないかもしれません.また、静的解析を行わずにコードを書いているので、これらのエラーが発生した場合には、気分が悪くなりません.編集
phpstan.neon
ファイルと設定level
0と8の間にどこかに私たちが解決するレベルに基づいて緩やかなまたは厳密な分析を行うことができます.The max
レベルは、あなたが持っているphpstanのバージョンによって利用できる最も厳しい値を使用します.レベルについて詳しく知るhere それをバグにしてください
彼らが大きくなる前にバグをキャッチし、問題を引き起こす.私がこれをする1つの方法は、phpstanをスクリプトセクションに加えることです
composer.json
コマンドを実行して、ソースコントロールにプッシュする前にCodeBaseを解析します.また、追加することができますphpstan
トラヴィスCIがビルドされ、我々はどのように少しそれを行うには表示されます.あなたの作曲家のスクリプトセクションに以下を加えてください.JSON :
"scripts": {
"analyse": [
"phpstan analyse src -c phpstan.neon --level max --no-progress",
"phpstan analyse tests -c phpstan.neon --level 4 --no-progress"
],
}
これはスクリプトと呼ばれるanalyse
実行して実行できる作曲家にcomposer run analyse
. ここで指定した2つのコマンドを実行します."phpstan analyse src -c phpstan.neon --level 5 --no-progress"
"phpstan analyse tests -c phpstan.neon --level 5 --no-progress"
第一コマンド解析src
ディレクトリと第2の分析tests
ディレクトリ.私たちはいくつかの引数を渡しています.あなたのトラビスビルドにphpstanを追加する
これは、スクリプトスクリプトのスクリプトのセクションで我々のコードベースを分析するために作曲家スクリプトを加えることによって達成されることができます
.travis.yml
:script:
- composer run analyse
これはデモンストレーション目的のためだけにあります.理想的には、他のチェックを実行して、作曲家の作曲家スクリプトにグループ化できます.JSONファイルを実行し、そのスクリプトを実行します.あなたはサンプルを見つけることができます
.travis.yaml
ここで私はビルドのために使用here とサンプルの作曲家.JSONファイルhere 最終ノート
静的解析は最近学んだことで、ユニークなデベロッパー体験をしなければならない.効率的でクリーンなコードを書くことができ、ソースコントロールにする前にエラーをキャッチできます.私は、この記事が静的解析がどのようにより良いコードを書いて、あなたの開発プロセスを改善するのを助けることができるかについての洞察をあなたに与えたことを望みます.あなたの考えとコメントを残してください.
Reference
この問題について(phpstanによる静的解析), 我々は、より多くの情報をここで見つけました https://dev.to/samuelolaegbe/static-analysis-with-phpstan-1jo5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol