[PHP]Composerのパッケージをコマンドラインから検索する(composer search)

カテゴリ: composer

PHPのパッケージ管理ツールであるcomposerでは、composer searchコマンドでmarkdownを名前に含むパッケージを検索できます。
今回は、composer searchコマンドの使い方について説明します。

composer searchによるパッケージの検索

以下は、markdownをキーワードに検索を行う場合の例です。検索結果は15件まで表示されます。
カレントディレクトリにあるcomposer.jsonの定義がデフォルト(packagist.orgだけから検索)の場合、この出力はpackagist.orgのWeb上で検索した結果と一致しているようです。

> composer search markdown

cebe/markdown A super fast, highly extensible markdown parser for PHP
graham-campbell/markdown Markdown Is A CommonMark Wrapper For Laravel 5
dflydev/markdown PHP Markdown & Extra - DEPRECATED
vtalbot/markdown Markdown compiler for Laravel 4
xp-forge/markdown Markdown
mage2pro/markdown The «Markdown» extension for Magento 2.
flarum/markdown Allow posts to be formatted with Markdown.
cohensive/markdown PHP Markdown variant for Laravel 4.
kartik-v/yii2-markdown Advanced Markdown editing and conversion utilities for Yii Framework 2.0
yii2mod/yii2-markdown Markdown Widget for Yii2
ivanamat/cakephp3-markdown CakePHP 3.x - Markdown
michelf/php-markdown PHP Markdown
wpreadme2markdown/wpreadme2markdown Convert WordPress Plugin readme.txt to Markdown
altiore/yii2-markdown Yii2 markdown parser and editor
knplabs/knp-markdown-bundle Knplabs markdown bundle transforms markdown into html

検索文字ですが、後ろに&page=2をつけると2ページ目が取得できるようです(理由は後で説明します)。

> composer search "markdown&page=2"

league/html-to-markdown An HTML-to-markdown conversion helper for PHP
aptoma/twig-markdown Twig extension to work with Markdown content
cebe/markdown-latex A super fast highly extensible markdown parser for PHP that converts markdown files into latex
andreasindal/laravel-markdown Simple Blade directive for markdown parsing.
nickcernis/html-to-markdown An HTML-to-markdown conversion helper for PHP
flarum/flarum-ext-markdown Allow posts to be formatted with Markdown.
maglnet/magl-markdown Provides a ZF2 View Helper to render markdown syntax. It uses third-party libraries for the rendering and you can switch between different renderers.
anomaly/markdown-field_type A markdown editor field type.
nadar/github-markdown-fixer github markdown fixer
haleks/laravel-markdown Laravel Markdown integrate markdown 'curly' braces inside the blade template engine, adding view extension and also giving the possibility of extending CommonMark.
phramework/object-to-markdown Covert PHP and JSON objects to markdown
davidbadura/markdown-builder Markdown Builder
friendsofvictoire/markdown-widget Victoire DCMS Markdown widget
davidbadura/faker-markdown-generator Faker Markdown Generator
tanuck/cakephp-markdown Cakephp Markdown plugin for CakePHP 3.

また、スペースで囲むと、or検索になります(...が、2回検索すればよいだけなので、実際のところ使う状況はなさそうです)

> composer search "markdown monolog"

パッケージ名だけを取得したい場合

説明文なしでパッケージ名だけを取得したい場合は、--only-nameオプションをつけます。
こちらは、https://packagist.org/search.jsonにアクセスせず、ローカルにキャッシュされたパッケージ名一覧から検索しているようで、15件だけでなくすべてのデータが返されるようです。

> composer search markdown --only-name

