Laravel 5.8を使用しています。
ブラウザ拡張機能のClockworkでデバッグ
Laravelのデバッグは「Laravel Debugbar」が広く使われていますが、これはViewにデバッグ情報を描画するので、ViewのないAPI開発には微妙だったりします。
そこでおすすすめなのが、Chrome/Firefoxの拡張機能の「Clockwork」です。
ブラウザの拡張機能は、それぞれ下記からダウンロードします。
Google Chrome / Firefox
拡張機能の他にコンポーザーでライブラリをインストールする必要があります。
$ composer require itsgoingd/clockwork
Laravelのバージョンが5.6以上ならこれだけで使用できますが、5.5以下ならconfig/app.php
にproviders
とaliases
を追加します。
config/app.php
- 'providers' => [
- ...
- Clockwork\Support\Laravel\ClockworkServiceProvider::class
- ]
- 'aliases' => [
- ...
- 'Clockwork' => Clockwork\Support\Laravel\Facade::class
- ]
Chromeのデベロッパーツールを開くとClockwork
というタブが追加されています。
さらにその中のDatabase
タブを開くとクエリーの確認をすることができます。

ライブラリをインストールするとclock
というヘルパーが使用できるようになります。
これはdd
のような感じに変数を確認することができます。
- clock(User::all());
Log
タブに変数が展開されます。

Clockwork
最近だと Telescope もよさそうですがどうなんでしょう。
Laravel Telescope
ルーティングはapiResourceで一括設定
CRUDのルーティングを設定したいときはRoute::resource('users', 'UsersController')
のように指定すると、まとめて設定できるのですが、create
とedit
はView用のルーテイングなのでSPAでは不要ですね。
純粋なAPIで使用するCRUDの場合はapiResource
を使用します。
- Route::apiResource('users', 'UsersController');
これで、index,store,show,update,destroy
が使用できるようになります。
複数のコントローラーをまとめて指定する場合はapiResources
を使用します。
- Route::apiResources([
- 'tasks' => 'Api\TaskController',
- 'users' => 'Api\UserController'
- ]);
jsonの形成はApiResourceを使おう
単純なデータを表示したい場合は基本モデルをreturnするだけでjsonを返してくれます。
- public function show(User $user)
- {
- return $user;
- }
ただ、リレーションも表示した場合、Viewファイルだったら深く考えないでも表示できましたが、SPAの場合はコントローラーで加工しないといけないのかと思ったのですが、ApiResourceというので加工できます。
Artisanでリソースファイルを作成します。
$ php artisan make:resource UserResource
例えば、id、nameだけ欲しい場合は下記のようになります。
app/Http/Resources/UserResource.php
- <?php
- namespace App\Http\Resources;
- use Illuminate\Http\Resources\Json\JsonResource;
- class UserResource extends JsonResource
- {
- public function toArray($request)
- {
- return [
- 'id' => $this->id,
- 'name' => $this->name
- ];
- }
- }
コントローラーで一つだけ返す場合はmake
を使います。
- return UserResource::make($user);
複数(配列で)返す場合collection
を使います。
- return UserResource::collection($users);
これはリソースファイルでも使えるので、リレーションを返したい場合は下記のような記述になります。
- public function toArray($request)
- {
- return [
- 'id' => $this->id,
- 'title' => $this->title,
- 'user' => UserResource::make($this->user)
- ];
- }
プロパティのキャスト
例えばidでINTカラムの場合でも、フロントからStringとして送信するとStringで返してしまいます。
モデルでキャストを設定しておくと、指定した型で必ず返すので安心です。
- class Task extends Model
- {
- protected $casts = [
- 'project_id' => 'integer'
- 'due_at' => 'datetime'
- ];
- }