モヒカンは正義

プログラマー風林火山で言う「風のエンジニア」になりたい(比較的)若者Webエンジニアの備忘録

PHPUnit 7系が2020年2月でサポート終了するぞ!バージョンアップを急げ!

PHPでデファクトスタンダードなテスティングツール PHPUnit の7系バージョンが2020年2月7日でサポートが終了します。

ざっくりまとめ

  • PHPUnit 7系(あるいはそれ以下)を使っているひとは、PHPUnit 8系へ乗り換えましょう
  • PHPUnit 8系はPHP7.2以上が必須。7.1以下の人は先にPHPのバージョンアップを計画しましょう

f:id:pinkumohikan:20191207174810p:plain
2020年2月でサポート終了

phpunit.de

github.com

PR

この記事は若手ものづくりコミュニティ Oysters のAdvent Calendar 2019にかこつけて書きました。

adventar.org

サポート終了するとどうなる?

PHPUnitはメジャーバージョンのリリースから2年がサポート期限で、既に4, 5, 6はサポート終了済み。現行は7系と8系で、7系はもうじきサポート終了です。

一般的にはサポートが切れるとそれ以降、改善がされなかったり、バグが修正されなかったり、ドキュメントが公式サイトから消去されて行ったり、脆弱性が見つかっても放置されたりします。

なので、サポート期限が来る前に新しいバージョンへ追従していくのが基本です。

え?そんな工数割けない?じゃあ最初からOSSなんて使わなければ良かったのに(真顔で火の玉ストレート攻撃ズドーン)

PHPUnit 7系から8系って何が変わる?

phpunit.de

大きなところでいうと

  • PHP 7.2が最低サポートバージョンになる
    • PHP 7.1以下の環境ではそもそもinstallできなくなる
  • ライフサイクル系メソッド (setUpとかtearDownとか) のreturn typeとして void が明示される
    • テストクラスでそれらを使っている場合、同じように void を明示しないとmethod signatureが合わないぞって怒られる
  • いくつかのアサーションメソッド、アノテーションがdeprecatedに
    • assertArraySubsetは個人的には好きだったのでちょっとショック

どんな流れでバージョンアップすれば良い?

だいたいいつもこんな感じで上げています。

  1. 手元でcomposer updateコマンドでPHPUnitをバージョンアップ
  2. 脳死でテストを走らせる
  3. 出てくるwarningやerrorをissueにまとめ、怒られのパターンを見る
  4. えいやで行けそうな数ならえいやで直す、そうでなければ怒られパターンごとに分割して直す
    • このとき現行バージョンでも動く変更を心がけ、バージョンアップのPRとは切り離して先行リリースしていくと変更の影響範囲を狭められてオススメです
  5. PHPUnitのバージョンアップをリリース (master等へmerge)

最後に

PHPUnitに限らず、OSSを使うならバージョンアップは割けて通れないと考えています。目先の工数削減のために脳死で使うんじゃなくて、OSS採用の際にはバージョンアップへの追従コストも考えましょう。また、バタバタしながらのビッグバン変更にならないよう、こまめに計画的にアップデートしていきましょう。

自分の前職では毎週、OSSのバージョンアップをやっていました。とても良い文化だなと思って自分の周りや今の職場でも普及活動中をしているところです。

techlog.voyagegroup.com