🥇

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

2023/08/20に公開

レベル 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マイナーバージョンアップデートへの追随を考えると、自動化ツールを導入してない方が、そのプロジェクトの継続性に疑問が出てきます。
以下のような自動化ツールを導入されていれるのをおススメします。

依存パッケージの自動更新が行えている

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