👮

composer-require-checkerでバグを防ぐ・利用ライブラリをひと目で分かるようにする

2021/12/16に公開

composer-require-checker

https://github.com/maglnet/ComposerRequireChecker

composer-require-checkerは、利用しているライブラリ・php拡張を
composer.json(require)で全て記載できているかのチェッカーです。(開発環境のみで利用するライブラリ除く)

メリット

  • 開発環境で利用している(require-dev)ライブラリを本番稼働するコードで利用しエラーになることを防ぐ
  • composer.jsonを見れば実コードで使っているライブラリ・フレームワークがひと目で分かる
    • 例えば、laravel/laravelをインストールするとilluminate/supportも芋づるでインストールされるがcomposer.jsonのrequireに記載されない。Illuminate\Support\Facades\DBを使った場合、composer.jsonに記載がない為このツールで検出されます。

補足

実行結果

# php composer-require-checker.phar check composer.json
ComposerRequireChecker 3.8.0@537138b833ab0f9ad72b667a72bece2a765e88ab
The following 10 unknown symbols were found:
+--------------------------------------+--------------------+
| Unknown Symbol                       | Guessed Dependency |
+--------------------------------------+--------------------+
| DB                                   |                    |
| GraphQL\Type\Definition\ResolveInfo  |                    |
| gzdecode                             | ext-zlib           |
| json_decode                          | ext-json           |
| json_encode                          | ext-json           |
| JSON_UNESCAPED_UNICODE               | ext-json           |
| mb_strlen                            | ext-mbstring       |
| mb_strpos                            | ext-mbstring       |
| simplexml_load_file                  | ext-SimpleXML      |
| Symfony\Component\DomCrawler\Crawler |                    |
+--------------------------------------+--------------------+

対応

  • 1.ext-xxx
  • 2.composer.jsonで記載されているライブラリ・フレームワークの依存パッケージを利用
    • 例)Symfony\Component\DomCrawler\Crawler
      • composer require symfony/dom-crawlerで更新
  • 3.Laravelの場合クラスエイリアスを利用すると、composer.jsonに記載されていてもエラーになる為クラスエイリアスを利用しない形に修正する

問題

クラスエイリアスのDB(Illuminate\Support\Facades\DB)を使っている影響なのか
「illuminate/support」をcomposer requireしても変わらなかった。

DBの部分を\Illuminate\Support\Facades\DBに書き換えることでエラーはでなくなる。

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires illuminate/database ^8.76, found illuminate/database[v8.76.0, v8.76.1, v8.76.2, 8.x-dev] but these were not loaded, likely because it conflicts with another require.

Installation failed, reverting ./composer.json and ./composer.lock to their original content.

修正

$sql = DB::table('books')

$sql = \Illuminate\Support\Facades\DB::table('books')

実行結果:(正常終了)

# php composer-require-checker.phar check composer.json
ComposerRequireChecker 3.8.0@537138b833ab0f9ad72b667a72bece2a765e88ab
There were no unknown symbols found.

Discussion