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 プレフィックス

戻り値

  • int
  • 0 : 成功
  • 1 : エラー

例外 / 副作用

例外 内容
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');

よくある落とし穴

状況 原因 対策
既存ファイルが上書きされる 同名ファイルが存在 コマンド実行時に確認メッセージが表示されるので、YN を選択
マイグレーションが競合 生成マイグレーションと既存テーブルが同名 マイグレーションファイル名を手動で調整
認証ミドルウェアが無効 --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/sanctumphp artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする