4.0で利用しているテスティングフレームワークはもちろんPHPUnitです。6.0系を使っていましたが8.5.0に更新されています。PHPUnitで、コードカバレッジを取得するにはXdebugを使うのが定番ですが、PHPUnit8系ではXdebug以外にPCOVを利用することができます。PCOVは、今年(2019年)リリースされたばかりのコードカバレッジドライバーで、高速かつ省メモリで動作することが特徴です。いうことで、今回は実際にどれくらい高速化できるのかを簡単に調べてみました。当初、CakePHP3で作ったサンプルアプリをCakePHP4化して試そうと思っていたのですが、いろいろな問題があり断念しCakePHP4本体のテストの一部(CakePHPのUnitTestすべてを実行するとかなり時間がかかるので、ORMのテストのみ)を利用して計測しました。Containerで、PHP公式で公開されているこちらをベースに若干拡張などを追加したものを利用しています。それぞれのバージョンは以下のとおりです。stableコードカバレッジなしまずは、Xdebugを無効にしてコードカバレッジなしでの計測結果がこちら。2.XdebugXdebugでコードカバレッジを取得した場合がこちら。minutes]やはりかなり遅いですね。PCOVPCOVでの計測結果がこちら。seconds]なんと、Xdebugを使った場合と比べると約10分の1の時間で完了しています!カバレッジを計測していない場合と比べると、約3.5倍。Xdebugと比べると許容範囲かなと思います。MB実際のコードで実行時間に差は出るとは思いますが、かなりの高速化が期待できそうです。CakePHP4へのアップデートはプラグインやライブラリの対応など、まだ色々とハードルはありますが、PHPUnitのバージョンアップはかなり魅力的だと思っています。PHPUnit自体の変更については全く追えていないので今後キャッチアップしていきたいと思っています。Signature(SAS)を使ってBlobにデータを上げる必要があって、若干ハマったのでメモ。SASってのもありますが、今回はストレージアカウントのキーを使う感じで。SASに関しては、亀淵さんのブログが参考になると思います。今回使用するバックエンドはPHPなので、SASの作成には、microsoft/azure-storage-blobを使うことにします。こんなエラーがでてしまいます。アップロード、一覧表示、および削除するを実際に動かして、リクエスト内容などを確認した結果ようやく原因がわかりました。使っていたのですが、TimeZoneの書式が違うことが原因でした。使うことで正常にアップロードできました。"\n";}サンプルコードは、こちらにもあげてあります。DevOpsを利用して、CI/CD環境を構築しています。バックエンドはPHPで開発していて、UnitTestを結構しっかり書いています。見ようと設定をしたところ、以下のようなエラーが発生してしまいました。実行時間制限がある様子。有効にしてテストを実施しているため通常より実行にかなりの時間がかかることが原因でした。Coverageは取得していません)phpdbgを利用すると速度はかなり改善するのですが、こちらはメモリの非常に大量に消費します。今年公開されたばかりのPCOVを使用すると実行速度、メモリ使用量共に劇的に改善できそうなのですが、PHPUnit8でないと対応していないため、今回使用しているCakePHPのアプリには現状適用できません。CodeCoverageを取るしかなさそうです...。agentを試すことにしました。DevOpsのagentには以下の2つの提供方式があります。agentsは、MSさんが提供しているagentで以下のような種類があります。agentsの制限事項は以下の点。パブリックプロジェクト且つ、パブリックリポジトリのjobは、360分(6時間)までプライベートプロジェクトまたは、プライベートリポジトリのjobは60分まで。DevOpsから利用することが出来ます。1つであれば無料で利用することができるので、VMの利用料のみで使用可能です。Docker上での実行もサポートされているので、k8s上で実行することもできそうです。agentsの場合は、実行時間の制限はありません。今回は実験ということで、VMを1台立ててagentをインストールすることにします。dockerのインストール今回のjobではdocker-composeを使用するのでまずは、dockerをインストールします。agentのディレクトリ構成に依存しているので以下のディレクトリを作成しました。organizationのPATを作成する。作成したPATは、agentインストール時に使用します。Poolを選択します。ボタンを押すと以下のようなインストール手順の解説が表示されます。ここで取得できる、agentのダウンロードURLを使用して、指示通りに設定を進めます。以下のコマンドで、agentをserviceとして登録できます。poolに表示されます。poolを指定すれば完了です。agentは以外に簡単に導入できました。Docker上での実行もサポートされているようなので、今回のプロジェクトではステージング環境のAKSクラスタ上でカバレッジ用のagentを実行できないか検討しているところです。CIが成長してくると、ビルド時間との戦いになることはよくあることではないかと思います。テスト、ビルド手順の見直しも必要ですが、CI環境自体をパワーアップして改善する必要があることもあります。agentはかなり有効だと思います。スポンサーとしてPHP用のライブラリを公開しました。.NETやNode.jsなどで利用する場合は、とても簡単に様々な機能を利用できるのですが、PHP用のSDKはシンプルなライブラリなので、アプリケーションに組み込むにはある程度自前での実装が必要になります。2019での公開に向けて、公開可能な形にまとめ直したのが、Phaiです。middlewaregithub.comPhaiは、PSR-15準拠のミドルウェアです。Expressive位であまり多くはありませんが、今後サポートする方向に進むのではないかと思います。各フレームワークでPSR-15をサポートするライブラリが公開されているため、問題なく利用することができます。v3を参考に私が開発したものです。CakePHP他にもありそうですが普段使っていないフレームワークに関しては探しきれていません...。他に何かあれば教えて下さいm(__)m使用方法Phaiには、Slim3とCakePHP3用のサンプルが同梱されていますが、以下に簡単な使い方を解説します。