Обзор экосистемы пакетов Laravel

от автора

Специально для студентов курсов «Backend-разработчик на PHP» и «Framework Laravel» подготовили еще один полезный перевод.


В мире Laravel пакеты играют важную роль. Насколько важна эта роль и какие пакеты существуют? Чтобы это узнать, мы взяли данные из API Packagist.org и отфильтровали пакеты Laravel.

Как мы определяли пакеты Laravel? С помощью файла composer.json. Мы относили пакет к экосистеме Laravel, если поля name, description, keywords или type содержали строку laravel. Также пакет определялся как пакет Laravel, если он содержал laravel/framework или любой компонент поддерева  illuminate/* в качестве зависимости. И наконец, ключ laravel в поле extra также являлся указателем на принадлежность пакета к экосистеме фреймворка Laravel.

Хотя эти критерии не гарантируют, что пакет относится исключительно к Laravel, они показывают, что пакет был создан с расчетом на использование с Laravel.

Наиболее популярные пакеты

Если бесхитростно взглянуть на список самых загружаемых пакетов, результаты не порадуют: это базовые пакеты и пакеты с большим числом использований вне проектов Laravel.

| Package | Monthly downloads | |-------------------------|-------------------| | nesbot/carbon | 4084214 | | laravel/framework | 2987907 | | laravel/tinker | 2455355 | | fideloper/proxy | 2376631 | | nunomaduro/collision | 1510258 | | intervention/image | 1099989 | | facade/ignition | 966800 | | facade/flare-client-php | 934651 | | composer/installers | 803222 | | illuminate/support | 756189 |

Возможно, более интересный рейтинг можно получить, исключив эти «ложноположительные» результаты. Мы вручную отфильтровали 30 наиболее популярных пакетов, которые были созданы для проектов Laravel и целенаправленно устанавливаются. Также мы в общих чертах систематизировали области назначения этих пакетов.

| | Package | Monthly | Total | Purpose | |----|------------------------------------|---------|----------|---------| | 1 | maatwebsite/excel | 680466 | 17769696 | port | | 2 | laravelcollective/html | 678048 | 21785383 | helper | | 3 | barryvdh/laravel-ide-helper | 644297 | 18918427 | dev | | 4 | barryvdh/laravel-debugbar | 625080 | 19404288 | dev | | 5 | laravel/passport | 552633 | 10099903 | auth | | 6 | beyondcode/laravel-dump-server | 530901 | 11035024 | dev | | 7 | sentry/sentry-laravel | 455879 | 8440070 | integ | | 8 | laravel/ui | 433850 | 1599042 | auth | | 9 | barryvdh/laravel-cors | 400920 | 10823255 | helper | | 10 | laravel/socialite | 394471 | 10166784 | auth | | 11 | laravel/slack-notification-channel | 385921 | 7172937 | integ | | 12 | tymon/jwt-auth | 359693 | 9107092 | auth | | 13 | barryvdh/laravel-dompdf | 349572 | 8006731 | port | | 14 | laravel/helpers | 337956 | 1692185 | helper | | 15 | spatie/laravel-permission | 308453 | 5224001 | auth | | 16 | laravel/horizon | 304864 | 4599598 | integ | | 17 | laravel/dusk | 256261 | 4542482 | dev | | 18 | laravel/nexmo-notification-channel | 238192 | 6080124 | integ | | 19 | laravel/telescope | 227966 | 2289576 | dev | | 20 | bugsnag/bugsnag-laravel | 223167 | 6544766 | dev | | 21 | yajra/laravel-datatables-oracle | 212985 | 5644721 | integ | | 22 | aws/aws-sdk-php-laravel | 212260 | 7070121 | integ | | 23 | orchestra/testbench-core | 199780 | 1864659 | dev | | 24 | orchestra/testbench | 195269 | 2279889 | dev | | 25 | symplify/package-builder | 193661 | 1484783 | dev | | 26 | laravel/scout | 177270 | 3391042 | integ | | 27 | barryvdh/laravel-snappy | 156741 | 3651684 | port | | 28 | webpatser/laravel-uuid | 153883 | 4774711 | helper | | 29 | spatie/laravel-medialibrary | 149290 | 2293823 | helper | | 30 | spatie/laravel-activitylog | 148932 | 2387978 | dev |

Пояснение областей назначения:

  • auth — аутентификация и авторизация
  • dev — инструменты для разработки и отладки
  • helper — поддержка и упрощение работы
  • integ — интеграция с другими сервисами
  • port — импорт и/или экспорт в различных форматах

Первое место в этом списке занимают инструменты для разработки, затем идет интеграция.

Мы ожидали увидеть на самом верху больше пакетов Spatie, но выяснилось, что maatwebsite/excel и инструменты от Barry vd. Heuvel используются более часто.

Обзор поставщиков

Всего мы выявили 47 337 пакетов Laravel от 23 167 различных разработчиков. Получилось достаточно равномерное распределение со множеством небольших участников.

Половина пакетов (23 668) были созданы основными 3927 разработчиками. Это значительно больше, чем в том случае, если бы здесь действовал закон Прайса. 15 042 разработчика опубликовали всего по одному пакету.

Если отсортировать разработчиков по числу пакетов, можно увидеть почти неизвестные имена. Вот наиболее продуктивные разработчики пакетов с суммарным количеством загрузок соответствующих пакетов.

| | Developer | Count | Daily | Monthly | Total | |----|-------------------------------|-------|-------|---------|----------| | 1 | socialiteproviders | 159 | 10645 | 256409 | 5826725 | | 2 | bantenprov | 132 | 0 | 5 | 3160 | | 3 | spatie | 124 | 89124 | 2746665 | 43095685 | | 4 | railken | 119 | 0 | 11082 | 313129 | | 5 | laravel-enso | 95 | 1519 | 29456 | 879635 | | 6 | amethyst | 92 | 1232 | 8118 | 100819 | | 7 | faustbrian | 85 | 152 | 2639 | 52698 | | 8 | artisanry | 78 | 129 | 1190 | 11938 | | 9 | sukohi | 75 | 58 | 1773 | 53805 | | 10 | anomaly | 59 | 198 | 6095 | 974489 | | 11 | sanatorium | 59 | 0 | 0 | 20 | | 12 | laravel-notification-channels | 54 | 3107 | 99536 | 1621420 | | 13 | hnhdigital-os | 54 | 38 | 1571 | 20304 | | 14 | arcanedev | 53 | 3875 | 127702 | 3293360 | | 15 | inetstudio | 53 | 241 | 3870 | 77009 | | 16 | larakit | 49 | 1 | 410 | 18540 | | 17 | orchestra | 48 | 21569 | 544696 | 7606461 | | 18 | abuseio | 45 | 1 | 951 | 78289 | | 19 | genealabs | 43 | 3219 | 87234 | 1215349 | | 20 | smorken | 41 | 36 | 985 | 14277 |

Оказывается, есть немало разработчиков, которые создают большое количество компонентов и размещают их без особой рекламы. Чтобы увидеть больше известных имен и сравнить цифры для них, отсортируем список по общему числу загрузок.

| | Developer | Count | Daily | Monthly | Total | |----|-------------------|-------|--------|---------|-----------| | 1 | laravel | 39 | 364375 | 9832728 | 225867755 | | 2 | illuminate | 33 | 244509 | 7210832 | 197044965 | | 3 | nesbot | 1 | 179106 | 4084214 | 112631927 | | 4 | barryvdh | 19 | 82289 | 2246578 | 63115434 | | 5 | spatie | 124 | 89124 | 2746665 | 43095685 | | 6 | fideloper | 3 | 100748 | 2376631 | 41313378 | | 7 | intervention | 7 | 46259 | 1260102 | 33891504 | | 8 | composer | 1 | 10603 | 803222 | 26065561 | | 9 | league | 7 | 18996 | 731742 | 24433630 | | 10 | nunomaduro | 19 | 68333 | 1734552 | 23394056 | | 11 | laravelcollective | 6 | 32460 | 710099 | 23285426 | | 12 | maatwebsite | 6 | 27955 | 717140 | 18258360 | | 13 | cocur | 1 | 19246 | 491761 | 16609476 | | 14 | jenssegers | 15 | 24263 | 544700 | 16468485 | | 15 | beyondcode | 29 | 14221 | 677724 | 12648233 | | 16 | laracasts | 11 | 10352 | 317232 | 12119703 | | 17 | graham-campbell | 36 | 11092 | 291114 | 10184667 | | 18 | facade | 5 | 67794 | 1915933 | 9860242 | | 19 | yajra | 19 | 17794 | 446360 | 9792222 | | 20 | tymon | 2 | 11437 | 359693 | 9107116 |

Если вместо этого отсортировать список по числу загрузок в месяц, результат будет слегка отличаться.

| | Developer | Count | Daily | Monthly | Total | |----|-------------------|-------|--------|---------|-----------| | 1 | laravel | 39 | 364375 | 9832728 | 225867755 | | 2 | illuminate | 33 | 244509 | 7210832 | 197044965 | | 3 | nesbot | 1 | 179106 | 4084214 | 112631927 | | 4 | spatie | 124 | 89124 | 2746665 | 43095685 | | 5 | fideloper | 3 | 100748 | 2376631 | 41313378 | | 6 | barryvdh | 19 | 82289 | 2246578 | 63115434 | | 7 | facade | 5 | 67794 | 1915933 | 9860242 | | 8 | nunomaduro | 19 | 68333 | 1734552 | 23394056 | | 9 | intervention | 7 | 46259 | 1260102 | 33891504 | | 10 | composer | 1 | 10603 | 803222 | 26065561 |

Эти распределения явно перевешивают в верхней части. Независимо от того, рассматриваем ли мы число загрузок в день, в месяц или общее количество, более половины всех загрузок приходится на 6 основных разработчиков пакетов. Например, 2,85 млн из 5,65 млн загрузок в день делят между собой laravelilluminatenesbotspatiefideloper и barryvdh.

Можно использовать что-то вроде индекса Хирша для оценки популярности разработчиков. Существует всего 317 разработчиков, на каждого из которых приходится не менее 317 загрузок в день. 1118 поставщиков имеют по 1118 или более загрузок в месяц, а в случае общего количества загрузок это число равно 3003.

Варианты лицензирования

Наш обзор лицензирования не особо точен, так как для обозначения одной и той же лицензии используются различные строки. Например, gpl-3.0gpl 3.0gpl3, gplv3, даже gnu general public license version 3 и множество других вариантов указывают на одну и ту же лицензию.

К счастью, основные выводы являются четкими, так как строка mit обозначает соответствующую лицензию для 37 502 пакетов Laravel. 6304 пакета не лицензированы, более 500 пакетов распространяются по лицензиям Apache 2.0 и GPL 3.0. Также есть несколько сотен пакетов с лицензиями BSD 2, BSD 3 и GPL 2.0.

79 % пакетов Laravel имеют лицензию MIT, 14 % не лицензированы, а каждая из остальных лицензий используется в 2 % или менее пакетов. Возможно, отчасти это влияние самого фреймворка Laravel, который распространяется по лицензии MIT. Если посмотреть на все пакеты, то популярность лицензии MIT существенно ниже — 60 %.

За рамками Laravel

Количество пакетов для различных фреймворков демонстрирует вовлеченность сообщества в разработку инструментальных средств фреймворка и степень его готовности делиться своим кодом с другими участниками. Мы также подсчитали число заброшенных пакетов и их процент, чтобы увидеть, какие сообщества процветают, а какие отстают.

| | Framework | Packages | Abandoned | Aband. % | |----|---------------|----------|-----------|----------| | 1 | Laravel | 47337 | 2618 | 5,5% | | 2 | Symfony | 39428 | 3362 | 8,5% | | 3 | Yii | 15354 | 552 | 3,6% | | 4 | ZendFramework | 7459 | 790 | 10,6% | | 5 | WordPress | 6446 | 480 | 7,4% | | 6 | Nette | 3460 | 342 | 9,9% | | 7 | CakePHP | 2607 | 173 | 6,6% | | 8 | Slim | 1411 | 64 | 4,5% | | 9 | Laminas | 811 | 17 | 2,0% | | 10 | Phalcon | 726 | 40 | 5,5% | | 11 | Codeigniter | 663 | 91 | 13,7% | | 12 | Aura | 450 | 32 | 7,1% | | 13 | Kohana | 341 | 43 | 12,6% | | 14 | FuelPHP | 148 | 12 | 8,1% | | 15 | PHPixie | 73 | 1 | 1,4% |

С другой стороны, общее количество загрузок отражает важность пакетов для разработки стандартных проектов.

Обратите внимание, что при подсчете этого количества загрузок учтены все пакеты, связанные с фреймворком, а не только базовые (как и при подсчете количества пакетов выше). Критерии классификации пакета как принадлежащего определенному фреймворку см. здесь. Один пакет может принадлежать экосистемам нескольких фреймворков.

| | Framework | Monthly | Total | |----|---------------|-----------|------------| | 1 | Symfony | 366029776 | 8945189030 | | 2 | Laravel | 56523199 | 1315681505 | | 3 | ZendFramework | 50789083 | 1460984224 | | 4 | Nette | 14137793 | 295710951 | | 5 | Laminas | 9540512 | 134960483 | | 6 | Yii | 5662063 | 200378585 | | 7 | CakePHP | 4067892 | 112091915 | | 8 | WordPress | 3871828 | 96962490 | | 9 | Slim | 2123558 | 46196613 | | 10 | FuelPHP | 930846 | 32043126 | | 11 | Codeigniter | 919926 | 30474042 | | 12 | Kohana | 912106 | 31918403 | | 13 | Aura | 467771 | 18063339 | | 14 | Phalcon | 137762 | 4322810 | | 15 | PHPixie | 5353 | 572100 | 

Следует отметить, что лидирующее положение Symfony не означает, что большинство пакетов загружаются для использования в проектах на основе этого фреймворка. Некоторые базовые пакеты Symfony используются Laravel, и множество других пакетов Symfony также могут использоваться в проектах Laravel.

Кроме того, примечательно то, что пакеты Zend имеют почти столько же загрузок в месяц, как Laravel, хотя этот проект больше не поддерживается.

И напоследок взгляните на общий список самых загружаемых пакетов PHP.

| | Package | Monthly | Total | |----|-----------------------------------|---------|-----------| | 1 | symfony/polyfill-mbstring | 7943600 | 210645235 | | 2 | psr/log | 7768451 | 238663129 | | 3 | symfony/polyfill-ctype | 7284741 | 110601284 | | 4 | psr/container | 6847606 | 119345271 | | 5 | symfony/console | 6713344 | 199367074 | | 6 | guzzlehttp/guzzle | 6607580 | 168514253 | | 7 | symfony/finder | 6486878 | 176261290 | | 8 | psr/http-message | 6384401 | 164860087 | | 9 | guzzlehttp/promises | 6372505 | 149984782 | | 10 | guzzlehttp/psr7 | 6350221 | 161806561 | | 11 | doctrine/instantiator | 6199120 | 180684872 | | 12 | symfony/process | 6167368 | 169254030 | | 13 | phpdocumentor/reflection-docblock | 6140913 | 165150240 | | 14 | monolog/monolog | 6109702 | 196673732 | | 15 | symfony/event-dispatcher | 6098870 | 190433052 | | 16 | webmozart/assert | 5905460 | 144395517 | | 17 | doctrine/lexer | 5895066 | 157678399 | | 18 | ralouphie/getallheaders | 5861396 | 66293788 | | 19 | doctrine/inflector | 5743593 | 171588858 | | 20 | phpdocumentor/type-resolver | 5706391 | 136101740 |

Данные, представленные в этой статье, в основном были собраны Гатисом Шупулниексом (Gatis Šūpulnieks) в апреле и мае 2020 г. в рамках исследования «Разработка и использование пакетов Laravel».

Соответствующие источники:

Ранее опубликовано тут

Узнать о курсах подробнее:

ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/525802/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *