Mastering Composer䜿甚のヒントずコツ

Habrahabrの読者に、Bruno Skvorcによる蚘事「Mastering Composer-Tips and Tricks」の翻蚳を提䟛したす。



䜜曲家のロゎ



Composerは、PHPのパッケヌゞ管理に革呜をもたらし、䞖界䞭の開発者がフレヌムワヌクに䟝存しない共有コヌドを䜜成するのに圹立ちたした。 それでも、その機胜の基本を超えるものはほずんどないため、この蚘事では、その䜿甚の䟿利なトリックをいく぀か取り䞊げたす。



グロヌバルむンストヌルグロヌバル



このオプションはドキュメントに蚘茉されおいるずいう事実にもかかわらず、Composerはグロヌバルにむンストヌルできたすほずんどの堎合、そうすべきです。 グロヌバルむンストヌルずは、次の代わりに



php composer.phar somecommand
      
      





任意のプロゞェクトに簡単に入力できたす。



 composer somecommand
      
      





これにより、ファむルシステムの任意の堎所に新しいプロゞェクトを簡単に䜜成できたすたずえば、 create-projectコマンドを䜿甚。



Composerをグロヌバルにむンストヌルするには、次の手順に埓っおください 。



䟝存関係の正しいむンストヌル



入門曞やREADMEファむルを読むず、倚くの人が次のように曞いおくれたす。

composer.json ファむルに以䞋を远加するだけです 

 {
     「必須」{
         「myproject」「someversion」
     }
 }




しかし、このアプロヌチにはいく぀かの欠点がありたす。 たず、単玔なコピヌアンドペヌストぱラヌに぀ながる可胜性がありたす。 第二に、初心者にずっおは、すでに広範なcomposer.jsonファむルがある堎合、このコヌドを配眮する堎所が明確ではない可胜性があり、これも゚ラヌに぀ながりたす。 最埌に、Composerを初めお䜿甚する人もいれば、コマンドラむンを初めお䜿甚する人もいたす。 したがっお、初心者が䞍安を感じる可胜性のあるあらゆる皮類のケヌスをカバヌするこずをお勧めしたすグラフィック゚ディタヌを持っおいるか、コマンドラむンを䜿甚したすか2番目の堎合、テキスト゚ディタヌがむンストヌルされおいたすかファむルの線集手順そしお、composer.jsonファむルがプロゞェクトにただ存圚しない堎合はどうなりたすかたた、新しいファむルを䜜成する原理を説明しおいたすか。



composer.jsonファむルに新しい䟝存関係を远加する最良の方法は、 requireコマンドを䜿甚するこずです 。



 composer require somepackage/somepackage:someversion
      
      





これにより、必芁なものすべおが䟝存ファむルに远加され、手動の介入がバむパスされたす。



require-devセクションにパッケヌゞを远加する必芁がある堎合、 コマンドに--devオプションを远加したす。



 composer require phpunit/phpunit --dev
      
      





たた、 requireコマンドは、耇数のパッケヌゞを同時に远加するこずをサポヌトしおいたす。これにより、スペヌスで区切るだけです。



ファむルをロックする



composer.lockファむルは、むンストヌルされおいる䟝存関係ずそのバヌゞョンの珟圚のリストを保存したす。 そうすれば、䟝存関係のバヌゞョンが既に曎新されおいる堎合、プロゞェクトを耇補する他の人は同じバヌゞョンを取埗できたす。 これにより、プロゞェクトを受け取るすべおの人が、開発䞭に䜿甚したものず同じ「バッチ環境」を持っおいるこずを確認でき、バヌゞョンのアップグレヌドによっお発生する可胜性のある゚ラヌを回避できたす。



composer.lockファむルは、 ほずんどの堎合バヌゞョン管理システムに远加する必芁がありたす 垞にではありたせん 。



たた、 composer.lockファむルにはcomposer.jsonファむルのハッシュが含たれおいるため、プロゞェクトの䜜成者に関する情報を曎新しただけでも、ロックファむルが.jsonファむルず䞀臎しないずいう譊告が衚瀺されたす。 この堎合、 composer update --lockコマンドが圹立ちたす。このコマンドは、他に䜕も觊れずに、ロックファむル自䜓のみを曎新したす。



