トラブルシューティングガイド
Laravel Spectrumを使用する際によくある問題とその解決方法を説明します。
🚨 よくある問題
ルートが検出されない
症状
php artisan spectrum:generate
# 出力: No routes found matching the configured patterns.
原因と解決方法
-
ルートパターンの確認
// config/spectrum.php
'route_patterns' => [
'api/*', // 正しい
'/api/*', // スラッシュ不要
], -
ルートキャッシュのクリア
php artisan route:clear
php artisan route:cache -
ルート登録の確認
php artisan route:list --path=api
-
名前空間の問題
// RouteServiceProvider.php
protected $namespace = 'App\\Http\\Controllers';
バリデーションが検出されない
症状
FormRequestを使用しているのに、パラメータがドキュメントに表示されない。
解決方法
-
タイプヒントの確認
// ❌ 間違い
public function store(Request $request)
// ✅ 正しい
public function store(StoreUserRequest $request) -
FormRequestの構造確認
class StoreUserRequest extends FormRequest
{
public function authorize()
{
return true; // falseだと解析されない
}
public function rules()
{
return [
'name' => 'required|string',
// ...
];
}
} -
インラインバリデーションの場合
public function store(Request $request)
{
// メソッドの最初に配置
$validated = $request->validate([
'name' => 'required|string',
]);
}
メモリ不足エラー
症状
Fatal error: Allowed memory size of 134217728 bytes exhausted
解決方法
-
一時的な解決
php -d memory_limit=1G artisan spectrum:generate
-
恒久的な解決
// php.ini
memory_limit = 512M -
最適化コマンドの使用
php artisan spectrum:generate:optimized --chunk-size=50
-
不要なルートの除外
'excluded_routes' => [
'telescope/*',
'horizon/*',
'_debugbar/*',
],
ファイルアップロードが正しく表示されない
症状
ファイルフィールドが通常の文字列として表示される。
解決方法
-
バリデーションルールの確認
'avatar' => 'required|file|image|max:2048',
'document' => 'required|mimes:pdf,doc,docx',
'images.*' => 'image|max:1024', -
Content-Typeの確認
// FormRequestに追加
public function rules()
{
return [
'file' => 'file', // 最低限 'file' ルールが必要
];
}
レスポンス構造が検出されない
症状
APIリソースを使用しているのに、レスポンススキーマが空。
解決方法
-
リターン文の確認
// ❌ 間違い
return response()->json(new UserResource($user));
// ✅ 正しい
return new UserResource($user); -
リソースクラスの確認
class UserResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
// 必ずデータを返す
];
}
}
認証が適用されない
症状
認証が必要なエンドポイントなのに、ドキュメントに認証情報が表示されない。
解決方法
-
ミドルウェアの確認
Route::middleware('auth:sanctum')->group(function () {
Route::get('/profile', [ProfileController::class, 'show']);
}); -
設定の確認
// config/spectrum.php
'authentication' => [
'middleware_map' => [
'auth:sanctum' => 'bearer',
'auth:api' => 'bearer',
'auth' => 'bearer',
],
],
🔍 デバッグ方法
詳細ログの有効化
// config/spectrum.php
'debug' => [
'enabled' => true,
'log_channel' => 'spectrum',
'verbose' => true,
],
デバッグコマンド
# 特定のパターンで生成してデバッグ
php artisan spectrum:generate --pattern="api/users/*" -vvv
# 詳細な出力
php artisan spectrum:generate -vvv
# ドライラン(ファイル生成なし)
php artisan spectrum:generate --dry-run
ログファイルの確認
# Laravel ログ
tail -f storage/logs/laravel.log
# Spectrum専用ログ
tail -f storage/logs/spectrum.log
⚠️ エラーメッセージ対処法
"Class not found" エラー
# Composerオートロードの再生成
composer dump-autoload
# キャッシュのクリア
php artisan cache:clear
php artisan config:clear
"Cannot redeclare class" エラー
# opcacheのリセット
php artisan opcache:clear
# または開発環境でopcacheを無効化
# php.ini
opcache.enable=0
パーミッションエラー
# ストレージディレクトリの権限設定
chmod -R 775 storage
chmod -R 775 bootstrap/cache
chown -R www-data:www-data storage
# SELinuxの場合
semanage fcontext -a -t httpd_sys_rw_content_t "/path/to/storage(/.*)?"
restorecon -Rv /path/to/storage
🛠️ 環境別の問題
Docker環境
# Dockerfile
RUN apt-get update && apt-get install -y \
libzip-dev \
zip \
&& docker-php-ext-install zip
# メモリ制限の設定
RUN echo "memory_limit=512M" > /usr/local/etc/php/conf.d/memory.ini
Laravel Sail
# Sailコンテナ内で実行
sail artisan spectrum:generate
# メモリ不足の場合
sail php -d memory_limit=1G artisan spectrum:generate
Homestead/Vagrant
# Homestead.yaml
sites:
- map: api.test
to: /home/vagrant/api/public
php: "8.2"
params:
- key: memory_limit
value: 512M
💻 IDE関連の問題
PhpStorm
FormRequestが認識されない場合:
- File → Invalidate Caches / Restart
- Laravel IDEヘルパーの再生成:
php artisan ide-helper:generate
php artisan ide-helper:models
VSCode
拡張機能の推奨:
- PHP Intelephense
- Laravel Extension Pack
- Laravel Blade Snippets
🚀 パフォーマンス問題
生成が遅い
-
キャッシュの有効化
'cache' => [
'enabled' => true,
], -
並列処理の使用
php artisan spectrum:generate:optimized
-
不要な機能の無効化
'features' => [
'example_generation' => false,
'deep_analysis' => false,
],
ファイルサイズが大きすぎる
-
出力の分割
php artisan spectrum:generate --split-by-tag
-
不要な情報の除外
'output' => [
'include_examples' => false,
'include_descriptions' => false,
],
📞 サポート
問題が解決しない場合
-
イシューの作成
- GitHub Issues
- エラーメッセージ全文を含める
- 環境情報を記載(PHP/Laravel/Spectrumのバージョン)
-
デバッグ情報の収集
php -v > debug-info.txt
php artisan --version >> debug-info.txt
composer show wadakatu/laravel-spectrum >> debug-info.txt -
最小限の再現コード 問題を再現できる最小限のコードサンプルを提供
よくある質問(FAQ)
Q: Lumenでも使えますか?
A: はい、Lumen 10.x以降で使用できます。bootstrap/app.php
でサービスプロバイダーを登録してください。
Q: 既存のSwaggerアノテーションと併用できますか? A: 可能ですが、Laravel Spectrumはアノテーションを無視します。必要に応じて生成後に手動でマージしてください。
Q: プライベートAPIのドキュメントを生成できますか? A: はい、認証ミドルウェアがあってもドキュメントは生成されます。アクセス制御は別途実装してください。