install:api — APIをインストールするコマンド
artisan
TL;DR
| 何をするか |
使い方 |
| API スケルトンを自動生成 |
php artisan install:api |
| 認証付き API が欲しい場合 |
php artisan install:api --auth |
| リソース名を指定 |
php artisan install:api --resource=Product |
概要
install:api は、RESTful API のコントローラ、リクエスト、リソース、ルートを一括で作成する Artisan コマンドです。
--auth を付けると Laravel Sanctum がセットアップされ、トークン認証が有効になります。
生成される主なファイル
| フォルダ |
内容 |
app/Http/Controllers/Api/ |
コントローラ(CRUD) |
app/Http/Requests/Api/ |
バリデーションリクエスト |
app/Http/Resources/Api/ |
JSON レスポンスクラス |
routes/api.php |
ルーティング(api プレフィックス) |
シグネチャ
php artisan install:api [--auth] [--resource=NAME] [--namespace=NS] [--prefix=PREFIX]
| 引数 |
必須 |
既定値 |
説明 |
--auth |
いいえ |
なし |
Sanctum 認証を有効化 |
--resource |
いいえ |
null |
生成するリソース名(例: User) |
--namespace |
いいえ |
Api |
コントローラ/リクエスト/リソースの名前空間 |
--prefix |
いいえ |
api |
ルーティングの URL プレフィックス |
戻り値
例外 / 副作用
| 例外 |
内容 |
RuntimeException |
同名ファイルが存在し、上書きできない場合 |
Throwable |
Composer パッケージのインストール失敗など |
使用例
1. 最小構成
php artisan install:api
app/Http/Controllers/Api/Controller.php 生成
routes/api.php に /api/controllers の CRUD ルートが追加
2. 実務例:認証付き商品 API
php artisan install:api --resource=Product --auth --prefix=v1
| 生成ファイル |
内容 |
app/Http/Controllers/Api/ProductController.php |
CRUD |
app/Http/Requests/Api/StoreProductRequest.php |
バリデーション |
app/Http/Resources/Api/ProductResource.php |
JSON レスポンス |
routes/api.php |
Route::apiResource('v1/products', ProductController::class)->middleware('auth:sanctum'); |
よくある落とし穴
| 状況 |
原因 |
対策 |
| 既存ファイルが上書きされる |
同名ファイルが存在 |
コマンド実行時に確認メッセージが表示されるので、Y か N を選択 |
| マイグレーションが競合 |
生成マイグレーションと既存テーブルが同名 |
マイグレーションファイル名を手動で調整 |
| 認証ミドルウェアが無効 |
--auth を付けていない |
php artisan install:api --auth を実行 |
代替・関連コマンド
| コマンド |
何が違うか |
選定基準 |
make:controller |
コントローラだけを作成 |
コントローラのみが必要な時 |
make:resource |
JSON レスポースクラスだけ |
レスポンス構造を手動で構築したい時 |
passport:install |
OAuth2 認証用トークンを生成 |
OAuth2 が必要な時 |
breeze:install |
フロントエンドと API を同時に構築 |
フルスタック構成が必要な時 |
install:api は「API スケルトンを一括で生成したい」場面で最適です。
テスト例(Pest)
it('generates API skeleton', function () {
$this->artisan('install:api', ['--resource' => 'Test'])
->expectsOutput('Creating TestController...')
->expectsOutput('Creating StoreTestRequest...')
->expectsOutput('Creating TestResource...')
->assertExitCode(0);
expect(app_path('Http/Controllers/Api/TestController.php'))->toBeFile();
expect(app_path('Http/Requests/Api/StoreTestRequest.php'))->toBeFile();
expect(app_path('Http/Resources/Api/TestResource.php'))->toBeFile();
});
トラブルシュート
| エラー |
原因 |
解決策 |
Cannot write to file |
書き込み権限不足 |
chmod -R 775 storage / chmod -R 775 app |
Class not found |
PSR-4 autoload 未更新 |
composer dump-autoload |
auth:sanctum 未認証 |
Sanctum 未インストール |
composer require laravel/sanctum と php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" |
参考リンク