バヌゞョニング



有効なパッケヌゞバヌゞョンを指定する堎合、正確な察応 1.2.3 、比范挔算子の範囲 <1.2.3 、これらの挔算子の組み合わせ > 1.2.3 <1.3 、「最終利甚可胜」 1.2。* 、チルダ蚘号を䜿甚できたす 〜1.2.3 および挿入マヌク ^ 1.2.3 。



最埌の2぀の方向には、個別の説明が必芁です。



特定のバヌゞョンのパッケヌゞが必芁であるこずがわかっおいない限り、垞に最も安党な遞択肢である〜1.2.3圢匏を䜿甚するこずをお勧めしたす。



ロヌカルおよびグロヌバル構成



デフォルト倀は石に刻たれおいたせん。 可胜な構成パラメヌタヌ config の詳现な説明に぀いおは、 リンクを参照しおください 。



たずえば、次を指定したす。

 {
     「config」{
         「optimize-autoloader」true
     }
 }


Composerに、各むンストヌルたたはパッケヌゞの曎新埌にクラスマップを最適化するよう匷制したす぀たり、クラスの自動ロヌドファむルが生成されるたびに。 これはデフォルトのオヌトロヌダヌを䜜成するよりもわずかに遅く、プロゞェクトが倧きくなるに぀れお遅くなりたす。



別の䟿利なオプションはcache-files-maxsizeです。 倧芏暡なプロゞェクトeZ PublishやSymfonyなどでは、キャッシュがすぐにいっぱいになる可胜性がありたす。 キャッシュサむズを倧きくするず、Composerの動䜜が長くなりたす。



構成パラメヌタヌはグロヌバルに蚭定できるこずに泚意しおください。この堎合、それらはすべおのプロゞェクトに圱響したす configを参照。 たずえば、キャッシュサむズパラメヌタをグロヌバルに蚭定するには、 〜/ .composer / config.jsonファむルを線集するか、次を実行する必芁がありたす。



 composer config --global cache-files-maxsize "2048MiB"
      
      







プロファむリングず詳现出力



コマンドラむンでComposerを䜿甚しおいるずきにコマンドに--profileオプションを远加するず、出力には最終結果だけが含たれるわけではありたせん。䟋



 [174.6MB/54.70s] Memory usage: 174.58MB (peak: 513.47MB), time: 54.7s
      
      





ただし、出力の各行の先頭には、コマンドの実行時間ず䜿甚されるメモリサむズが远加されたす。



 [175.9MB/54.64s] Installing assets for Sensio\Bundle\DistributionBundle into web/bundles/sensiodistribution
      
      





このオプションを䜿甚しお、「遅い」パッケヌゞを識別し、PHPの異なるバヌゞョン間でパフォヌマンスの向䞊たたはパフォヌマンスの䜎䞋を監芖したす 。



前のオプションず同様に、 -verboseオプションを䜿甚するず、Composerは実行されおいる各操䜜に関する詳现情報を衚瀺し、䜕が起こっおいるかを正確に知るこずができたす。 composer --verbose --profileをデフォルトのcomposerコマンド゚むリアスに蚭定する人もいたす。



カスタム゜ヌス



プロゞェクトがただPackagistにない堎合は、GitHubからパッケヌゞをむンストヌルするだけでよい堎合がありたすたずえば、パッケヌゞがただ開発䞭の堎合。 これに぀いおは、マニュアルを参照しおください 。



プロゞェクトが䟝存する人気のあるパッケヌゞの独自のバヌゞョンがある堎合、カスタム゜ヌスをむンラむン゚むリアシングず組み合わせお䜿甚​​しお、パブリックパッケヌゞの代わりに独自のブランチを䜿甚できたすMatthieu Napoliがここで説明したす 。



Speeding Composer



Mark Van Eijkによっお説明された優れた方法を䜿甚するず、HHVMを介しお起動するこずでComposerを高速化できたす。