bfrohs/markdown
brainsware/php-markdown-extra-extended
bruensicke/li3_markdown
crit/markdown
dotink/markdown
dotink/markdown-extra
dotink/markdown-extra-extended
ellicom/markdown
geta6/twig-markdown
itafroma/drupal-markdown_image
kindari/laravel-markdown
maxtsepkov/markdown-oo-php
nativgames/pegase-external-michelf-markdown
neuralys/markdown
nicl/silex-markdown
odino/php-markdown-extra-extended
peehaa/markdown-rewritten
rah/rah_terminal_markdown
raymondidema/markdown
realestateconz/markdownify
ronanguilloux/silexmarkdown
ronanguilloux/silexmarkdownserviceprovider
rtablada/markdown
satooshi/tumblr2markdown
sija/markdown
silexmarkdown/silexmarkdown
whsuite/markdownify
addshore/wikitext-to-markdown
axxim/markdown-blade
chronon/markdown
cloak/markdown-reporter
cmskit/markdown-extra-editor
cmskit/wizard-markdown
dflydev/markdown
evandotpro/edp-markdown
geeks-dev/php-markdown-extra-extended-stylish
h4cc/stack-markdown
hashnz/twig-markdown-bundle
heybigname/html-to-markdown
hiro/laravel-markdown
kalmanolah/markdownbundle
kangqf/yii2-markdown
krisanalfa/bono-markdown
kwattro/markdown-bundle
kzykhys/markdown-testsuite
libra/libra-markdown
mapseven/markdown
markdownable/markdownable
maxxscho/laravel-markdown-plus
miny/markdown
nazar-pc/php-markdown-next
phile/markdown-extra-extended
purekid/laravel-markdown-extra
rbnvrw/markdown-forms
rbnvrw/pico-markdown-forms
reach/markdown
scribe/markdown-bundle
skepticalhippo/php-markdown-lib
skepticalhippo/php-markdown-parser
skilla/twigmarkdownbundle
smith981/knp-markdown-bundle
thispagecannotbefound/silex-markdown-parser
toiee/haik-markdown
umbrella-web/markdown-bundle
anomaly/markdown-field-type
atk4/markdown
cdaguerre/markdown-bundle
chadyred/markdown-symfony2
cohensive/markdown
concerto-cms/markdown-bundle
corneltek/twig-markdown
davidbadura/markdown-builder
enkodr/markdown
flarum/markdown
hoter/yii2-lepture-markdown
ijackua/yii2-lepture-markdown-editor-widget
jhancock/yii2-markdown-docs
johnny13/li3_markdown
johntaa/markdown
joseym/li3_markdown
kennedytedesco/laravel-markdown
lablog/markdown
larry666/laravel-5-markdown-editor
mademedia/silverstripe-markdown
markdown-extended/mde-editor
markdown-extended/mde-service
matt-bartlett/markdown
maurymmarques/markdown-plugin
mongular/mongular_markdown_loader
montyxrizzo/yii2-markdown
nachonerd/markdownblog
nachonerd/silex-markdown-provider
nickcernis/html-to-markdown
ntentan/markdown-extension
ntzwbr/markdown
oa/markdown-transformer
pk/markdownify-bundle
plumphp/plum-markdown
queirozfcom/php-markdown-with-syntax-highlight
romeoz/rock-markdown
siezi/phile-admin-markdown-editor
siezi/phile-markdown-editor
silverslice/markdown-api
silverstripers/silverstripe-markdown
skeeks/yii2-kartik-markdown
tanuck/cakephp-markdown
there4/markdown-resume
traq/markdown-plugin
uran1980/yii2-bootstrap-markdown-editor
vtalbot/markdown
xes/metamarkdown
altiore/yii2-markdown
asm/markdown-content-bundle
axhello/laravel-markdown-editor
axllent/silverstripe-simplemde-markdown
ccoley/laravel-markdown
cvuorinen/phpdoc-markdown-public
cwbit/cakephp-markdown
davidbadura/faker-markdown-generator
diversen/php-markdown-docs
efureev/yii2-bootstrap-markdown-editor
etdsolutions/simplemde-markdown-editor
gitaminhq/markdown
goblindegook/wp-markdown-g
hector68/yii2-grafikart-markdown-editor
hongxu/laravel-5-amazeui-markdown-editor
jerry/laravel-5-markdown-editor
kartik-v/krajee-markdown-editor
kisphp/markdown-parser
knplabs/knp-markdown-bundle
ornj/markdown-bundle
outshine/laravel-imarkdowneditor
pachico/markdownwriter
photon/template-markdown
phramework/object-to-markdown
roots/markdown-on-save
tomzx/gdocs-to-markdown
vi-kon/laravel-parser-markdown
vudaltsov/markdowncache
willvincent/laravel-markdown
yuanchao/laravel-5-markdown-editor
yujiandong/simplemarkdown
appertly/axe-markdown
caffeina-core/markdown
cebe/markdown-latex
czukowski/markdown-toc
diversen/markdown-split-by-header
drips/markdown
ivanamat/cakephp3-markdown
maglnet/magl-markdown
matheusvcorrea/sample-cms-markdown
panwenbin/yii2-simplemde-markdown-editor
patrickrose/markdown-extender
pixel418/markdownify
priithansen/silverstripe-markdowntextareafield
raphy/markdown-bundle
rayrutjes/arya-markdown
robbieaverill/silverstripe-markdowntextareafield
synapticism/ubik-markdown
wpreadme2markdown/wpreadme2markdown
czukowski/markdown-tables
davidepastore/slim-markdown-view
echotrue/yii2-markdown
hyn/eloquent-markdown
kartik-v/yii2-markdown
level-2/xmarkdown
mheap/silex-markdown
petrleocompel/yii2-markdown-docs
phwoolcon/phpdoc-markdown-public
ride/app-markdown
xengine/flarum-ext-markdown-editor
yidashi/yii2-bootstrap-markdown
aidantwoods/markdownphpdocs
andreasindal/laravel-markdown
anomaly/markdown-field_type
aptoma/twig-markdown
arcanedev/laravel-markdown
atelierspierrot/extended-markdown
atelierspierrot/markdown-extended
axllent/silverstripe-gfmarkdown
axovis/flow-markdown
bretrzaun/silex-markdown
christianblos/markdown2html
curder/yii2-bootstrap-markdown
denshoch/dendenmarkdown
dvdglth/cakephp-markdown
flarum/flarum-ext-markdown
gaara/phpdoc-markdown
haleks/laravel-markdown
icanboogie/render-engine-markdown
jdmaymeow/cake-markdown
kaoken/markdown-it-php
kylekatarnls/jade-filter-markdown
landf/epubmarkdown
league/html-to-markdown
matks/markdown-blog-bundle
opdavies/sculpin-twig-markdown-bundle
picas/markdown-extended
piwi/markdown-extended
pstaender/silverstripe-markdown-parser
pug-php/pug-filter-markdown
solleer/transphporm-xmarkdown-module
thefox/html2markdown
undefinedoffset/silverstripe-markdown
xp-forge/markdown
cebe/markdown
cm/flow-markdown
friendsofvictoire/markdown-widget
graham-campbell/markdown
iisns/yii2-simplemde-markdown
inc2734/markdown-importer
jolicht/markdown-cms
jralph/twig-markdown
michelf/php-markdown
natedrake/markdown
ogioncz/flarum-ext-markdown-editor
sculpin/markdown-bundle
sculpin/markdown-twig-compat-bundle
snje1987/markdown
victorjonsson/markdowndocs
websharks/php-markdown
xutl/yii2-bootstrap-markdown-widget
yii2mod/yii2-markdown
alphalemon/app-markdown-geshi-bundle
bt51/markdown-serviceprovider
fwahlqvist/wdev-markdown
misd/twig-markdowner
simonjodet/markdown
atk14/drink-markdown
corycollier/markdown-blogger
mage2pro/markdown
markdown-blogger/iterator
poldixd/markdown-helper
rodes/markdown-bundle

