16 |
laravelによるスキャフォールディング |
imfyOm labsのジェネレータによるスキャフォールディング
Laravelは困りものです。標準のスキャフォールディングが存在しないようです。またLaravel自体の版数も頻繁に上がるたびに完全互換性は無いため、しばしば動作しなくなります。そのため、Laravelによるスキャフォールディングはかなり苦労しました。
最終的にうまくいった、imfyOm labsが開発したlaravel generatorによるスキャフォールディングを紹介します。
ghがインストールされていなければ、以下によりインストールします。太字が入力部分です。
$ sudo dnf install gh
次にgithubトークンが必要なため、githubにログインして、Settings->Developer settings->Personal access tokens->Tokens (classic)により、トークンを取得します。これを環境変数GH_TOKENにセットして、ghを実行します。
$ export GH_TOKEN='xxxxxxxxxxxxx'
$ gh repo clone InfyOmLabs/adminlte-generator example-app
composerをアップデートして、様々なライブラリをインストールします。
$ cd example-app
$ composer update
データベースアクセス可能なように、.env.exampleを.envにコピーし、mysqlのルートパスワードを修正します。
DB_PASSWORD=mysqlルートパスワード
データベース名laravelを作成します。
$ mysql -u root -pmysqlルートパスワード -e 'create database laravel'
アプリケーションのキーを挿入します。これは無くても動作はしますが、セキュリティ上必要です。
参考:https://qiita.com/yk2220s/items/dcbf54c6d1f33a0cb06f
$ php artisan key:generate
モデル名にCategory(単数形)を設定し、コンソールからテーブル定義を入力します。
$ php artisan infyom:api Category <<EOF1
name string text
required
exit
y
EOF1
モデル名にDoc(単数形)を設定し、コンソールからテーブル定義を入力します。
$ php artisan infyom:api Doc <<EOF2
title string text
required|max:512
pages integer text
required|numeric
link string text
required
category_id bigInteger:unsigned:foreign,categories,id select
required|numeric
exit
y
EOF2
マイグレーションを行い、データベースを作成します。laravel固有のメンバが必要なので、既存のデータベースからモデルを作成するよりもこの方法を推奨します。
$ php artisan migrate
これによりmysqlのlaravelデータベースの下にdocsテーブルとcategoriesテーブルが作成されます。テーブルの命名規則は複数形と定まっています。
作成したテーブルからモデルを作成します。
$ php artisan infyom:scaffold Category --fromTable --tableName=categories <<EOF3
y
EOF3
$ php artisan infyom:scaffold Doc --fromTable --tableName=docs <<EOF4
y
EOF4
ルーティング制御であるroutes/web.phpに対してモデルへのルーティングが、以下のように追加されます。
Route::resource('docs', AppHttpControllersDocController::class);
Route::resource('categories', AppHttpControllersCategoryController::class);
ディレクトリの書き込み許可を出します。
$ chmod 777 storage/logs/
chmod 777 storage/framework/sessions/
chmod 777 storage/framework/views/
chmod 777 storage/framework/cache/data/
http://localhost/publicをアクセスし、右上のRegisterからユーザ登録を行います。