PHPのライブラリ管理にComposerを使っています。
先日困ったことが起きました。
現状
composer installでcomposer.lockを使用しライブラリをインストール。
composer.jsonに設定を追加しcomposer.jsonを使用しcomposer update。
すると、composer.jsonにバージョン指定を*にしている幾つかのライブラリが後方互換性が担保されていなかったためシステムが壊れてしまいました。
現在の運用ではcomposer requireを使用してcomposer.lockを更新。
開発環境であってもcomposer updateは使用せず、新しくライブラリを追加する場合は、vendorをrmしてcomposer installをしています。
質問
まず、composer.jsonとcomposer.lockを一旦同期させたほうが良いかなと思っています。
composer.lockをコピーしcomposer.jsonとして使用することはできますでしょうか?
ただし、管理上不要なものは取り除きたいです。
私の考え
私の考えでは、開発環境ではcomposer.jsonを編集しcomposer updateを行いcomposer.lockを更新。
ステージングでは、composer installしか行わない。
というのが、王道なやり方なのかなと思っています。
みなさんのご意見をお聞きしたいです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
composer update 特定のパッケージ名
で特定のパッケージのみアップデートできますよ!
composer.lockファイルはアップデートしたらコミットしておいて、相手にはcomposer installをしてもらいましょう
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/04/19 23:04 編集
はい、存じています。
composer update(引数なし)をウッカリ叩くとシステムが壊れるという現象は解決しません。
composer update(引数なし)を使用しないよう規約で縛るのはナンセンスだと思ってます。
ウッカリやってしまうものだと思うので。
composer update 特定のパッケージ名では、composer.lockを更新のみでcomposer.jsonを更新しません。
追加時にcomposer.jsonに追記してしまうとシステムが壊れてしまうことも解決しないです。
一旦、lockとjsonの乖離をなくさないことには解決しない問題だと思ってます。
そして、その方法がわからないです。
2016/04/19 23:27
手動でやってるとなると、一個シェルを挟んだりして対応するとかでしょうか。。。
2016/04/19 23:33
現在おそらくdev-masterを指定していて、更新をしてしまうとそれも更新されてしまうのが問題なんですよね。
じつはこのdev-masterの後にコミット番号を書くことが出来ます。
dev-master#a2f5629fb0e6a85b749b3f49bd790b61381c14a9
みたいな感じです。このようにすることでコミット番号以降はupdateされないのでこの方法を使うのがよいかもしれません。
2016/04/20 01:06
私のチームも自動化しているのでステージングやプロダクションでcomposer updateされないです。
しかし、開発環境でcomposer updateされるとシステムが壊れます。
dev-masterは使用していません。
ライブラリのバージョン指定すべきところを*で運用していました。
かなりずさんな運用をしていたのでツケが来た感じです。
基本的には開発環境でcomposer installしか実行しません。
しかし、ライブラリを追加するためにcomposer.jsonを書き換えた後にcomposer updateをするとシステムが壊れます。
composer.jsonは運用として機能していません。
解決方法としては、壊れないバージョンをcomposer.jsonで指定することです。
しかし、composer.jsonにかなりの量のライブラリが記述されているため手動で変更していくのは現実的ではないです。
使われていないライブラリもたくさんあるはずですが。。。
かなり、レガシーになってしまってメンテもされていなかったという複雑な事情があります。
2016/04/20 09:55 編集
となるとlockファイルはjsonで書かれているのでそれをパースして作りなおすしか無い気がしますね。しかしながらcomposer.jsonにしかかかれないような情報(例えば自身のライブラリの名前等)があるので、部分的に。
私がやるとすればcomposer.jsonファイルとcomposer.lockファイルを両方取得してそれをパースした後、composer.jsonファイルで*指定されているパッケージをcomposer.lockから検索して対象のコミット番号に書き換えて出力するとかでしょうか。
何かコンバートするようなツールがあればよかったんですが探ってみましたが見つかりませんでしたね。。。
2016/04/20 10:16
私もそのようなやり方しか方法がないように思えます。
コメント頂いたおかげで自信持てました。
ありがとうございました!