Laravel5を組み込みサーバーとSQLite3で実行する

/

導入

Laravelの開発環境と言えばHomesteadだと思っていたのですが、CakePHP同様組み込みサーバーが用意されていると知ったのでSQLite3と組み合わせて簡易な開発環境を設定してみました。

実行環境

  • ubuntu 16.04
  • PHP 7.0.8
  • Composer 1.0.0
  • Lravel 5.3
  • SQLite 3.11.0

Laravel

LaravelはPHPのWepApp用フレームワークです。
ここ数年で人気を伸ばしているフレームワークで、今回は利用しませんがVagrantを利用したHomesteadと呼ばれる開発環境も提供されています。

インストール

LaravelのプロジェクトをビルドするためにComposerにLaravelのインストーラーを追加します。

Vagrantの仮想環境にPHP Composerの導入 – Koltatt

$ composer global require "laravel/installer"

インストーラーの追加の際にPHPのextensionが無いと言われてしまったので必要なextensionを追加して再度インストールを実行します。

$ apt install -y php-zip

インストーラーが追加出来たか確認。

$ laravel
Laravel Installer version 1.3.3
...

システムにインストールされたComposerからインストーラーが上手く呼び出せない場合にはパスがきちんと通っているか確認します。

$ vi ~/.bashrc
#Laravel
export PATH="$PATH:$HOME/.composer/vendor/bin"

パスの設定が間違っていたら、正しいパスを設定してターミナルを開き直します。

インストーラーが追加出来たら新しいプロジェクトを作成します。

laravel new TestApp

Laravael 5.3 インストール

組み込みサーバー

Laravelには組み込みサーバーが用意されているので、別にWebサーバーを用意しなくてもAppを起動させる事が出来ます。

サーバー起動

サーバーはLaravelのCLIであるArtisanから起動します。
サーバーの起動はserverではなくserveで実行します。

$ php artisan serve

サーバーのデフォルトの接続先はlocalhost:8000です。

localhost:8000

サーバーのシャットダウン

$ Ctrl-C

Database

LaravelのデフォルトのデーターベースはMySQLに設定されていますが、組み込みサーバーと合わせて簡易な開発環境を作りたいのでSQLite3を使用します。

インストール

環境にSQLite3が無ければ追加しておきます。

$ apt install sqlite3

.envファイルでデーターベースに関する設定を行います。

# DBドライバの設定
DB_CONNECTION=sqlite

使用するデータベース名やユーザー名を設定する事も出来ます。

DB_DATABASE=app.sqlite
DB_USERNAME=root

config/databse.php内でのSQLiteの設定も行います。

...
'default' => env('DB_CONNECTION', 'sqlite'),
'connections' => [
    'sqlite' => [
        'driver' => 'sqlite',
        'database' => database_path('app.sqlite'),
        'prefix' => '',
    ],
]
...

Test

設定が上手く出来たか確認するためマイグレーションとシードを使って実際にデーターベースに値を書き込んでみます。

Migration

まずデーターベースのスキーマの設定を行うためマイグレーションを実行します。
新たにマイグレーションファイルを作っても良かったのですが、Appの作成時点で最初から2つのマイグレーションファイル(users & password reset)があったのでUsersのマイグレーションファイルをそのまま使いました。

# マイグレーションファイルの作成
$ php artisan make:migration [file]

マイグレーションの実行の際にLaravelがSQLtieファイルを作ってはくれないので、あらかじめ手動で作成しておきます。

$ touch ./database/app.sqlite
# マイグレーションの実行
$ php artisan migrate

データーベースの確認をしてみます。

$ sqlite3 databse/app.sqlite
# テーブル一覧の表示
.table
migrations       password_resets  users
.exit

マイグレーション – Readouble

Seed

マイグレーションが実行出来たのシードを使ってデーターベースにテストのための値を書き込みます。

CLIからSeederを作成します。

$ php artisan make:seeder UsersTableSeeder

seederの編集

public function run()
{
  // clear Database
  DB::table('users')->truncate();

  DB::table('users')->insert([
    'name' => 'Jhon',
    'email' => 'jhon@examplemail.com',
    'password' => bcrypt('secret'),
  ]);
  DB::table('users')->insert([
    'name' => 'Angelina',
    'email' => 'angelina@examplemail.com',
    'password' => bcrypt('secret'),            
  ]);
}
# seedの実行
php artisan db:seed --class=UsersTableSeeder

データーベースを確認してみます。

$ sqlite3 database/app.sqlite
$ select * from users;

1|Jhon|jhon@examplemail.com|$2y$10$ZbVhyuMvkzb.wQ.l/BrGUOCfm9vaSCPWKqOM1rI7xhMPw2ykaLb9W|||
2|Angelina|angelina@examplemail.com|$2y$10$wE3xTOjzBgMkKcFJiEDB.ONNOoF/xVdWZxCIqIoLwm5VqKZKuizYW|||

シーディング – Readouble

Laravelからの確認

マイグレーションとシードによってデーターベースにサンプルのデータを設定したのでLaravelからのデータ表示を試してみます。

Controller

Userのモデルはマイグレーションファイル同様app/User.phpにすでに用意されているのでコントローラーを作成します。

# コントローラーの作成
$ php artisan make:controller UserController
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

class UserController extends Controller
{
    public function index()
    {
        $users = User::all();
        return view('user', ['users' => $users]);
    }
}

UserControllerのindex()内でUser::all()によってUserモデルの一覧を取得し、値を渡されたviewを返すようにします。

View

コントローラーを作成したので対応するviewも作成します。

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Users</title>
    </head>
    <body>
      <h1>Users</h1>
      @foreach ($users as $user)
        <p>{{ $user-> id }}</p>
        <p>{{ $user-> name }}</p>
        <p>{{ $user-> email }}</p>
      @endforeach
    </body>
</html>

Route

最後にルーティングの設定をします。

Route::get('/user', 'UserController@index');

ルーティングの設定が出来たら再度サーバーを起動しlocalhost:8000/userにアクセスします。

$ php artisan serve
localhost:8000/user

LaravelからSQLite3の参照が出来ることが確認出来ます。

あとがき

Laravelをなるべく簡単な環境で実行してみました。
とりあえず試してみる分にはやはりシンプルな構成のほうが面倒がなくていいですね。