結論

composerのパッケージのバージョンを調べるときは composer show -i packagename する.
packagenameつけなかったりcomposer.lock見ても dev-master で使っているパッケージの正確な名前はわからないので気をつけよう.

経緯

例えばこんな感じの composer.json があったとして,

{
    "name": “test”,
    "description": “this is test server",
    "keywords": ["framework", "laravel"],
    "license": "",
    "type": "project",
    "require": {
        "intervention/image": "dev-master”,
    },
}

この部分 "intervention/image": "dev-master”, の, dev-master について.

dev-master とは,このpackageのmasterブランチのことで、このバージョンを指定するとmasterの最新コミットが適用される.
つまり,最新機能が入っているけど不安定なものがインストールされてしまう.
この状態は障害を生みやすいので,動いている状態で一旦固めてしまうのが良い.

というわけで,このパッケージ intervention/image の正式バージョン名を調べる.

バージョンを調べる

ダメだった方法

  • composer.lock を見る
  • composer show -i から目的パッケージを探して見る

よかった方法

  • composer show -i packagename して目的パッケージの詳細情報を見る

ダメだった方法は2つは,

  • composer.lock を見る
{
    "name": "intervention/image",
    "version": "dev-master",
    "source": {
        "type": "git",
        "url": "https://github.com/Intervention/image.git",
        "reference": "e82d274f786e3d4b866a59b173f42e716f0783eb"
    },
    ...略...
},
  • composer show -i から目的パッケージを探して見る
$ composer show -i
…略…
intervention/image                    dev-master e82d274 Image handling and manipulation library with support for Laravel integration

という感じで,composer.jsonに書ける形式のバージョンはわかりませんでした.

よかった方法は, composer show -i intervention/image する方法.

$ composer show -i intervention/image
name     : intervention/image
descrip. : Image handling and manipulation library with support for Laravel integration
keywords : gd, image, imagick, laravel, thumbnail, watermark
versions : * dev-master, 2.4.x-dev
type     : library
…略…

versionsのところに, * dev-master2.4.x-dev が書かれている.
これの 2.4.x-dev がいまインストールされているバージョンとわかる.

固定バージョンを適用する

バージョンがわかったらcomposer.jsonを以下のように書き換える.

{
    "name": “test”,
    "description": “this is test server",
    "keywords": ["framework", "laravel"],
    "license": "",
    "type": "project",
    "require": {
        "intervention/image": "2.4.x-dev”,
    },
}

あとは $ composer update すればOK!