「Failed opening required vendor/autoload.php」エラーの修正 — PHP Composer オートロードが見つからない

beginner🐘 PHP2026-03-19| PHP 7.x / 8.x、Composer 2.x、Linux / macOS / Windows、各種PHPフレームワーク(Laravel、Symfony、Slim、またはバニラPHP)

Error Message

Fatal error: require(): Failed opening required 'vendor/autoload.php'
#php#composer#autoload#vendor

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.jsoncomposer.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.jsoncomposer.lock をコピーする。

Related Error Notes