symfonyを使ってるといつの間にか入ってて、更新もされるsymfony.lock。
composer.lockと何が違うのか等、よくわかってなかったので自分なりに調べたことをまとめます。
\いろいろまとめてみたんですが、すでに記事ありました!/
こちらの方が断然わかりやすいです!!!
https://zenn.dev/ttskch/articles/13013224b61531
symfony.lockには何が書いてある?
composer require symfony/<name>
などのコマンドを叩いた時に、必要な環境変数(.env)やconfig/のyamlの追加が自動的にされることがあります。
この履歴がsymfony.lockに記録されています。
※doctrine/annotations
といったsymfony/<name>
以外の対象もあります。
ちなみに、
composer require symfony/notifier
をした時、「config/packages/notifier.yamlを追加する」といった定義(レシピ)はsymfony/recipesによって管理されています。
さらに、
「config/packages/notifier.yamlを追加する」という定義(レシピ)の実行は、symfony/flex(Composer Plugin for Symfony)によって行われています。
composer.lockとの違いは?
- symfony/recipesに置いてあるどのバージョン(version)のmanifest(レシピの定義)を使っているのかが明記されています。
- 追加や更新するファイル(files)についても明記されています。
// symfony.lock
{
"symfony/flex": {
"version": "2.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.0",
"ref": "146251ae39e06a95be0fe3d13c807bcf3938b172"
},
"files": [
".env"
]
},
"symfony/notifier": {
"version": "6.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.0",
"ref": "c31585e252b32fe0e1f30b1f256af553f4a06eb9"
},
"files": [
"config/packages/notifier.yaml"
]
}
}
// composer.lock
...
"packages": [
{
"name": "symfony/flex",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "3c9c3424efdafe33e0e3cfb5e87e50b34711fedf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/3c9c3424efdafe33e0e3cfb5e87e50b34711fedf",
"reference": "3c9c3424efdafe33e0e3cfb5e87e50b34711fedf",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.1",
"php": ">=8.0"
},
"require-dev": {
"composer/composer": "^2.1",
"symfony/dotenv": "^5.4|^6.0",
"symfony/filesystem": "^5.4|^6.0",
"symfony/phpunit-bridge": "^5.4|^6.0",
"symfony/process": "^5.4|^6.0"
},
"type": "composer-plugin",
...
symfony.lockはsymfony/flexをrequireすると追加される
※ symfony/flex => Composer plugin for Symfony
$ composer require symfony/flex ... // ↓↓↓ この辺りがsymfony/flexによって行われている。 ↓↓↓ Symfony operations: 1 recipe (ad5e8d2058412a4be7bb46bf8d4af76c) - Configuring symfony/flex (>=1.0): From github.com/symfony/recipes:main // ↑↑↑ この辺りがsymfony/flexによって行われている。 ↑↑↑ No security vulnerability advisories found Using version ^2.3 for symfony/flex $ git status On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: composer.json Untracked files: (use "git add ..." to include in what will be committed) .env composer.lock symfony.lock no changes added to commit (use "git add" and/or "git commit -a")
どうなったらsymfony.lockに追加や更新されるか?
symfony/flexがinstall済みで、かつsymfony/recipesで管理されているcomposerパッケージについてcomposer require
やcomposer update
をした時のようです。
また、レシピがないパッケージについても以下コマンドでsymfony.lockに追加できます。さらに、既にsymfony.lockに定義されているパッケージについてのバージョンを更新できます。
$ composer recipes:install <vendor>/<package> --force -vた
ただ、レシピがないのにsymfony.lockに定義してるパッケージは何の意味があるのかよくわかっていません🤔 誰か教えてください!
最後に
この記事を書くために、symfony/flexを読みました。Composer pluginの作り方や流れを知ることができたので次の記事で書こうと思います。
参考
- Symfony Flex: https://github.com/symfony/flex
- Symfony Recipes Repository: https://github.com/symfony/recipes
- Composer plugin: https://getcomposer.org/doc/articles/plugins.md
- Composer ScriptEvents: https://github.com/composer/composer/blob/2.5/src/Composer/Script/ScriptEvents.php
- https://symfony.com/doc/6.2/setup/flex.html
- https://stackoverflow.com/questions/47399592/symfony-flex-what-does-symfony-lock-file-do