別の方法は、 -prefer-distパラメヌタヌを䜿甚するこずです。Composerをむンストヌルするず、バヌゞョン管理システムからクロヌンを䜜成する代わりに、安定したパッケヌゞバヌゞョンのプロゞェクトがダりンロヌドされたす非垞に遅い。 このオプションはデフォルトで䜿甚されるため、安定したプロゞェクトで有効にする必芁はありたせん。 ゜ヌスからプロゞェクトをダりンロヌドする必芁がある堎合は、 -prefer-sourceオプションを䜿甚したす。 詳现に぀いおは、 むンストヌルセクションをご芧ください 。



Composerプロゞェクトのサむズを瞮小する



Composerに優しいプロゞェクトの開発者であれば、この郚分にも興味がありたす。 このRedditの投皿では、 .gitattributesファむルを䜿甚しお、 -prefer-distモヌドのパッケヌゞパッケヌゞング䞭に䞀郚のファむルずフォルダヌを無芖できたす。

 / docs export-ignore
 / export-ignoreをテストしたす
 /.gitattributes export-ignore
 /.gitignore export-ignore
 /.travis.yml export-ignore
 /phpunit.xml export-ignore


どのように機胜したすか プロゞェクトをGitHubにアップロヌドするず、 「zipのダりンロヌド」リンクが自動的に䜿甚可胜になり、プロゞェクトのアヌカむブをダりンロヌドできたす。 さらに、Packagistはこれらの自動生成されたアヌカむブを䜿甚しお--prefer-distオプションを䜿甚しお䟝存関係をダりンロヌドし、ロヌカルで解凍したすプロゞェクト゜ヌスファむルのクロヌンを䜜成するよりもはるかに高速です。 プロゞェクトのロゞックに関連しないテスト、ドキュメント、およびその他のファむルを.gitattributesに远加するず 、これらのアヌカむブにはそれらが含たれなくなり、はるかに簡単になりたす。



同時に、ラむブラリをデバッグしたりテストを実行したい人は--prefer-sourceパラメヌタヌを指定する必芁がありたす。



PhpLeagueはこのアプロヌチを採甚し、それを「 パッケヌゞスケルトン 」に含めたため、それに基づいたプロゞェクトはすべお自動的に「dist friendly」になりたす。



ショヌ



䜿甚しおいるPHPたたはその拡匵機胜のバヌゞョンを突然忘れた堎合、たたはむンストヌルされおいるすべおのプロゞェクトそれぞれの説明を含むのバヌゞョンのリストが必芁な堎合は、 showコマンドを--platform  -p および--installed  -i 