composer searchコマンドを使わずにパッケージ検索する

packagist.orgからパッケージを検索したい場合は、検索用のWebAPIが提供されています。例えば,markdownで検索した結果がほしい場合は、下記のURLにアクセスことで検索結果が取得できます。

https://packagist.org/search.json?q=markdown

結果は以下のようにjson形式で返されます(読みやすくするため、途中で改行しています。)

{
    "results": [{
        "name": "cebe\/markdown",
        "description": "A super fast, highly extensible markdown parser for PHP",
        "url": "https:\/\/packagist.org\/packages\/cebe\/markdown",
        "repository": "https:\/\/github.com\/cebe\/markdown",
        "downloads": 2681862,
        "favers": 633
    }, {
        "name": "graham-campbell\/markdown",
        "description": "Markdown Is A CommonMark Wrapper For Laravel 5",
        "url": "https:\/\/packagist.org\/packages\/graham-campbell\/markdown",
        "repository": "https:\/\/github.com\/GrahamCampbell\/Laravel-Markdown",
        "downloads": 257597,
        "favers": 524
    }, {
        "name": "dflydev\/markdown",
        "description": "PHP Markdown \u0026 Extra - DEPRECATED",
        "url": "https:\/\/packagist.org\/packages\/dflydev\/markdown",
        "repository": "https:\/\/github.com\/dflydev\/dflydev-markdown",
        "downloads": 1671195,
        "favers": 15
    }, {
        (以下、15件分繰り返し)
    }],
    "total": 570,
    "next": "https:\/\/packagist.org\/search.json?q=markdown\u0026page=2"
}

こちらも、最初の1ページ目に相当する15レコード分だけ取得できます。総結果件数と次ページを取得するためのリクエストURLは、それぞれ返ってきたJSONデータのtotal,nextノードを見るとわかります。

