1. ホーム
  2. composer-php

[解決済み] composer.jsonのrequireセクションとrequire-devセクションの違いは何ですか?

2022-07-13 21:40:44

質問

composerを使い始めたのですが、ほとんど知識がなく、Webアプリケーションの開発経験もほとんどありません。

私はただ Nettuts+ チュートリアル を読んだばかりなので、コンポーザーについて基本的な質問があります。

{
  "require": {
    "laravel/framework": "4.0.*",
    "way/generators": "dev-master",
    "twitter/bootstrap": "dev-master",
    "conarwelsh/mustache-l4": "dev-master"
  },
  "require-dev": {
    "phpunit/phpunit": "3.7.*",
    "mockery/mockery": "0.7.*"
  },
  "autoload": {
    "classmap": [
      "app/commands",
      "app/controllers",
      "app/models",
      "app/database/migrations",
      "app/database/seeds",
      "app/tests/TestCase.php"
    ]
  },
  "scripts": {
    "post-update-cmd": "php artisan optimize"
  },
  "minimum-stability": "dev"
}

  1. に表示されるものはすべて "require-dev" の部分に表示されるものは、ダウンロードとインストールは composer install --dev ?
  2. composer のドキュメントをいくつか読んでみましたが、 なぜ "require-dev" の部分があるのはなぜでしょうか? それは、特定の バージョン を取得したいからでしょうか?

どのように解決するのですか?

さまざまな環境

一般的に、ソフトウェアは異なる環境で動作します。

  • development
  • testing
  • staging
  • production

異なる環境での異なる依存性

で宣言されている依存関係は require セクションの composer.json のアプリケーションやパッケージの実行に必要な依存関係です。

  • staging
  • production

環境で宣言されている依存関係に対して require-dev セクションで宣言された依存関係は、通常

  • developing
  • testing

の環境です。

例えば、実際にアプリケーションを実行するために使用するパッケージの他に、ソフトウェアを開発するために以下のようなパッケージが必要かもしれません。

  • friendsofphp/php-cs-fixer (コーディングスタイルの問題を検出し修正するため)
  • squizlabs/php_codesniffer (コーディングスタイルの問題を検出し修正するため)
  • phpunit/phpunit (テストを用いて開発を推進する)
  • など

デプロイメント

では developmenttesting 環境では、通常

$ composer install

の両方をインストールするために productiondevelopment の依存関係があります。

しかし stagingproduction 環境では、アプリケーションの実行に必要な依存関係のみをインストールしたいので、デプロイプロセスの一部として、通常、次のように実行します。

$ composer install --no-dev

をインストールするだけで production のような依存関係があります。

セマンティクス

言い換えれば、各セクション

  • require
  • require-dev

に示す。 composer を実行したときにどのパッケージがインストールされるかを示します。

$ composer install

または

$ composer install --no-dev

以上です。

ノート あなたのアプリケーションやパッケージが依存するパッケージの開発依存は決してインストールされません。

参考までに