composer show --installed
 $ composer show --installed behat/behat v3.0.15 Scenario-oriented BDD framework for PHP 5.3 behat/gherkin v4.3.0 Gherkin DSL parser for PHP 5.3 behat/mink v1.5.0 Web acceptance testing framework for PHP 5.3 behat/mink-browserkit-driver v1.1.0 Symfony2 BrowserKit driver for Mink framework behat/mink-extension v2.0.1 Mink extension for Behat behat/mink-goutte-driver v1.0.9 Goutte driver for Mink framework behat/mink-sahi-driver v1.1.0 Sahi.JS driver for Mink framework behat/mink-selenium2-driver v1.1.1 Selenium2 (WebDriver) driver for Mink framework behat/sahi-client dev-master ce7bfa7 Sahi.js client for PHP 5.3 behat/symfony2-extension v2.0.0 Symfony2 framework extension for Behat behat/transliterator v1.0.1 String transliterator components/bootstrap 3.3.2 The most popular front-end framework for developing responsive, mobile first projects on the web. components/jquery 2.1.3 jQuery JavaScript Library doctrine/annotations v1.2.4 Docblock Annotations Parser doctrine/cache v1.4.1 Caching library offering an object-oriented API for many cache backends doctrine/collections v1.3.0 Collections Abstraction library doctrine/common v2.5.0 Common Library for Doctrine projects doctrine/dbal v2.5.1 Database Abstraction Layer doctrine/doctrine-bundle v1.4.0 Symfony DoctrineBundle doctrine/doctrine-cache-bundle v1.0.1 Symfony2 Bundle for Doctrine Cache doctrine/inflector v1.0.1 Common String Manipulations with regard to casing and singular/plural rules. doctrine/instantiator 1.0.4 A small, lightweight utility to instantiate objects in PHP without invoking their constructors doctrine/lexer v1.0.1 Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. egulias/listeners-debug-command-bundle 1.9.1 Symfony 2 console command to debug listeners ezsystems/behatbundle dev-master bd95e1b Behat bundle for help testing eZ Bundles and projects ezsystems/comments-bundle dev-master 8f95bc7 Commenting system for eZ Publish ezsystems/demobundle dev-master c13fb0b Demo bundle for eZ Publish Platform ezsystems/demobundle-data v0.1.0 Data for ezsystems/demobundle ezsystems/ezpublish-kernel dev-master 3d6e48d eZ Publish API and kernel. This is the heart of eZ Publish 5. ezsystems/platform-ui-assets-bundle v0.5.0 External assets dependencies for PlatformUIBundle ezsystems/platform-ui-bundle dev-master 4d0442d eZ Platform UI Bundle ezsystems/privacy-cookie-bundle v0.1 Privacy cookie banner integration bundle into eZ Publish/eZ Platform fabpot/goutte v1.0.7 A simple PHP Web Scraper friendsofsymfony/http-cache 1.3.1 Tools to manage cache invalidation friendsofsymfony/http-cache-bundle 1.2.1 Set path based HTTP cache headers and send invalidation requests to your HTTP cache guzzle/guzzle v3.9.3 PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle hautelook/templated-uri-bundle 2.0.0 Symfony2 Bundle that provides a RFC-6570 compatible router and URL Generator. hautelook/templated-uri-router 2.0.1 Symfony2 RFC-6570 compatible router and URL Generator imagine/imagine 0.6.2 Image processing for PHP 5.3 incenteev/composer-parameter-handler v2.1.0 Composer script handling your ignored parameter file instaclick/php-webdriver 1.0.17 PHP WebDriver for Selenium 2 jdorn/sql-formatter v1.2.17 a PHP SQL highlighting library knplabs/knp-menu v1.1.2 An object oriented menu library knplabs/knp-menu-bundle v1.1.2 This bundle provides an integration of the KnpMenu library kriswallsmith/assetic v1.2.1 Asset Management for PHP kriswallsmith/buzz v0.13 Lightweight HTTP client league/flysystem 0.5.12 Many filesystems, one API. liip/imagine-bundle 1.2.6 This Bundle assists in imagine manipulation using the imagine library monolog/monolog 1.13.1 Sends your logs to files, sockets, inboxes, databases and various web services nelmio/cors-bundle 1.3.3 Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony2 application ocramius/proxy-manager 0.5.2 A library providing utilities to generate, instantiate and generally operate with Object Proxies oneup/flysystem-bundle v0.4.2 Integrates Flysystem filesystem abstraction library to your Symfony2 project. pagerfanta/pagerfanta v1.0.3 Pagination for PHP 5.3 phpdocumentor/reflection-docblock 2.0.4 phpspec/prophecy v1.4.1 Highly opinionated mocking framework for PHP 5.3+ phpunit/php-code-coverage 2.0.16 Library that provides collection, processing, and rendering functionality for PHP code coverage information. phpunit/php-file-iterator 1.4.0 FilterIterator implementation that filters files based on a list of suffixes. phpunit/php-text-template 1.2.0 Simple template engine. phpunit/php-timer 1.0.5 Utility class for timing phpunit/php-token-stream 1.4.1 Wrapper around PHP's tokenizer extension. phpunit/phpunit 4.6.4 The PHP Unit Testing framework. phpunit/phpunit-mock-objects 2.3.1 Mock Object library for PHPUnit psr/log 1.0.0 Common interface for logging libraries qafoo/rmf 1.0.0 Very simple VC framework which makes it easy to build HTTP applications / REST webservices sebastian/comparator 1.1.1 Provides the functionality to compare PHP values for equality sebastian/diff 1.3.0 Diff implementation sebastian/environment 1.2.2 Provides functionality to handle HHVM/PHP environments sebastian/exporter 1.2.0 Provides the functionality to export PHP variables for visualization sebastian/global-state 1.0.0 Snapshotting of global state sebastian/recursion-context 1.0.0 Provides functionality to recursively process PHP variables sebastian/version 1.0.5 Library that helps with managing the version number of Git-hosted PHP projects sensio/distribution-bundle v3.0.21 Base bundle for Symfony Distributions sensio/framework-extra-bundle v3.0.7 This bundle provides a way to configure your controllers with annotations sensio/generator-bundle v2.5.3 This bundle generates code for you sensiolabs/security-checker v2.0.2 A security checker for your composer.lock swiftmailer/swiftmailer v5.4.0 Swiftmailer, free feature-rich PHP mailer symfony-cmf/routing 1.3.0 Extends the Symfony2 routing component for dynamic routes and chaining several routers symfony/assetic-bundle v2.6.1 Integrates Assetic into Symfony2 symfony/monolog-bundle v2.7.1 Symfony MonologBundle symfony/swiftmailer-bundle v2.3.8 Symfony SwiftmailerBundle symfony/symfony v2.6.6 The Symfony PHP framework tedivm/stash v0.12.3 The place to keep your cache. tedivm/stash-bundle v0.4.2 Incorporates the Stash caching library into Symfony. twig/extensions v1.2.0 Common additional features for Twig that do not directly belong in core twig/twig v1.18.1 Twig, the flexible, fast, and secure template language for PHP white-october/pagerfanta-bundle v1.0.2 Bundle to use Pagerfanta with Symfony2 whiteoctober/breadcrumbs-bundle 1.0.2 A small breadcrumbs bundle for Symfony2 zendframework/zend-code 2.2.10 provides facilities to generate arbitrary code using an object oriented interface zendframework/zend-eventmanager 2.2.10 zendframework/zend-stdlib 2.2.10 zetacomponents/base 1.9 The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package. zetacomponents/feed 1.4 This component handles parsing and creating RSS1, RSS2 and ATOM feeds, with support for different feed modules (dc, content, creativeCommons, geo, iTunes). zetacomponents/mail 1.8.1 The component allows you construct and/or parse Mail messages conforming to the mail standard. It has support for attachments, multipart messages and HTML mail. It also interfaces with SMTP to send mail or IMAP, P... zetacomponents/system-information 1.1 Provides access to common system variables, such as CPU type and speed, and the available amount of memory.
      
      







