Laravel公式にあるクイックスタートは2017年9月現在では古く、Laravel 5.5ではディレクトリ構造が異なっているなどして、スムーズに進められません。
他の良いチュートリアルとして、Laravel 5.2までドキュメントに含まれている「基本のタスクリスト」があります。
そこでこの記事では、Laravelに入門する方を対象に、そのチュートリアルをLaravel 5.5で行う方法を順を追って紹介します。
記事は次の3回に別れており、本記事は1つ目の記事です。
- Laravel 5.5 入門として「基本のタスクリスト」を作成する [その1]
- Laravel 5.5 入門として「基本のタスクリスト」を作成する [その2]
- Laravel 5.5 入門として「基本のタスクリスト」を作成する [その3]
なお、本記事中のLaravelドキュメントへのリンクは、有志の方が作成している日本語訳へリンクしています。
翻訳を公開してくださっている川瀬裕久さんに感謝です。
チュートリアルでは、次の画像のような、タスクリストの機能を持つWebアプリを作成します。
以下の説明はMacOS Sierra環境で、データベースにはmysqlを使います。
前準備
composer
composer をインストールしていない場合は、brewなどでインストールします。
brew install homebrew/php/composer
mysql
mysqlが入っていない場合には、インストールします。
$ brew install mysql
続いて、一時的にmysqlを実行する場合には、次のコマンドでmysqlを起動。
$ mysql.server start
あるいは、サービスとして実行する場合には、次のコマンドでmysqlをサービスとして登録。
$ brew services start mysql
$ brew services list
2行目で、正しく登録されたか確認できます。
次にチュートリアル用のデータベース”homestead”を作成します。
デフォルトでルートパスワードなしで登録されていますから、次のコマンドでmysqlに接続できます。
$ mysql -uroot
次のSQLコマンドでデータベースを作ります。
mysql> create database homestead;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| homestead |
+--------------------+
mysql> show tables from homestead;
Empty set (0.00 sec)
mysql> exit
Bye
データベースの中身は空のままで構いません。
なお、データベースを削除するには、
drop database <データベース名>;
を使います。
Laravelをインストール
次のコマンドで、Laravelフレームワークをインストールします。
create-projectは、git cloneやsvn checkoutを行った後、composer installをするのと同じです。
$ composer create-project laravel/laravel quickstart --prefer-dist
すると実行パスの下に、quickstartディレクトリが作成され、そこにLaravelがインストールされます。
ディレクトリ名は任意で、quickstart以外でも構いません。–prefer-distオプションは、安定版やリリース版を優先的に選択します。
artisanコマンドでlaravelのバージョンを確認しておきます。
$ cd quickstart
$ php artisan --version
Laravel Framework 5.5.3
artisanはアーティザンと読みます。職人という意味です。ルートディレクトリに配置されているphpプログラムであり、開発で役立つコマンドを提供しています。
データベースの設定
次にデータベースの設定をします。
コンフィグファイル
quickstart/.env
を編集します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
となっている部分のユーザー名とパスワードを、自らの環境に合うように次のように変更します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=null
テーブルの定義
本アプリケーション「基本のタスクリスト」では、タスク情報はデータベースにテーブルを作成して保存することにします。
Laravelには、定義ファイルを元にしてテーブルを作成する機能があります。
定義ファイルを作っておけば、php artisan migrationというコマンドをひとつ打つだけで、データベースにテーブルが作成されます。
これにより、アプリケーションをインストールするたびに管理者が直接データベースを操作する必要がなくなります。
定義ファイルを使用して、初期テーブルをデータベースに作成することをマイグレーション(migration: 移住)と言います。
まずは定義ファイルのテンプレートを作成しましょう。
Laravelでは、artisanのmakeコマンドでマイグレーションファイルのテンプレートを生成させることができます。
次のコマンドで、新しいtasksテーブルを作成するcreate_tasks_tableマイグレーションファイルが作成されます。
$ php artisan make:migration create_tasks_table --create=tasks
Created Migration: 2017_09_14_042531_create_tasks_table
create_tasks_tableはマイグレーションファイル名で、–createオプションではテーブル名を指定します。
詳しいコマンドの使用方法やオプションの意味については、次のようにhelpを使うと参照できます。
php artisan help make:migration
あとで説明しますが、ここでのテーブル名は複数形にしておくと良いでしょう。
database/migration以下に、2017_09_14_042531_create_tasks_table.phpが作成されます。
作成日時が付加されますが、マイグレーションを実行した際には日時の順にマイグレートされます。
ファイルを眺めてみると、up関数でtasksテーブルが作成されることが分かります。tasksテーブルには、主キーとしてid(自動インクリメント)は定義済みです。
ここで、タスク名もテーブルに保存できるように、ファイルに一行を追加して、nameというstring型のカラムを定義します。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTasksTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up() {
Schema::create('tasks', function (Blueprint $table) {
$table->increments('id');
$table->string('name'); /* <---- */
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tasks');
}
}
このマイグレーションファイルを用いて、マイグレーションをします。
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrating: 2017_09_14_042531_create_tasks_table
Migrated: 2017_09_14_042531_create_tasks_table
テーブルが作成されたか確認するため、データベースに接続してみましょう。
mysql> show tables from homestead;
+---------------------+
| Tables_in_homestead |
+---------------------+
| migrations |
| password_resets |
| tasks |
| users |
+---------------------+
4 rows in set (0.00 sec)
mysql> desc homestead.tasks;
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL |
|
| created_at | timestamp | YES | | NULL |
|
| updated_at | timestamp | YES | | NULL |
|
+------------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select * from homestead.tasks;
Empty set (0.00 sec)
確かにtasksテーブルが作成され、nameカラムが作成されています。
データモデルの定義
Laravelでは、データベースとのデータのやりとりはEloquent object-relational mapper(ORM)という機能を介して行います。
Eloquentを使うことで、データベースとのやり取りが楽になります。
ここでは、Eloquentを介して扱うデータを、モデルとして定義します。
では、Taskモデルを定義しましょう。
モデル定義ファイルのテンプレートも、artisanで作成できます。
$ php artisan make:model Task
Model created successfully.
次のような空のTaskクラスを持つapp/Task.phpが作成されます。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
//
}
これは空のクラスのままでこれ以上いじる必要がありません。
このクラスでは、データベースとの対応は明示的に定義していませんが、その場合にはクラス名を複数形(かつスネークケース)にした”tasks”テーブルと対応させられることになります。
これがテーブル名を複数形にした理由です。
ちなみに、Taskモデルの定義で -mオプションをつけて、「php artisan make:model Task -m」とすると、対応するtasksテーブルを作成するマイグレーションファイルも同時に作成されます。
今回はマイグレーションファイルは前項で別途作成しましたが、慣れた場合はこちらの方法でも良いでしょう。
routeの定義
ユーザがURLにアクセスした場合に定義された処理(Webページを表示する、タスクを登録するなど)が実行されますが、そのURLのことをroute(ルート)と呼びます。
Laravel 5.5では、routes/web.phpで定義されています。(Laravel 5.2ではapp/Http/routes.phpで定義されていました。)
web.phpを編集して、次の3つのルートを作成します。
- 全タスクをリスト表示するルート
- 新しいタスクを追加するルート
- 既存のタスクを削除するルート
ひとまず無名関数は空にしておきます。
<?php
use App\Task;
use Illuminate\Http\Request;
Route::get('/', function () {
//
});
Route::post('/task', function (Request $request) {
//
});
Route::delete('/task/{task}', function (Task $task) {
//
});
Routeのget(), post()メソッドは、それぞれGET, POSTで送られてきたデータを扱います。
DELETEのリクエストは送られて来ませんが、ここではdeleteとしておきます。Laravelに、POSTリクエストをDELETEリクエストとして見せかける方法があり、後ほどその処理を記述します。
ここまでの確認
ここまで、次の作業を行いました。
- アプリケーションで使用する空のデータベースhomesteadを作成
- タスクを保存するTasksテーブルをマイグレーションファイルに定義
- マイグレーション
- 空のTaskモデルを定義
- 3つの空のルートを作成
ここまで作成したものを動作させてみましょう。次のコマンドで簡易httpサーバーを立てる事ができます。
php artisan serve
ブラウザで、http://localhost:8000/へアクセスしてみます。
すると、’/’のルートが呼ばれますが、まだ空ですので、空のページが返ってくるはずです。
この後も作成を続けますが、その都度ページを確認するようにすると、完成度合いがわかりやすくて良いでしょう。
以上、Laravel 5.5 入門として「基本のタスクリスト」を作成する [その1]でした。
次の記事へ続きます。
Laravel 5.5 入門として「基本のタスクリスト」を作成する [その2]
- 掌田津耶乃 (著)
- 秀和システム
- 価格¥5,055(2024/11/21 13:17時点)
- Amazonで口コミ・レビューを見る