count関数にnullを与えてはいけません

本日ちょっとはまったことがあったので備忘録として残しておきます。

Laravelで作成されたWEBサービスを更新しようとしていて、とあるライブラリをアップデートしたところエラーが出て動かなくなってしまいました。
アップデートしたことに問題があったのは明確ですが、アップデートしないわけにはいきません。

出ていたエラーはこちら

Count(): Parameter must be an array or an object that implements Countable

私はどういうときにこのエラーが出るのか知ってました。

変更履歴 – count

PHP7.2以降ではcount関数の引数に配列Countableを継承したクラスのオブジェクト以外を渡すと警告が出るようになります。
この変更の厄介なところはnullを渡してもエラーになることです。
データがあるときは配列で返すのに、データがないときはnullで返すような実装の関数のときは注意が必要です。

おそらくライブラリのどこかで警告を例外として処理するような記述があるのでしょう。
エラーとなっている部分を特定して修正すればいいのですが、自分が作っていないライブラリはあまり変更したくありません。

しかし、ここであることに気が付きました。
実は同じライブラリを利用している別のサービスではエラーが起きていないのです。
何が違うのだろうと思って確認したところ、今回アップデートしたライブラリではないところで違いを見つけました。

    "require": {
        (省略)
        "guzzlehttp/guzzle" : "6.2.*",
        (省略)
    },
    "require": {
        (省略)
        "guzzlehttp/guzzle" : "6.3.*",
        (省略)
    },

つまり、Guzzle HTTPクライアントが6.3になった時にこの部分を修正したということですね。

リリースノート – guzzle/guzzle 6.3.0

きっと他にも最新バージョンなら不具合が訂正されているのにっていうライブラリはあるんじゃないでしょうか。
みなさんも注意してみてください。