上記の例では総件数が570件であることが分かります。また、2ページがほしい場合は、下記のURLで取得できます。

https://packagist.org/search.json?q=markdown&page=2

WebAPIをから直接検索するとパッケージ名と説明だけでなくダウンロード数やStarされた数も入っているので、ダウンロード数を参考にしたい場合はこちらのほうが便利かもしれません。

packagistからの検索プログラムを自作する

前述の通りhttps://packagist.org/search.jsonに対するWeb APIの実行結果はjsonで返されるためcomposer searchに相当するコマンドは簡単に自作できます。以下のコードは、ダウンロード数とStar数などの付加情報も表示しつつ、全ページの結果を出力するためのサンプルプログラムです。

<?php
declare(strict_types=1);

/**
 * メイン処理
 */
function main()
{
    // packagistでパッケージを検索
    $itr = searchPackage("monolog");

    // 検索結果を表示
    foreach ($itr as $data) {
        displayPackage($data);
    }
}

/**
 * packagistでパッケージを検索
 */
function searchPackage(string $unescapeSearchKey, int $page = 1): Generator
{
    $searchKey = htmlspecialchars($unescapeSearchKey, ENT_QUOTES, 'UTF-8');
    $searchUrl = "https://packagist.org/search.json?q={$searchKey}&page={$page}";

    $num = 1;
    while(true) {
        $jsonStr = file_get_contents($searchUrl);
        $json = json_decode($jsonStr, true);

        foreach ($json['results'] as $result) {
            $result['total'] = $json['total'];
            $result['num'] = $num++;
            yield $result;
        }

        if (!isset($json['next'])) {
            // 次ページがなければ終了
            break;
        }

        $searchUrl = $json['next'] ?? "";
    }
}

/**
 * 検索したパッケージを表示
 */
function displayPackage(array $result)
{
    printf("--------------------------------------------------------------\n");
    printf("%d/%d\n", $result['num'], $result['total']);
    printf("[%-40s] DL:%9d, Faver:%6d\n", $result['name'], $result['downloads'], $result['favers']);
    printf("desc: %s\n", $result['description']);
    printf("url : %s\n", $result['url']);
    printf("repo: %s\n", $result['repository']);
}

main();

このプログラムの出力は、以下のようになります

> php search.php

--------------------------------------------------------------
1/369
[monolog/monolog                         ] DL: 55041388, Faver:  6312
desc: Sends your logs to files, sockets, inboxes, databases and various web services
url : https://packagist.org/packages/monolog/monolog
repo: https://github.com/Seldaek/monolog
--------------------------------------------------------------
2/369
[kdyby/monolog                           ] DL:   136376, Faver:    27
desc: Integration of Monolog into Nette Framework
url : https://packagist.org/packages/kdyby/monolog
repo: https://github.com/Kdyby/Monolog
--------------------------------------------------------------
3/369
[adeira/monolog                          ] DL:     3362, Faver:     8
desc:
url : https://packagist.org/packages/adeira/monolog
repo: https://github.com/adeira/monolog
--------------------------------------------------------------
4/369
[stackify/monolog                        ] DL:     5943, Faver:     2
desc: Stackify logs and errors for Monolog
url : https://packagist.org/packages/stackify/monolog
repo: https://github.com/stackify/stackify-log-monolog
--------------------------------------------------------------
5/369
[thinframe/monolog                       ] DL:     5615, Faver:     0
desc: Monolog Application
url : https://packagist.org/packages/thinframe/monolog
repo: https://github.com/thinframe/monolog
--------------------------------------------------------------

...(中略)

367/369
[patforg/monolog-extras                  ] DL:        1, Faver:     0
desc: Extra classes and addons for Monolog - the PHP logger system
url : https://packagist.org/packages/patforg/monolog-extras
repo: https://github.com/patforg/MonologExtras
--------------------------------------------------------------
368/369
[triadev/laravel-logger-provider         ] DL:        0, Faver:     0
desc: A laravel service provider for logging.
url : https://packagist.org/packages/triadev/laravel-logger-provider
repo: https://github.com/triadev/LaravelLoggerProvider
--------------------------------------------------------------
369/369
[mschop/monolog-jtl                      ] DL:       79, Faver:     0
desc: Monolog processing handler for JTL-Log
url : https://packagist.org/packages/mschop/monolog-jtl
repo: https://github.com/mschop/monolog-jtl

Amazonでおトクに買い物する方法
AmazonチャージでポイントGET


Amazonは買いもの前にAmazonギフト券をチャージしてポイントをゲットしないと損!

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。