Windowsのファイル(C:ドライブ)をDockerコンテナ(Linux)がマウントすると、 ファイルアクセスのたびに変換が発生 Laravelはvendor/に数千〜数万のファイルがあり、それを頻繁に読む この変換処理で極端に遅くなる
・Laravel API バックエンドプロジェクト
・ローカル環境: Windows 11 + WSL2 (Ubuntu) + Docker Desktop + Laravel Sail
・プロジェクト配置: /home/wida/dev/laravel-rds (WSL2 Ubuntu内)
・配置理由: Windows ファイルシステムとの変換オーバーヘッドを回避し高速化
・データベース接続:
- ローカル開発: Docker MySQL
- レンタルサーバー: レンタルサーバーの MySQL
- AWS: Amazon RDS (MySQL) ・デプロイ先:
- レンタルサーバー: FTP/SSH でデプロイ
- AWS: EC2 または Elastic Beanstalk + RDS
・技術スタック: PHP 8.2+、Laravel 12.x、MySQL 8.0
・リポジトリ:
git@github.com:idw-coder/laravel-rds.git・ブランチ戦略: main ブランチ運用
Sanctum とGoogoleOAuth
ローカルではLaravel、MySQLはDocker Sail環境、Vueはnpm run dev で開発サーバーを使用 フロントエンド(Vue)、バックエンド(Laravel)はlightsailに Github ActionでmainブランチプッシュをトリガーにデプロイされるようCI/CDを導入 MySQLはRDSを使用
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ./vendor/bin/sail mysql bash
mysql> show tables;
+------------------------+
| Tables_in_laravel |
+------------------------+
| cache |
| cache_locks |
| failed_jobs |
| job_batches |
| jobs |
| migrations |
| password_reset_tokens |
| personal_access_tokens |
| posts |
| sessions |
| users |
+------------------------+
11 rows in set (0.00 sec)
mysql> desc posts;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| user_id | bigint(20) unsigned | NO | MUL | NULL | |
| title | varchar(255) | NO | | NULL | |
| content | text | NO | | NULL | |
| status | varchar(255) | NO | | draft | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
| deleted_at | timestamp | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
mysql> desc users;
+-------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| google_id | varchar(255) | YES | UNI | NULL | |
| name | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
| email_verified_at | timestamp | YES | | NULL | |
| password | varchar(255) | YES | | NULL | |
| remember_token | varchar(100) | YES | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+-------------------+---------------------+------+-----+---------+----------------+
9 rows in set (0.01 sec)
mysql> desc roles;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
| label | varchar(255) | YES | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ./vendor/bin/sail artisan route:list
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
GET|HEAD / .................................................................................................................
GET|HEAD api/auth/google ......................................................... Api\GoogleAuthController@redirectToGoogle
GET|HEAD api/auth/google/callback ............................................ Api\GoogleAuthController@handleGoogleCallback
POST api/login ........................................................................ login › Api\AuthController@login
POST api/logout .............................................................................. Api\AuthController@logout
GET|HEAD api/posts .................................................................. posts.index › Api\PostController@index
POST api/posts .................................................................. posts.store › Api\PostController@store
GET|HEAD api/posts/{post} ............................................................. posts.show › Api\PostController@show
PUT|PATCH api/posts/{post} ......................................................... posts.update › Api\PostController@update
DELETE api/posts/{post} ....................................................... posts.destroy › Api\PostController@destroy
GET|HEAD api/profile ............................................................................... Api\UserController@show
PUT api/profile ............................................................................. Api\UserController@update
GET|HEAD api/test ..........................................................................................................
GET|HEAD api/user ..........................................................................................................
GET|HEAD sanctum/csrf-cookie ............................. sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show
GET|HEAD storage/{path} ...................................................................................... storage.local
GET|HEAD up ................................................................................................................
Showing [17] routes先にディレクトリ作成してGit初期化したので別のディレクトリにインストールして、 移動しました
wida@LAPTOP-2C4PL9J8:~/dev$ curl -s "https://laravel.build/laravel-rds-temp" | bash
latest: Pulling from laravelsail/php84-composer
Digest: sha256:a2716e93e577c80bca7551126056446c1e06cb141af652ee6932537158108400
Status: Image is up to date for laravelsail/php84-composer:latest
In NewCommand.php line 789:
Application already exists!
new [--dev] [--git] [--branch BRANCH] [--github [GITHUB]] [--organization ORGANIZATION] [--database DATABASE] [--stack [STACK]] [--breeze] [--jet] [--dark] [--typescript] [--eslint] [--ssr] [--api] [--teams] [--verification] [--pest] [--phpunit] [--prompt-breeze] [--prompt-jetstream] [-f|--force] [--] <name>
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
[+] Pulling 5/5
[+] Building 839.7s (21/21) FINISHED
[+] Building 1/1
✔ laravel.test Built 0.0s
Thank you! We hope you build something incredible. Dive in with: cd laravel-rds-temp && ./vendor/bin/sail upgit push origin mainwida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ./vendor/bin/sail up -dThe stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ls -la
total 412
drwxr-xr-x 5 wida wida 4096 Nov 5 00:00 storage
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ docker compose exec laravel.test bash
root@0eeea93d3466:/var/www/html# chmod -R 777 storage bootstrap/cache
root@0eeea93d3466:/var/www/html# exit
exit
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ls -la
total 412
drwxrwxrwx 5 wida wida 4096 Nov 5 00:00 storage
コンテナ起動してhttp://localhostにアクセスすると下記のエラー
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.sessions' doesn't exist
原因はセッションテーブルがない存在しない 対応は2通り
- セッションテーブルの作成 デフォルトでセッションテーブル用のmigrationファイルがあるので下記でOK
./vendor/bin/sail artisan migrate
もしくは
docker compose exec laravel.test php artisan migrate- セッションの保存方法fileに変更する .env
# SESSION_DRIVER=database
SESSION_DRIVER=file
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ docker exec laravel-rds-laravel.test-1 php artisan make:migration create_posts_table
INFO Migration [database/migrations/2025_11_14_095149_create_posts_table.php] created successfully.作成されたファイルをVSCodeで編集しようとしたら下記
'2025_11_14_095149_create_posts_table.php' の保存に失敗しました。
十分な権限がありません。
[管理者権限で再試行] を選択して管理者として再試行してください。
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ sudo chown wida:wida database/migrations/2025_11_14_095149_create_posts_table.phpで所有者を変更
マイグレーションファイル作成コマンドをSailコマンドですれば、WWWUSERになるらしいので、
次回からはdocker exec ... php artisanは使用せず、
./vendor/bin/sail artisanを使用
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ./vendor/bin/sail artisan migrate
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
INFO Running migrations.
2025_11_14_095149_create_posts_table .......................................................................................... 48.53ms DONE./vendor/bin/sail artisan make:model Post
./vendor/bin/sail artisan make:controller PostController --api
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
INFO Model [app/Models/Post.php] created successfully.
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
INFO Controller [app/Http/Controllers/PostController.php] created successfully.API用のコントローラーを作成 下記の一般と違いcreate()とedit()がない APIはフォーム画面が不要なため
index() // 一覧表示
create() // 作成フォーム表示
store() // 保存
show() // 詳細表示
edit() // 編集フォーム表示
update() // 更新
destroy() // 削除
Laravel 11から api.php はデフォルトで作成されなくなりました。 API ルートをインストール
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ./vendor/bin/sail artisan install:api
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
./composer.json has been updated
Running composer update laravel/sanctum
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework is locked to version v12.37.0 and an update of this package was not requested.
- laravel/framework v12.37.0 requires symfony/http-foundation ^7.2.0 -> found symfony/http-foundation[v7.2.0, ..., v7.3.7] but these were not loaded, because they are affected by security advisories. To ignore the advisories, add ("PKSA-365x-2zjk-pt47") to the audit "ignore" config. To turn the feature off entirely, you can set "block-insecure" to false in your "audit" config.
Problem 2
- laravel/sail is locked to version v1.47.0 and an update of this package was not requested.
- laravel/framework v12.37.0 requires symfony/http-foundation ^7.2.0 -> found symfony/http-foundation[v7.2.0, ..., v7.3.7] but these were not loaded, because they are affected by security advisories. To ignore the advisories, add ("PKSA-365x-2zjk-pt47") to the audit "ignore" config. To turn the feature off entirely, you can set "block-insecure" to false in your "audit" config.
- laravel/sail v1.47.0 requires illuminate/console ^9.52.16|^10.0|^11.0|^12.0 -> satisfiable by laravel/framework[v12.37.0].
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
INFO Published API routes file.
One new database migration has been published. Would you like to run all pending database migrations? (yes/no) [yes]:
> yes
INFO Nothing to migrate.
INFO API scaffolding installed. Please add the [Laravel\Sanctum\HasApiTokens] trait to your User model.ルートが登録されているか確認
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ./vendor/bin/sail artisan route:list --path=api
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
GET|HEAD api/posts ............................................................................... posts.index › PostController@index
POST api/posts ............................................................................... posts.store › PostController@store
GET|HEAD api/posts/{post} .......................................................................... posts.show › PostController@show
PUT|PATCH api/posts/{post} ...................................................................... posts.update › PostController@update
DELETE api/posts/{post} .................................................................... posts.destroy › PostController@destroy
GET|HEAD api/user ...................................................................................................................
Showing [6] routes
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$Sanctum のインストール、Sanctum の設定ファイル公開
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ composer require laravel/sanctum
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ./vendor/bin/sail artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"- .env
# CORS設定
CORS_ALLOWED_ORIGINS=http://localhost:5173
CORS_ALLOWED_METHODS=*
CORS_ALLOWED_HEADERS=*
CORS_SUPPORTS_CREDENTIALS=true
# Sanctum の API トークン方式を有効
SANCTUM_STATEFUL_DOMAINS=localhost:5173
SESSION_DOMAIN=localhost
-
bootstrap\app.phpにミドルウェアを有効化するよう追記
-
app\Models\User.phpにトークンが発行できるユーザーとなるよう修正
-
AuthControllerを作成
./vendor/bin/sail artisan make:controller AuthController- Sanctumマイグレーションを実行
./vendor/bin/sail artisan migrate
- ユーザーの登録
php artisan tinker
User::create([...])
sequenceDiagram
participant V as Vue(フロント)
participant A as API(Laravel)
participant S as Sanctum(HasApiTokens)
participant DB as MySQL
%% --- ログイン ---
V->>A: POST /api/login (email, password)
A->>DB: users から User検索
DB-->>A: Userデータ
A->>A: パスワード検証 (Hash::check)
A->>S: createToken() 呼び出し
S->>S: プレーンテキストトークン生成<br>(ハッシュを作成)
S->>DB: personal_access_tokens に<br>トークンのハッシュ保存
DB-->>S: 保存成功
S-->>A: プレーンテキストトークン返却
A-->>V: { token, user }
Note over V: トークンを localStorage などに保存
%% --- 認証が必要な API 呼び出し ---
V->>A: Bearer token を付与してAPIアクセス
A->>S: トークン文字列をハッシュ化
S->>DB: personal_access_tokens で<br>ハッシュ一致するトークンを検索
DB-->>S: 一致する token レコード返却
S-->>A: トークンは有効 = 認証成功
A-->>V: レスポンス返却
Settings → Secrets and variables → Actions 以下の Secrets を追加:
| Name | Value |
|---|---|
| SSH_PRIVATE_KEY | Lightsailで作成したもの |
| SSH_HOST | 54.178.81.51 |
| SSH_USER | ubuntu |
.github/workflows/deploy.ymlを作成
graph TB
subgraph "開発環境(ローカル)"
DevVue[Vue.js<br/>localhost:5173]
DevLaravel[Laravel<br/>Docker Sail<br/>localhost:80]
DevMySQL[MySQL<br/>Docker]
DevVue -->|API Request| DevLaravel
DevLaravel -->|DB接続| DevMySQL
end
subgraph "本番環境(AWS)"
ProdVue[Vue.js<br/>54.178.81.51:8080<br/>Lightsail + Nginx]
ProdLaravel[Laravel<br/>54.178.81.51:80<br/>Lightsail + Nginx]
ProdMySQL[MySQL 5.7<br/>RDS]
ProdVue -->|API Request| ProdLaravel
ProdLaravel -->|DB接続| ProdMySQL
end
subgraph "CI/CD(GitHub Actions)"
VueRepo[Vue Repository<br/>laravel-rds-vue]
LaravelRepo[Laravel Repository<br/>laravel-rds]
VueRepo -->|1. npm run build| VueBuild[ビルド]
VueBuild -->|2. scp| ProdVue
LaravelRepo -->|1. SSH接続| LaravelDeploy[git pull<br/>composer install<br/>キャッシュクリア]
LaravelDeploy -->|2. 更新| ProdLaravel
end
Dev[開発者] -->|git push| VueRepo
Dev -->|git push| LaravelRepo
Dev -->|ローカル開発| DevVue
style DevVue fill:#42b883
style DevLaravel fill:#ff2d20
style DevMySQL fill:#4479a1
style ProdVue fill:#42b883
style ProdLaravel fill:#ff2d20
style ProdMySQL fill:#4479a1
Users テーブルにマイグレーションを作成
./vendor/bin/sail artisan make:migration add_google_fields_to_users_tableGoogle 認証用のコントローラーを作成
./vendor/bin/sail artisan make:controller Api/GoogleAuthControllerその他関連ファイルを修正
%% 認証システム全体のフロー図
graph TB
Start[ユーザーがログイン画面にアクセス]
Start --> Choice{ログイン方法を選択}
%% メール・パスワードログインフロー
Choice -->|メール・パスワード| EmailInput[メールアドレス<br/>パスワード入力]
EmailInput --> EmailSubmit[POST /api/login]
EmailSubmit --> CheckUser{users テーブルで<br/>ユーザー検索}
CheckUser -->|見つからない| EmailError1[エラー: ユーザーが<br/>存在しません]
CheckUser -->|見つかった| CheckPassword{password が<br/>NULL か?}
CheckPassword -->|NULL| EmailError2[エラー: Google で<br/>ログインしてください]
CheckPassword -->|あり| ValidatePassword{パスワードが<br/>一致するか?}
ValidatePassword -->|不一致| EmailError3[エラー: パスワードが<br/>間違っています]
ValidatePassword -->|一致| IssueToken1[トークン発行]
%% Google OAuthログインフロー
Choice -->|Google でログイン| GoogleButton[Google ボタンクリック]
GoogleButton --> GetAuthUrl[GET /api/auth/google]
GetAuthUrl --> GooglePopup[Google 認証画面<br/>ポップアップ表示]
GooglePopup --> UserAuth[ユーザーが Google で<br/>ログイン許可]
UserAuth --> GoogleCallback[GET /api/auth/google/callback]
GoogleCallback --> GetGoogleUser[Google から<br/>ユーザー情報取得<br/>- Google ID<br/>- 名前<br/>- メールアドレス<br/>- プロフィール画像]
GetGoogleUser --> SearchUser{users テーブルで<br/>google_id または<br/>email で検索}
SearchUser -->|google_id で見つかった| IssueToken2[トークン発行]
SearchUser -->|email で見つかった| UpdateGoogleId[既存ユーザーに<br/>google_id を追加]
UpdateGoogleId --> IssueToken2
SearchUser -->|見つからない| CreateUser[新規ユーザー作成<br/>- name: Google の名前<br/>- email: Google のメール<br/>- google_id: Google ID<br/>- avatar: プロフィール画像<br/>- password: NULL]
CreateUser --> IssueToken2
%% トークン発行後の共通フロー
IssueToken1 --> ReturnToken[トークン + ユーザー情報<br/>を JSON で返却]
IssueToken2 --> ReturnToken
ReturnToken --> SaveToken[Vue が localStorage に保存<br/>- token<br/>- user]
SaveToken --> Redirect[投稿一覧画面へ<br/>リダイレクト]
%% 認証済みリクエスト
Redirect --> AuthRequest[以降の API リクエスト]
AuthRequest --> SendToken[Authorization ヘッダーに<br/>Bearer トークンを付与]
SendToken --> VerifyToken[Laravel Sanctum が<br/>トークン検証]
VerifyToken --> Success[API レスポンス返却]
%% エラーハンドリング
EmailError1 --> Start
EmailError2 --> Start
EmailError3 --> Start
style Start fill:#e1f5ff
style Choice fill:#fff4e1
style IssueToken1 fill:#d4edda
style IssueToken2 fill:#d4edda
style ReturnToken fill:#d4edda
style Success fill:#d4edda
style EmailError1 fill:#f8d7da
style EmailError2 fill:#f8d7da
style EmailError3 fill:#f8d7da
style CreateUser fill:#fff3cd
style UpdateGoogleId fill:#fff3cd
./vendor/bin/sail artisan make:migration create_roles_table「ユーザー × ロール」の関係を中間テーブルで管理する https://readouble.com/laravel/10.x/ja/eloquent-relationships.html#many-to-many
./vendor/bin/sail artisan make:migration create_role_user_tableSeeder を作成する
./vendor/bin/sail artisan make:seeder RoleSeederそれに合わせてdatabase\seeders\DatabaseSeeder.phpも修正
DatabaseSeeder.phpのrun()メソッドが実行される
./vendor/bin/sail artisan migrate:fresh --seedmigrate:fresh: 全テーブルを削除して再作成(空の状態)--seed: DatabaseSeederを実行して初期データを投入
User.php roles() リレーション追加
app\Models\Role.phpを作成
インストール
composer require barryvdh/laravel-debugbar --devAPI開発ではあまり使えない?
- Debugbar UI は出ない(Vue経由のため)
- 代わりに storage/logs/debugbar/*.json を見る
composer require laravel/telescope --devTelescope の画面を使えるようにする
php artisan telescope:install実行すると、自動的に
config/telescope.php
マイグレーションファイル などが追加されます。
そのあと続けて マイグレーションを実行
./vendor/bin/sail artisan migratehttp://localhost/telescopeでブラウザで確認できる
- ユーザー登録機能の追加: 現在はGoogle認証でのみ自動登録されるため、メール・パスワードでの新規登録機能(
registerメソッド)をAuthControllerに追加する。これにより、Googleアカウントを持たないユーザーも登録可能になる。 - 認証方法の統一: メール・パスワード登録とGoogle認証の両方をサポートし、ユーザーが選択できるようにする。既存ユーザーが後からGoogle認証を紐付けたり、Google認証ユーザーがパスワードを設定できるようにする。
ルート一覧を確認
wida@LAPTOP-2C4PL9J8:~/dev/laravel-rds$ ./vendor/bin/sail artisan route:list
WARN[0001] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
WARN[0000] The "MYSQL_EXTRA_OPTIONS" variable is not set. Defaulting to a blank string.
GET|HEAD / ..........................................................................................................................
GET|HEAD api/auth/google .................................................................. Api\GoogleAuthController@redirectToGoogle
GET|HEAD api/auth/google/callback ..................................................... Api\GoogleAuthController@handleGoogleCallback
POST api/login ................................................................................. login › Api\AuthController@login
POST api/logout ....................................................................................... Api\AuthController@logout
GET|HEAD api/posts ........................................................................... posts.index › Api\PostController@index
POST api/posts ........................................................................... posts.store › Api\PostController@store
GET|HEAD api/posts/{post} ...................................................................... posts.show › Api\PostController@show
PUT|PATCH api/posts/{post} .................................................................. posts.update › Api\PostController@update
DELETE api/posts/{post} ................................................................ posts.destroy › Api\PostController@destroy
GET|HEAD api/profile ........................................................................................ Api\UserController@show
PUT api/profile ...................................................................................... Api\UserController@update
GET|HEAD api/test ...................................................................................................................
GET|HEAD api/user ...................................................................................................................
GET|HEAD sanctum/csrf-cookie ...................................... sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show
GET|HEAD storage/{path} ............................................................................................... storage.local
GET|HEAD up .........................................................................................................................
Showing [17] routes上記について表にまとめると
| メソッド | URI | ルート名(識別子) | コントローラーのメソッド名 | コントローラー(クラス) |
|---|---|---|---|---|
| GET|HEAD | / | - | - | - |
| GET|HEAD | api/auth/google | - | redirectToGoogle | Api\GoogleAuthController |
| GET|HEAD | api/auth/google/callback | - | handleGoogleCallback | Api\GoogleAuthController |
| POST | api/login | login | login | Api\AuthController |
| POST | api/logout | - | logout | Api\AuthController |
| GET|HEAD | api/posts | posts.index | index | Api\PostController |
| POST | api/posts | posts.store | store | Api\PostController |
| GET|HEAD | api/posts/{post} | posts.show | show | Api\PostController |
| PUT|PATCH | api/posts/{post} | posts.update | update | Api\PostController |
| DELETE | api/posts/{post} | posts.destroy | destroy | Api\PostController |
| GET|HEAD | api/profile | - | show | Api\UserController |
| PUT | api/profile | - | update | Api\UserController |
| GET|HEAD | api/test | - | - | - |
| GET|HEAD | api/user | - | - | - |
| GET|HEAD | sanctum/csrf-cookie | sanctum.csrf-cookie | show | Laravel\Sanctum\CsrfCookieController |
| GET|HEAD | storage/{path} | storage.local | - | - |
| GET|HEAD | up | - | - | - |