Laravel 11 で API ルートファイルが存在しない問題の解決法
📌 核心ポイント
Laravel 11 では「スリム化」方針の一環として、routes/api.php
ファイルがデフォルトでインストールされなくなりました。API ルーティングを必要とする場合は、追加設定が必要です。
問題:routes/api.php
が見つからない
React/Vue などフロントエンドフレームワークと Laravel のバックエンドを連携する際、API エンドポイントの定義に通常使用する routes/api.php
ファイルが Laravel 11 の新規プロジェクトに存在しません。これは Laravel 11 の**「アプリケーションスクルトニング」**(skeleton optimization) による新設計仕様です。
# 従来との比較(Laravel 10以前)
routes/
├── api.php # ← Laravel 11では存在しない
├── console.php
└── web.php
解決方法1:公式推奨のAPIインストールコマンド
API ルーティング機能を追加する最もシンプルな方法:
php artisan install:api
このコマンドが実行されると以下が自動的に構成されます:
routes/api.php
ファイルが新規作成bootstrap/app.php
に API ルートの登録設定が追加app/Providers/RouteServiceProvider.php
に API ミドルウェアの設定が挿入
必須確認
コマンド後に bootstrap/app.php
ファイルを開き、api ルートが次のように登録されていることを確認してください:
withRouting(
web: __DIR__ . '/../routes/web.php',
api: __DIR__ . '/../routes/api.php', // この行があるか確認
commands: __DIR__ . '/../routes/console.php',
health: '/up',
);
見つからない場合は手動で追記します
解決方法2:手動でルート設定を追加
特殊な構成(Breezeキット使用後など)で artisan install:api
が機能しない場合、bootstrap/app.php
ファイルに直接APIルートを登録する必要があります。
ステップ1:routes/api.php
の作成
touch routes/api.php
ステップ2:bootstrap/app.php
の修正
withRouting
ブロック内に API ルート定義を追加します:
return Application::configure()
->withRouting(
web: __DIR__ . '/../routes/web.php',
commands: __DIR__ . '/../routes/console.php',
health: '/up',
using: function () {
Route::middleware('web') // Webルート
->group(base_path('routes/web.php'));
// APIルートを手動で追加
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
}
);
💡 構成ミスのサイン
以下に当てはまる場合は手動設定が必要です:
- Laravel Breezeインストール後にAPI追加
- 複数のチュートリアルを組み合わせた構成
- AI生成コードによる設定ファイル混在
Docker環境でのパーミッション問題修正
artisan install:api
を実行後、APIルートが読み込まれない場合、パーミッション問題が考えられます:
# Dockerコンテナ内で実行(laravel.testはコンテナ名)
docker container exec -u 0 -it laravel.test bash
# ルートディレクトリ権限修正
chmod -R 777 /var/www/html/routes/
# Laravelキャッシュクリア
php artisan optimize:clear
まとめ:APIルート設定フロー
基本手順
bashphp artisan install:api
特殊構成時の対応
routes/api.php
手動作成bootstrap/app.php
にルート定義追記
Docker環境
- ファイルパーミッション確認
- sailコマンド経由での実行確認 (
sail artisan ...
)
✅ 最終確認事項
APIルートを正しく動作させるには必ず:
bootstrap/app.php
にapiルート定義が存在app/Providers/RouteServiceProvider.php
にミドルウェア設定 ::>
APIルート設定後は、Laravel 10以前と同じroutes/api.php
ファイルでルート定義が可能になります。
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::get('/test', function(Request $request) {
return response()->json(['message' => 'API接続成功']);
});