TL;DR — クイックフィックス
プロジェクトルート(composer.json があるフォルダ)で composer install を実行してください。これにより vendor/ ディレクトリと不足している autoload.php が再作成されます。
cd /path/to/your/project
composer install
composer コマンドがない場合は、先に Fix 3 へ進んでください。
このエラーが発生する原因
エラーの全文はこのようになります:
Fatal error: require(): Failed opening required '/var/www/html/vendor/autoload.php'
(include_path='.:/usr/share/php') in /var/www/html/index.php on line 3
PHP が require __DIR__ . '/vendor/autoload.php'; のような行を処理しようとしたとき、ファイルが存在しない状態です。主な原因は4つあります:
- vendor/ が一度も作成されていない — リポジトリをクローンしたが
composer installをスキップした。これが最も多い原因です。 - vendor/ が意図的に除外されている —
.gitignoreによってvendor/がバージョン管理から除外されているため、フレッシュクローン後には存在しません。 - 作業ディレクトリが間違っている — スクリプトが
composer.jsonとは異なるフォルダから実行されており、相対パスが壊れています。 - オートロードマップが古い — 新しいクラスや PSR-4 名前空間を追加したが、
dump-autoloadでオートローダーを再生成していない。
修正手順
Fix 1 — composer install を実行する(最も一般的)
composer.json があるフォルダに移動して実行します:
composer install
Composer がすべての依存関係を vendor/ にダウンロードし、autoload.php を生成します。開発用パッケージが不要な本番サーバーでは:
composer install --no-dev --optimize-autoloader
Fix 2 — 正しいディレクトリにいるか確認する
エラーメッセージには PHP が参照しようとした場所が正確に示されています。/var/www/html/vendor/autoload.php と表示されている場合、composer.json が実際に /var/www/html/ にあるか確認してください:
ls /var/www/html/composer.json
composer.json が一つ上のディレクトリ(例:/var/www/)にある場合、PHP ファイル内の require パスが間違っています。修正方法:
// 間違い — 誤ったディレクトリを指している
require __DIR__ . '/vendor/autoload.php';
// 正しい — 一つ上のレベルに移動する
require __DIR__ . '/../vendor/autoload.php';
迷った場合は、composer.json の場所から導き出した絶対パスを使用してください。絶対パスは嘘をつきません。
Fix 3 — Composer がない場合はインストールする
command not found: composer が表示される場合は、グローバルにインストールしてください:
# Linux/macOS
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
# バージョン確認
composer --version
Ubuntu/Debian ユーザーはショートカットを使えます:
sudo apt install composer
注意点として、apt パッケージは上流より古いバージョンになりがちです。Composer 2.x を使用する場合は、curl によるインストール方法がより確実です。
Fix 4 — クラス追加後にオートロードマップを再生成する
vendor/ は存在するが特定のクラスが見つからない場合、オートロードマップが古い可能性があります。Composer に知らせずに新しいコードを追加しています:
composer dump-autoload
# 本番環境向けの最適化されたクラスマップ(クラス解決が高速になる)
composer dump-autoload --optimize
Fix 5 — Composer をブロックしているパーミッションを修正する
共有ホスティングや Docker コンテナ内では、プロジェクトディレクトリへの書き込みができない場合に composer install がサイレントで失敗することがあります。まず所有者を確認してください:
# ファイルの所有者を確認
ls -la /var/www/html/
# 所有権を修正(www-data を実際の Web ユーザーに置き換えてください)
sudo chown -R www-data:www-data /var/www/html/
# 再試行
composer install
Fix 6 — CI/CD と Docker に組み込む
vendor/ はコミットされないため、自動化パイプラインでは自分で composer install を実行する必要があります。最小限の Dockerfile:
FROM php:8.2-fpm
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .
ソースコードの残りをコピーする前に composer.json と composer.lock をコピーしてください。Docker はそのインストールレイヤーをキャッシュし、この2ファイルが変更されていない場合は以降のビルドでスキップします。大規模プロジェクトでは大幅な時間節約になります。
GitHub Actions の場合:
- name: Install PHP dependencies
run: composer install --no-dev --prefer-dist --optimize-autoloader
確認方法
簡単なサニティチェック — autoload.php は存在しますか?
ls vendor/autoload.php
# vendor/autoload.php
アプリケーションをリロードしてください。CLI スクリプトの場合:
php index.php
まだエラーが表示される場合は、PHP ファイル内の require パスが間違った場所を指している可能性があります。実際にディスク上の vendor/autoload.php がある場所と比較してください。
再発防止策
composer.lockはコミットし、vendor/は絶対にコミットしない。vendor/を.gitignoreに追加する — バージョン管理に含めるべきではありません。- README のセットアップセクションに
composer installを記載する。将来のコントリビューターが感謝してくれるでしょう。 - Docker では、依存関係レイヤーが適切にキャッシュされるよう、ソースファイルより先に
composer.jsonとcomposer.lockをコピーする。

