Webフレームワーク

Laravelの特徴/インストール/設定/開発方法(7.x系対応)

更新日

文章目的

ここではWebフレームワークとして2020/05時点でGithub Starで1番のLaravelの特徴とインストール方法について説明していきます。

Laravelの良い点

– PHPである事(CMSの王様WordPressと共通の言語&DBで開発できる)
– 動画/文章が充実してる
– 機能の革新が早い

Laravelのインストール

素でのインストール

PHPの用意

PHP 7系のインストール・設定方法
をご参照下さい


データベースの用意

MariaDBのインストール・設定方法
をご参照下さい。


Laravelのインストール

composer global require laravel/installer;

編集したいファイルを置きたい場所にcdして

PJ=プロジェクト名;
laravel new $PJ;

秘密鍵の設定

cd $PJ;
php artisan key:generate;

開発用に動かしてみるだけなら

php artisan serve;

http://127.0.0.1:8000

のURLで作動が確認できる

Laradockを使ったインストール

Laradockとは

https://laradock.io/
LaradockとはLaravelの開発に必要なサーバー群をdocker経由で利用できるようにしたセットです。

Laradockの使い方

git clone

0から開発するのなら

git clone https://github.com/Laradock/laradock.git;
cd laradock;

既にgitのフォルダを作っているのなら、その中で

git submodule add https://github.com/Laradock/laradock.git;

laradockのトップディレクトリを置いているディレクトリに移動して

PJ=プロジェクト名;
laravel new $PJ;

これで
laradock
$PJ
というディレクトリが同じ階層に出来る

動かすためにlaradock/.envファイルを作る

cd laradock;
cp env-example .env;

laradock/.envファイルのAPP_CODE_PATH_HOSTがLaravel用に作ったPJへパスが通るように設定

APP_CODE_PATH_HOST=../$PJ

更に$PJ/.envを編集して、docker系DB系等を利用する設定をする

DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

ユニークな秘密鍵を$PJ/.envに設定
$PJディレクトリ内で

php artisan key:generate;

docker環境をアップする

cd laradock;
docker-compose up -d nginx mariadb workspace;

但し
docker-compose
で立ち上げるサービスを覚えておくのは面倒なので、

#!/bin/sh
cd laradock;
docker-compose up -d nginx mariadb workspace;

と言った内容を含むshellファイルを作っておき、そっちで立ち上げる様にする。

間違えて
docker-compose -d
と打つと、利用できる全てのサービスが立ち上がり、ディスク容量等を一気に使ってしまうので。

立ち上げ終わったら
http://localhost/
でLaravelのサイトが表示される事を確認出来る。

webサーバーへのログインは

docker-compose exec workspace bash;

mariadbコンテナへのログインは

docker-compose exec mariadb bash;

mariadb自体へのログインは

docker-compose exec mariadb mysql -udefault -psecret;

その他設定ファイルの編集

$PJ/.env

必要に応じて以下の値を触ります。

APP_NAME
APP_ENV
APP_DEBUG
APP_URL
...
DB_HOST
DB_DATABASE
DB_USERNAME
DB_PASSWORD

$PJ/config/app.php

    'timezone' => 'UTC',
    'locale' => 'en',
    'faker_locale' => 'en_US',

を日本向けのサービスなら

    'timezone' => 'Asia/Tokyo',
    'locale' => 'ja',
    'faker_locale' => 'ja_JP',

に編集

Laravelのバージョン確認とバージョンアップデート

一旦作ったLaravelのバージョンは

php artisan --version;

で確認できる。

もしも古くてアップデートしたいのなら

composer update;

でアップデート出来る

Laravelが使っているライブラリ情報の確認

composer.phar show laravel/framework

と打つと、色々情報を見る事が出来る

name     : laravel/framework
descrip. : The Laravel Framework.
keywords : framework, laravel
versions : * v7.11.0
type     : library
license  : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
source   : [git] https://github.com/laravel/framework.git f4563bd2e0875c59a1f7967abdbe5cef7f240117
dist     : [zip] https://api.github.com/repos/laravel/framework/zipball/f4563bd2e0875c59a1f7967abdbe5cef7f240117 f4563bd2e0875c59a1f7967abdbe5cef7f240117
names    : laravel/framework, illuminate/auth, illuminate/broadcasting, illuminate/bus, illuminate/cache, illuminate/config, illuminate/console, illuminate/container, illuminate/contracts, illuminate/cookie, illuminate/database, illuminate/encryption, illuminate/events, illuminate/filesystem, illuminate/hashing, illuminate/http, illuminate/log, illuminate/mail, illuminate/notifications, illuminate/pagination, illuminate/pipeline, illuminate/queue, illuminate/redis, illuminate/routing, illuminate/session, illuminate/support, illuminate/testing, illuminate/translation, illuminate/validation, illuminate/view

autoload
files
psr-4
Illuminate\ => src/Illuminate/

requires
doctrine/inflector ^1.4|^2.0
dragonmantank/cron-expression ^2.0
egulias/email-validator ^2.1.10
ext-json *
ext-mbstring *
ext-openssl *
league/commonmark ^1.3
league/flysystem ^1.0.8
monolog/monolog ^2.0
nesbot/carbon ^2.17
opis/closure ^3.1
php ^7.2.5
psr/container ^1.0
psr/simple-cache ^1.0
ramsey/uuid ^3.7|^4.0
swiftmailer/swiftmailer ^6.0
symfony/console ^5.0
symfony/error-handler ^5.0
symfony/finder ^5.0
symfony/http-foundation ^5.0
symfony/http-kernel ^5.0
symfony/mime ^5.0
symfony/process ^5.0
symfony/routing ^5.0
symfony/var-dumper ^5.0
tijsverkoyen/css-to-inline-styles ^2.2.2
vlucas/phpdotenv ^4.0
voku/portable-ascii ^1.4.8

requires (dev)
aws/aws-sdk-php ^3.0
doctrine/dbal ^2.6
filp/whoops ^2.4
guzzlehttp/guzzle ^6.3.1|^7.0
league/flysystem-cached-adapter ^1.0
mockery/mockery ^1.3.1
moontoast/math ^1.1
orchestra/testbench-core ^5.0
pda/pheanstalk ^4.0
phpunit/phpunit ^8.4|^9.0
predis/predis ^1.1.1
symfony/cache ^5.0

suggests
aws/aws-sdk-php Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).
doctrine/dbal Required to rename columns and drop SQLite columns (^2.6).
ext-gd Required to use Illuminate\Http\Testing\FileFactory::image().
ext-memcached Required to use the memcache cache driver.
ext-pcntl Required to use all features of the queue worker.
ext-posix Required to use all features of the queue worker.
ext-redis Required to use the Redis cache and queue drivers (^4.0|^5.0).
filp/whoops Required for friendly error pages in development (^2.4).
fzaninotto/faker Required to use the eloquent factory builder (^1.9.1).
guzzlehttp/guzzle Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0).
laravel/tinker Required to use the tinker console command (^2.0).
league/flysystem-aws-s3-v3 Required to use the Flysystem S3 driver (^1.0).
league/flysystem-cached-adapter Required to use the Flysystem cache (^1.0).
league/flysystem-sftp Required to use the Flysystem SFTP driver (^1.0).
mockery/mockery Required to use mocking (^1.3.1).
moontoast/math Required to use ordered UUIDs (^1.1).
nyholm/psr7 Required to use PSR-7 bridging features (^1.2).
pda/pheanstalk Required to use the beanstalk queue driver (^4.0).
phpunit/phpunit Required to use assertions and run tests (^8.4|^9.0).
psr/http-message Required to allow Storage::put to accept a StreamInterface (^1.0).
pusher/pusher-php-server Required to use the Pusher broadcast driver (^4.0).
symfony/cache Required to PSR-6 cache bridge (^5.0).
symfony/filesystem Required to create relative storage directory symbolic links (^5.0).
symfony/psr-http-message-bridge Required to use PSR-7 bridging features (^2.0).
wildbit/swiftmailer-postmark Required to use Postmark mail driver (^3.0).

conflicts
tightenco/collect <5.5.33

replaces
illuminate/auth self.version
illuminate/broadcasting self.version
illuminate/bus self.version
illuminate/cache self.version
illuminate/config self.version
illuminate/console self.version
illuminate/container self.version
illuminate/contracts self.version
illuminate/cookie self.version
illuminate/database self.version
illuminate/encryption self.version
illuminate/events self.version
illuminate/filesystem self.version
illuminate/hashing self.version
illuminate/http self.version
illuminate/log self.version
illuminate/mail self.version
illuminate/notifications self.version
illuminate/pagination self.version
illuminate/pipeline self.version
illuminate/queue self.version
illuminate/redis self.version
illuminate/routing self.version
illuminate/session self.version
illuminate/support self.version
illuminate/testing self.version
illuminate/translation self.version
illuminate/validation self.version
illuminate/view self.version

Laravelの開発

デフォルトで用意されているテーブル

$PJ/database/migrations
にデフォルトとして作られるテーブルの定義がある

users

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

