2
2

More than 3 years have passed since last update.

忙しい人のためのComposerメモ

Last updated at Posted at 2020-04-13

※5年以上前に別のナレッジベースへ投稿していたものを書き出しただけなので情報が古い可能性があります。

システム要件

  • PHP5.3.2以上
  • git、SVN、hgがインストールされている(どれが必要かはパッケージによる)
  • マルチプラットフォーム

覚えておくべきこと

  • composer.jsonはインストールしたいものを列挙する
  • composer installするとcomposer.lockが作られる
  • composer installはcomposer.jsonに従って行われる
    • ただしcomposer.lockがある場合はロックファイルに記述されたバージョンをインストールする
  • composer.lockはインストールされたものが列挙される
  • composer updateするとパッケージが更新される
    • 複数人で環境を合わせている場合、実行するのは基本的にinstallコマンドのみ
    • updateはcomposer.lockも書き換える。

composerを使用している既存のプロジェクトに参加する場合

  • composer.lockがない場合はリーダーに指示を仰ぐ。
    • 勝手にcomposer updateしないこと。
    • updateコマンドを実行するとcomposer.lockを無視してcomposer.jsonを参照してしまう。
    • composer.jsonの記述によっては違うバージョンになってしまう。
  • パッケージの取得はcomposer.lockがある状態でcomposer installで行う。
    • 識者によってパッケージが更新された場合はcomposer.lockを受け取ってインストールする。

composer.lockを書き換えずに特定のパッケージだけ更新したい場合

  • composer update pear/console_commandline
    • パッケージ名を指定して個別にアップデートする

基本

  • composerはPHPのパッケージを管理してくれるソフトウェア。
  • composer本体はPHPで出来ている。
    • 実行ファイルの.pharはjavaでいうjarのようなもの。
  • composer本体はプロジェクト外にインストールする。
  • composerは内部でgitやsvnなどを使ってパッケージをインストールする。(設定による)
  • マルチプラットフォームでWindows用にはexeが用意されている。
  • composerはPackagistという中央リポジトリが用意されている。
    • デフォルトではそこから取得するが、自分でリポジトリ作ることも出来る(satis)
    • zipなどを指定することも出来る

使い方

  • 基本的な実行方法はcomposer コマンド名
    • composer install
    • composer updateなど
  • プロジェクトのディレクトリにcomposer.jsonを作成してインストールコマンドを叩く。
    • composer.jsonにはインストールしたいパッケージを書いておく。
  • 実行したディレクトリにvendorディレクトリが作られ、その中にパッケージがインストールされる。
  • 実際にインストールされたパッケージが記述されたcomposer.lockが作られる。

composer.jsonとcomposer.lock(ロックファイル)

  • composer.jsonはインストールしたいパッケージを列挙したjsonファイル。
    • composer.jsonは取得するパッケージのバージョンを「v2.0以上」のように曖昧に書ける。(例:1.0.*)
  • composer.lockはインストールされたパッケージが列挙されたjsonファイル。
    • composer.lockはcomposer.jsonの曖昧表現から実際にインストールされたバージョンが記述される。
  • 初めてinstallするとcomposer.jsonを見てcomposer.lockが作られる。
  • composer.lockがある状態でinstallするとcomposer.lockを見てインストールされる。

パッケージ

  • パッケージ名のxxxx/yyyyというフォーマットは前者がベンダ名で後者がパッケージ名
    • 複数のベンダが同じパッケージ名を使えるように考慮されている
  • パッケージバージョンの表記はタグかブランチかで分かれる。
  • タグがあるならタグの安定版を使ったほうがいい。
    • タグの場合は1.0.0v2.0.0のような形式となる
    • ブランチの場合はdev-master2.0.1のような形式となる。
    • オプションとして-pach-alphabeta-RCといったオプションを付加できる。
    • オプションはタグの場合は後部に、ブランチの場合は前部に付加する。
    • ただし、ブランチ名がタグ名の規約に合わせて付けられている場合、{ブランチ名}-devという名前になる。

タグ名の例

  • 1.0.0
  • v2.0.0-beta2
  • v3.0.1-alpha

ブランチ名の例

  • dev-master
  • 2.0.1-dev

composer.jsonサンプル

基本

{
    "require": {
        "monolog/monolog": "1.0.*"
    }

    "require-dev": {
        "phpunit/phpunit": "3.7.*",
    }
}

開発時にだけ必要なものはrequire-devに書く。
本番環境でインストールするときにcomposer install -no-devとすれば、
require-devで指定されているものはインストールされない。

リポジトリ指定

GitやSVNのリポジトリなら

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/hoge/hogehoge"
        }
    ],
    "require": {
        "hoge/hogehoge": "1.0.*"
    }
}

PEARリポジトリなら

{
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.php.net"
        },
        {
            "type": "pear",
            "url": "http://pear.phpunit.de"
        }

    ],
    "require": {
        "pear-phpunit/PHPUnit": "3.4.*",
        "pear-php/Mail": "1.2.*",
        "pear-pear/Net_SMTP": "1.4.1",
    }
}

Vendor名はpear-{channelName}の形式になる

※PHPUnitのPEAR channelは2014年末に終了済み

packageそのものを直接指定するなら

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "smarty/smarty",
                "version: "3.1.8",
                "dist": {
                    "url": "http:www.smarty.net/files/Smarty-3.1.8.zip",
                    "type": "zip"
                }
            }
        },
    ],
}

zipファイルで配布されているパッケージを直接指定するサンプル。

参考リンク

Dependency Manager for PHP
https://getcomposer.org/
https://kohkimakimoto.github.io/getcomposer.org_doc_jp/doc/

Qiita : composer 導入をまじめに考える
http://qiita.com/notona/items/c5a087d8dd446d315e6e

Slideshare : いまさらComposer
http://www.slideshare.net/mkkn00/ss-36062876

2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2