Laravelでいろいろなハンズオン形式の練習をしていくにあたり、
アプリ作成からテーブル作成まで、毎回ちょっと調べるのが面倒になってきたのでまとめます。
前提環境/どんな方向け?
・mac OS 10.15(10.14や10.13でも大きな違いはなし)
・MAMPをmacにインストール済みであること。
・ターミナル操作がわからないこともないこと。
・Laravelはmacにインストール済みであること。
・composerも入れていること。
という感じで、しょっぱなからの説明ではなく、過去にlaravelをmampで構築されており、ローカル環境で新しくアプリを作る方向け(主に自分の備忘録)です。
手順
1.Laravelアプリを作る
まずはアプリ作成。「todoLife」というアプリを作る場合は下記の手順。
ターミナルで、
composer create-project "laravel/laravel=5.8.*" todoLife
※バージョン指定は任意です。不要な場合は「laravel/laravel」でokです。
ここでは5.8の中の最新版を指定してみます。
また、このコマンドを行うことで、「今いる場所」にフォルダ/プロジェクトを作ります。
例えばデスクトップに「todoLife」というフォルダを作り、その中にcdで移動して上記のコマンドを実行すると
desuktop/todoLife/todoLife (← laravelのアプリ)
という感じになっちゃいます。
ので、desktopに作りたい場合はデスクトップに移動して実行しましょう。
(この後すぐmamp内に移動しますが)
2.MAMP内に移動
作ったララベルプロジェクトをmampの中のhtdocsに移動しましょう。
具体的には下記のような配置となります。
Macintosh ハードディスク/Applications/MAMP/htdocs/プロジェクタフォルダ
phpデータをローカルのmampで表示、動作させるにはこの「htdocs」の中に保管している必要があります。
3.DBを作る
MAMPで予めDBを作っておきます。
開発環境ではあるので大体でもいいかもですが、アプリ名と同じにしているケースが多いです。
MAMPの中でnewから作成しましょう。
※照合順序は「utf8_general_ci」でokです。
4.テーブルを作る
手動でMAMP内で作ってもいいですが、ここではlarabelのマイグレーション機能で作ってみます。今回作るのはシンプルに「todo」のテーブル「todos」です。
※なお、laravelのプロジェクト > database > migrations の中にデフォルトで存在している
2014_10_12_000000_create_users_table.php
2014_10_12_100000_create_password_resets_table.php
は、ユーザーテーブルやパスワードリセットが不要ならば削除しても問題ないです。
マイグレーションとは?
マイグレーションを行うことにより、このmigrationsファイルの中の「up()」の処理を実施します。
この後マイグレーションファイルの中身を見ますが、これらのファイルのupでは、テーブルを作るという処理が書かれています。
そのため、デフォルトの状態でマイグレーションをすると、前述の既存の二つのファイルにより、「ユーザーテーブル」と、「パスワードリセットのテーブル」が作られる、ということになります。
今回はそのままにしておき、マイグレーションファイルを別途作ります。
作る方法は、ターミナルでプロジェクトフォルダのトップにいるときに
php artisan make:migration create_todos_table --create=todos
と実施します。
ここで中盤と最後にある「todos」が、作成するファイル名、テーブル名になります。
テーブル名は通常複数形として作成する必要があります。postなら「posts」などです。
次にmigrationsの中にできた記述を見てみましょう。こんな関数ができているはずです。
class CreateTodosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('todos', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('todos');
}
}
up()が、migration実行時に作られるテーブルの情報、そして
down()がやっぱその処理をやめるときに巻き戻す(ロールバック時に)実行される処理です。
今回、各todosには題名と本文をつけたいので、こんな感じでtitle、bodyテーブルを作る記述を追加します。
public function up()
{
Schema::create('todos', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title',50);//追加
$table->text('body');//追加
$table->timestamps();
});
}
それでは、下記の手順でマイグレートを実行します。
php artisan migrate
5.環境設定
DBとの接続設定をまだ行っていませんでした。
その辺の環境設定は.envファイルで行います。
.envはプロジェクトのトップディレクトリ直下に存在しています。
いじるのはこの辺。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=todoLife //アプリ名に変更
DB_USERNAME=root
DB_PASSWORD=root //パスワードを設定。mamp側でDBにログインするためのユーザーごとのid、パスワードを設定します。
config/app.php
config/database.php
というファイルも編集します!
//app.php
//タイムゾーンと言語設定を変更しておきましょう。
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
//database.php
//database名、ユーザーネーム、パスワード、unix_socketを修正します。
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'todoLife'),//修正
'username' => env('DB_USERNAME', 'root'),//修正
'password' => env('DB_PASSWORD', 'root'),//修正
'unix_socket' => env('DB_UNIX_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),//修正
6.もう一度マイグレーション
mampを見てもちゃんとtodos、users、passwordresetテーブルがつくられています。
終わり!
おまけ
マイグレーションしてなくても見れますが、プロジェクトフォルダでphp artisan serveして、
mampを起動しておけばlaravelの起動も確認できます!