failed_jobs

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateFailedJobsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('failed_jobs', function (Blueprint $table) {
            $table->id();
            $table->text('connection');
            $table->text('queue');
            $table->longText('payload');
            $table->longText('exception');
            $table->timestamp('failed_at')->useCurrent();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('failed_jobs');
    }
}

これをデータベースに反映して、データベースへの接続がきちんと設定されている事を確認する。
laradockのディレクトリ内に移動して

docker-compose exec workspace bash -c "php artisan migrate";

成功すれば以下のような結果が表示される。

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.14 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.05 seconds)

反映を取り消したい場合には

docker-compose exec workspace bash -c "php artisan migrate:reset";

コマンドが長くて面倒だなという場合には、一時的にaliasを作るシェルをそのディレクトリ内に用意しておけば良い。

alias_for_$PJ.sh

alias dmigrate='docker-compose exec workspace bash -c "php artisan migrate"';
alias dreset='docker-compose exec workspace bash -c "php artisan migrate:reset";';
alias dws='docker-compose exec workspace bash;';
alias dmysql='docker-compose exec mariadb mysql -udefault -psecret;';
alias dmysql_bash='docker-compose exec mariadb bash;';

新しいモデル(テーブル)の作成

以下のようなコマンドを打つとmigrationsフォルダ以下に空の定義が出来るので、それの中に入れ込んでいく。

コマンド例

php artisan make:model Country --migration;
php artisan make:model State --migration;
php artisan make:model City --migration;
php artisan make:model PostalCode --migration;
php artisan make:model Company --migration;
php artisan make:model Job --migration;
php artisan make:model JobCategory --migration;
php artisan make:model JobType --migration;

本番環境へのDeploy

composer install --optimize-autoloader --no-dev;
php artisan config:cache;
php artisan route:cache;
php artisan view:cache;

Laravelでの開発

Laravelのデータ定義とMariaDBのデータ型の対応関係

Laravelの型MariaDBの型説明
$table->bigIncrements(‘id’);BIGINTIncrementing ID using a “big integer” equivalent.
$table->bigInteger(‘votes’);BIGINTBIGINT equivalent to the table
$table->binary(‘data’);BLOBBLOB equivalent to the table
$table->boolean(‘confirmed’);BOOLEANBOOLEAN equivalent to the table
$table->char(‘name’, 4);CHAR(4) nameCHAR equivalent with a length
$table->date(‘created_at’);DATEDATE equivalent to the table
$table->dateTime(‘created_at’);DATETIMEDATETIME equivalent to the table
$table->decimal(‘amount’, 5, 2);DECIMALDECIMAL equivalent with a precision and scale
$table->double(‘column’, 15, 8);DOUBLEDOUBLE equivalent with precision, 15 digits in total and 8 after the decimal point
$table->enum(‘choices’, array(‘foo’, ‘bar’));ENUMENUM equivalent to the table
$table->float(‘amount’);FLOATFLOAT equivalent to the table
$table->increments(‘id’);id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)Incrementing ID to the table (primary key).
$table->integer(‘votes’);INTINTEGER equivalent to the table
$table->longText(‘description’);LONGTEXTLONGTEXT equivalent to the table
$table->mediumInteger(‘numbers’);MEDIUMINTMEDIUMINT equivalent to the table
$table->mediumText(‘description’);MEDIUMTEXTMEDIUMTEXT equivalent to the table
$table->morphs(‘taggable’);Adds INTEGER taggable_id and STRING taggable_type
$table->nullableTimestamps();Same as timestamps(), except allows NULLs
$table->smallInteger(‘votes’);SMALLINTSMALLINT equivalent to the table
$table->tinyInteger(‘numbers’);TINYINTTINYINT equivalent to the table
$table->softDeletes();Adds deleted_at column for soft deletes
$table->string(‘email’);VARCHARVARCHAR equivalent column
$table->string(‘name’, 100);VARCHARVARCHAR equivalent with a length
$table->text(‘description’);TEXTTEXT equivalent to the table
$table->time(‘sunrise’);TIMETIME equivalent to the table
$table->timestamp(‘added_on’);TIMESTAMPTIMESTAMP equivalent to the table
$table->timestamps();TIMESTAMP created_at, TIMESTAMP updated_atAdds created_at and updated_at columns
$table->rememberToken();Adds remember_token as VARCHAR(100) NULL
->nullable()NULLDesignate that the column allows NULL values
->default($value)DEFAULT VALUEDeclare a default value for a column
->unsigned()INT UNSIGNEDSet INTEGER to UNSIGNED

Laravelの勉強で役立つコンテンツ

https://laravel.com/docs/