🫠
Laravel開発でComposerライブラリがGitブランチ切り替え後に使える理由
Laravel開発でComposerライブラリがGitブランチ切り替え後に使える理由
はじめに
Laravel×Reactで学習アプリを開発していたときに、不思議な現象に遭遇しました。
状況
-
mainブランチからstripeブランチを作成・チェックアウト -
stripeブランチでcomposer require stripe/stripe-phpを実行 -
git push origin stripeでプッシュ -
mainブランチに戻ってgit pull - なぜかStripeライブラリが使える状態に...🤔
「あれ?composer installしてないのになんで使えるの?」という疑問を持ったので、同じ疑問を持つ方の参考になればと思います。
結論
答え:composer dev実行時にComposerが自動的に依存関係をインストールしていた
詳しく解説
何が起こったのか
実際の流れは以下の通りでした!
# 1. stripeブランチでライブラリをインストール
git checkout -b stripe
composer require stripe/stripe-php # composer.jsonとcomposer.lockが更新される
# 2. 変更をプッシュ
git add .
git commit -m "Add Stripe library"
git push origin stripe
# 3. mainブランチに戻ってpull
git checkout main
git pull origin main # composer.jsonが更新される(但しvendor/は.gitignore対象)
# 4. 開発サーバー起動
composer dev # ここで自動的にStripeがインストールされる!
なぜ自動インストールされたのか
1. composer.jsonの更新
composer require stripe/stripe-phpを実行すると、以下のようにcomposer.jsonが更新されます:
{
"require": {
"php": "^8.2",
"laravel/framework": "^12.0",
"stripe/stripe-php": "^17.5", // 追加された
// ...
}
}
2. .gitignoreの設定
# vendor/ディレクトリはGit管理対象外
/vendor
つまり、依存関係の定義(composer.json)はGitで管理されるが、実際のライブラリファイル(vendor/)は管理されません。
3. Composerの賢い動作
composer devのようなComposerスクリプトを実行する際、Composerは以下をチェックします。
-
composer.jsonに定義された依存関係 -
vendor/ディレクトリの実際の状態 - 不足している依存関係があれば自動でインストール
composer devスクリプトの中身
私のプロジェクトのcomposer devは以下のような内容でした。
{
"scripts": {
"dev": [
"Composer\\Config::disableProcessTimeout",
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
]
}
}
このスクリプト実行前に、Composerが依存関係をチェック・インストールしてくれていたのです。
正しい理解
本来あるべき手順
# mainブランチに戻った後
git checkout main
git pull origin main
# 依存関係を明示的にインストール
composer install # composer.lockに基づいてインストール
# 開発サーバー起動
composer dev
なぜcomposer installが必要なのか
- composer.json: 依存関係の定義(「Stripeが必要」)
- composer.lock: 具体的なバージョン情報(「Stripe 17.5.0を使用」)
- vendor/: 実際のライブラリファイル(Git管理外)
ブランチ切り替え後はcomposer installで、composer.lockに基づいて正確なバージョンをインストールするのがベストプラクティスです。
まとめ
- Composerは
composer.jsonの変更を検知して自動で依存関係をインストールすることがある - しかし、明示的に
composer installを実行する方が安全で確実 -
vendor/ディレクトリは.gitignoreで除外し、依存関係の定義のみをGit管理するのが正解
チームでの注意点
チーム開発では以下を徹底しましょう:
# プルリクエストをマージした後
git pull origin main
composer install # 依存関係を確実に同期
npm install # Node.jsの依存関係も同期
これで「あれ?動かない」というトラブルを避けられます!
同じような疑問を持った方の参考になれば幸いです。Laravel開発頑張りましょう!🚀
Discussion