PHPライブラリの評価ポイント(レベル別)

レベル 0 - ライブラリが解決したい課題が分かる・コードがある
空のレポジトリでなければ… 動作しなくてもPoCなコードがあれば…
レベル 1 - ライブラリが目的通り動作する状態である
動作条件がある場合は、README に記載がある。
レベル 2 - composer.json ほか読み込み方法が用意されている
- ライセンスが分かる。
- READMEファイルが存在する。
- 実行方法のサンプルがある。
レベル 3 - ユニットテストが行われている
- メイン動作パスのテストは行われている。
- psalm plugin での codeception利用のように、"厳密な"ユニットテストでなくてもよいと思います。
レベル 4 - CI のセットアップが行われている
ユニットテストのCIが行われた上でマージされている
GitHub Actions でも。CircleCI とかででも。
異常系含めたテストが行われている
テストカバレッジで言うと8割ぐらいのテストを行っている。
packagist への登録が行われている
レベル 5 - バージョニング運用がされている
そのライブラリのバージョンがタグ付けされてる
いわゆる 0ver運用 するのは心情としてわかりますので、この段階ではメジャーバージョンは0でもよいと思います。後述のレベル7ぐらいのタイミングで作成者の方は メジャーバージョンを上げたほうが信頼性が高いです。
動作確認対象のPHPバージョンが明確であり、CIでテストされている
- composer.json で
"php": "~8.1.0 || ~8.2.0"などと書かれていて、そのマイナーバージョンがCIでテストされているか。- 「
"php": "^8.1.0"」 で良いのではないか?と思った方、8.3や8.4で動作保証できるのであれば・・・
- 「
-
"php": ">=7.0"とか書いてて PHP 8 でテストしてないとか論外
レベル 6 - ユニットテスト以外でのQAチェックが行われている
コーディングスタンダードのチェックが行われている
PSR-12(deprecated)はある程度の最低基準なので、doctrine/coding-standard などのよくメンテされている・詳細な追加設定がされているルールを適用されているのが望ましいです。
静的解析が行われている
Psalm だとレベル3、PHPStanだとレベル5ぐらいは欲しいところ
composer-require-checker でのチェック・依存管理が行われている、かもポイント
依存ライブラリについてmatrixチェックが行われている
composer での --prefer-lowest ならびに highest(update) でのテストが行われてないライブラリよく見かけます。特に、--prefer-lowestでのテストでこける場合はあるので、見つかったら依存ライブラリのバージョンを上げておきましょう。
レベル 7 - レポジトリのリリース方法が的確である
Github Community Standards に沿っている
- Security policy ファイルがあるか、など

配布データが必要十分である
- テストコードは .gitattributes でexport-ignore されているか、など
バージョンごとのリリースノートが記載されている
レベル 8 - バージョニングが自動化されている
依存ライブラリのアップデートや、PHPマイナーバージョンアップデートへの追随を考えると、自動化ツールを導入してない方が、そのプロジェクトの継続性に疑問が出てきます。
以下のような自動化ツールを導入されていれるのをおススメします。
- https://github.com/laminas/automatic-releases
- softprops/action-gh-release
依存パッケージの自動更新が行えている
renovateとかdependabotとか
レベル 9 - QAチェックがかなり出来ている。常時アップデートされている
秋には 次のPHPマイナーバージョンのテストが出来ている
2023年で言うと、11月には PHP 8.3 でのテストが行われている
静的解析最高レベルでのチェックがある程度出来ている
加えて、
Psalm の Type coverage だと 99%以上
Infectionでのミューテーションスコアだと90%ぐらいは…
BCチェックが自動化されている。BCについてドキュメントに明示されている
https://github.com/Roave/BackwardCompatibilityCheck でチェックされていたり、
Backward Compatibility Promise などで記載されていたり。
Discussion