🫥
vendorフォルダって何?Laravel初心者が理解すべきComposerの仕組み
vendorフォルダって何?Laravel初心者が理解すべきComposerの仕組み
はじめに
Laravel開発を始めたばかりの頃、こんな疑問を持ったことはありませんか?
- 「vendorフォルダって何が入ってるの?」
- 「なぜ.gitignoreに含まれてるの?」
- 「composer installで何が起こってるの?」
- 「本番環境にvendorをデプロイしちゃダメなの?」
私もLaravel学習中にこれらの疑問を持ち、調べても難しい説明ばかりで理解に苦労しました。
この記事では、初心者でもわかるようにvendorフォルダの正体と仕組みを解説します!
vendorフォルダの正体
一言で説明すると
vendorフォルダ = 外部ライブラリの実体が保存される倉庫
つまり、「他の人が作ったコードの保管場所」です。
具体例:Stripeライブラリをインストールした場合
composer require stripe/stripe-php
このコマンドを実行すると、以下のような構造になります:
プロジェクト/
├── app/
├── public/
├── vendor/ # ← 外部ライブラリの倉庫
│ ├── stripe/ # ← Stripeのコード
│ │ └── stripe-php/
│ │ ├── lib/
│ │ │ ├── Stripe.php
│ │ │ ├── Customer.php
│ │ │ └── PaymentIntent.php
│ │ └── README.md
│ ├── laravel/ # ← Laravel本体
│ │ └── framework/
│ ├── symfony/ # ← Symfonyコンポーネント
│ │ ├── console/
│ │ └── http-foundation/
│ └── autoload.php # ← 重要:自動読み込み機能
├── composer.json # ← 設計図
└── composer.lock # ← 材料リスト
なぜvendorが必要なのか?
vendorがない場合(エラー)
<?php
// これは動かない!
$stripe = new \Stripe\Stripe();
// エラー: Fatal error: Class 'Stripe\Stripe' not found
vendorがある場合(正常動作)
<?php
require_once 'vendor/autoload.php'; // 魔法の一行
$stripe = new \Stripe\Stripe(); // 動く!
vendor/autoload.phpが、必要なライブラリを自動で読み込んでくれます。
3つのファイルの関係性
家の建築に例えると理解しやすいです:
| ファイル | 建築での例 | 役割 |
|---|---|---|
| composer.json | 設計図 | 「何が必要か」を定義 |
| composer.lock | 材料発注書 | 「具体的にどのバージョンを使うか」を記録 |
| vendor/ | 実際の材料 | ダウンロードされた実際のコード |
composer.json(設計図)
{
"require": {
"stripe/stripe-php": "^17.5",
"laravel/framework": "^12.0"
}
}
意味: 「Stripeライブラリの17.5以上と、Laravelフレームワークの12.0以上が必要です」
composer.lock(具体的な記録)
{
"packages": [
{
"name": "stripe/stripe-php",
"version": "17.5.2",
"source": {
"url": "https://github.com/stripe/stripe-php.git"
}
}
]
}
意味: 「実際にはStripeのバージョン17.5.2を使っています」
vendor/(実物倉庫)
実際にダウンロードされたライブラリのコードファイルが保存されている場所。
なぜvendorは.gitignoreに入れるの?
# .gitignore
/vendor
理由1:ファイルサイズが巨大
# vendorフォルダのサイズを確認
du -sh vendor/
# 結果例: 150MB vendor/
Gitリポジトリが重くなり、クローンに時間がかかってしまいます。
理由2:環境の違い
- 開発環境:Windows/Mac
- 本番環境:Linux
バイナリファイルが含まれる場合、OS間で互換性の問題が生じる可能性があります。
理由3:いつでも復元できる
# vendor/を削除しても...
rm -rf vendor/
# いつでも復元可能
composer install
composer.lockがあれば、全く同じ環境を再現できます。
実際のチーム開発フロー
新しいメンバーがプロジェクトに参加する場合
# 1. プロジェクトをクローン
git clone https://github.com/your-project.git
cd your-project
# 2. vendor/はない状態(.gitignoreされているため)
ls vendor/
# ls: vendor/: No such file or directory
# 3. 依存関係をインストール
composer install
# 4. vendor/が復活!全員同じ環境
ls vendor/
# stripe/ laravel/ symfony/ autoload.php
ライブラリを追加する場合
# 開発者Aがライブラリを追加
composer require guzzlehttp/guzzle
# composer.jsonとcomposer.lockが更新される
git add composer.json composer.lock
git commit -m "Add Guzzle HTTP client"
git push
# 他の開発者が同期
git pull
composer install # 新しいライブラリが自動でインストールされる
本番環境でのベストプラクティス
❌ 良くない方法:vendor/をそのままアップロード
# GitHub Actions(推奨しない例)
- name: FTP Deploy
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
local-dir: ./
# vendor/もアップロードされてしまう
問題点:
- アップロード時間が長い
- 環境の違いで動かない可能性
- セキュリティリスク
✅ 推奨方法:サーバー側でcomposer install
# サーバー側で実行
cd /var/www/your-app
git pull origin main
composer install --no-dev --optimize-autoloader
メリット:
- 本番環境に最適化
- アップロード時間短縮
- 環境に応じた最適なライブラリがインストールされる
よくある疑問
Q: vendor/を削除しても大丈夫?
A: はい、大丈夫です!
# 削除
rm -rf vendor/
# 復元
composer install
composer.lockがあれば完全に復元できます。
Q: composer.lockもGit管理すべき?
A: 絶対にすべきです!
- composer.json:「何が必要か」
- composer.lock:「具体的にどのバージョンを使うか」
チーム全員が同じバージョンを使うために必要です。
Q: vendorを直接編集していい?
A: 絶対にダメです!
# composer installで変更が失われる
composer install
# 直接編集した内容がリセットされる😱
まとめ
| 要素 | 役割 | Git管理 |
|---|---|---|
| vendor/ | 外部ライブラリの実体 | ❌ (.gitignoreで除外) |
| composer.json | 必要なライブラリの定義 | ✅ |
| composer.lock | 具体的なバージョン情報 | ✅ |
覚えておきたいポイント
- vendor/ = 外部ライブラリの倉庫
- Git管理はしない(.gitignore)
- composer installでいつでも復元可能
- チーム開発ではcomposer.lockを共有
- 本番環境ではサーバー側でインストール
さいごに
vendorフォルダの仕組みを理解すると、以下のことがスムーズになります:
- チーム開発での環境統一
- 本番環境へのデプロイ
- ライブラリの管理とアップデート
- トラブルシューティング
Laravel開発をより楽しく、効率的に進めるための基礎知識として、ぜひ活用してください!
他にもLaravel開発で疑問に思うことがあれば、コメントで教えてくださいね🚀
Discussion