リハヌサルドラむラン



新しい䟝存関係のむンストヌルが成功したかどうかを確認するには、 むンストヌルおよび曎新コマンドに--dry-runオプションを䜿甚できたす。 この堎合、Composerは、コマンド自䜓を盎接実行せずに、朜圚的な問題をすべお衚瀺したす。 プロゞェクトに実際の倉曎は発生したせん。 この手法は、耇雑な䟝存関係をテストし、実際に倉曎する前に倉曎を蚭定するのに最適です。



 composer update --dry-run --profile --verbose
      
      





プロゞェクト䜜成



最埌になりたしたが、蚀及する必芁があるのはcreate-project コマンドです。



プロゞェクト䜜成チヌムは、パッケヌゞ名を匕数ずしお䜿甚し、パッケヌゞ内でcomposer installを耇補しお実行したす。 これはプロゞェクトの初期化に最適です-GitHubで必芁なパッケヌゞのUrlを怜玢し、クロヌンを䜜成し、自分でフォルダに移動しおむンストヌルコマンドを実行する必芁がなくなりたした。



SymfonyやLaravelなどの倧芏暡プロゞェクトでは、すでにこのアプロヌチを䜿甚しおスケルトンアプリケヌションを初期化しおおり、他の倚くのプロゞェクトも参加しおいたす。



たずえば、Laravelでは、これは次のように䜿甚されたす。



 composer create-project laravel/laravel --prefer-dist --profile --verbose
      
      





さらに2぀のパラメヌタヌをcreate-projectコマンドに枡すこずができたす。プロゞェクトをむンストヌルする必芁があるパス 指定しない堎合、パッケヌゞ名が䜿甚されたす、およびバヌゞョン 指定しない堎合は埌者が䜿甚されたす。



おわりに



このヒントずコツのリストがお圹に立おば幞いです。 䜕か芋逃した堎合は、そのこずをお知らせください。蚘事を曎新したす。 コマンドやオプションを忘れた堎合は、 チヌトシヌトをご芧ください 。 幞せな䜜曲



All Articles