1. Home
  2. PHP
  3. Laravel
  4. LaravelとSQLiteを用いた開発環境とデータソースを用意する

LaravelとSQLiteを用いた開発環境とデータソースを用意する

  • 公開日
  • 更新日
  • カテゴリ:Laravel
  • タグ:PHP,Laravel,SQLite
LaravelとSQLiteを用いた開発環境とデータソースを用意する

Laravel を使って WEB アプリケーションを構築する際に、データソースをどうするかが未決定の場合や、RDBMS を用意するまでも無い場合には SQLite が便利です。

今回は、Laravel で SQLite を導入するまでを見ていきます。

Contents

  1. 開発環境
  2. SQLite
  3. SQLite の導入
  4. データの挿入
  5. データの確認

開発環境

今回の開発環境は以下の通りです。

  • Laravel 5.8

尚、Laravel のプロジェクトルートを「 laravel/」としています。

SQLite

SQLite(エスキューライト) は、ファイルベースでデータの永続化を行う軽量な SQL データベースエンジンです。

SQLite
https://www.sqlite.org

データベースサーバなどの用意なく直ぐに使うことが出来る為、とても気軽に使用出来ます。 また、Laravel でも使用可能です。

SQLite の導入

では Laravel に SQLite を導入していきます。

まず、laravel/database 配下に database.sqlite というファイルを作成します。

laravel/
├── database
│   ├── database.sqlite // ← 作成

作成したらそれで OK です。

次に、env ファイルへ SQLite を使用する為の記述を行います。

laravel/.env
# DB_CONNECTION=mysql

DB_CONNECTION=sqlite
DB_DATABASE_SQLITE=/path/to/laravel/database/database.sqlite
DB_FOREIGN_KEYS=true
DB_CONNECTION
デフォルトでは MySQL を使用する記述になっているので、SQLite を使用するように変更します。
DB_DATABASE_SQLITE
先程作成したファイルのパスを指定(フルパスで指定)します。 ちなみに今回は、後々に MySQL も生かせるようにするのでここの環境変数名を変えています。
DB_FOREIGN_KEYS
外部キー制約を有効にするかどうかを指定します。ここは必要に応じて指定してください。 次に、設定ファイルを少し変更します。
laravel/config/database.php
'connections' => [

'sqlite' => [
'driver' => 'sqlite',
        'url' => env('DATABASE_URL'),
        // 環境変数名を変更
        'database' => env('DB_DATABASE_SQLITE', database_path('database.sqlite')),
        'prefix' => '',
        'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
    ],

環境変数名を変更した箇所が1つあるので、そこだけ変更します。

と、、これで SQLite の導入は完了です。

データの挿入

SQLite を使用する準備が整ったので、ここでデータを入れてみます。 今回は Laravel にデフォルトで存在する User モデルを使ってダミーデータを入れます。

以下の artisan コマンドを叩いてシーダクラスを生成します。

# プロジェクトルートへ移動
cd /path/to/laravel

# シーダクラス生成
php artisan make:seeder UsersTableSeeder

続いて、生成したシーダクラスを定義します。

laravel/database/seeds/UsersTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    public function run()
    {
        factory(App\User::class, 10)->create();
    }
}

今回は10件のデータを生成します。

そしてシーディングの際にこれを実行するように登録します。

laravel/database/seeds/DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call(UsersTableSeeder::class);
    }
}

デフォルトではご丁寧にも記述済みでコメントアウトされている状態なので、これを外してアクティブにすれば OK です。

最後に、Composer のオートローダを再生成します。

# プロジェクトルートへ移動
cd /path/to/laravel

# オートローダ再生成
composer dump-autoload

これでデータ挿入の準備は完了です。マイグレーションとシーディングを実行してデータを挿入します。

# プロジェクトルートへ移動
cd /path/to/laravel

# マイグレーション&シーディング実行
php artisan migrate --seed

# 実行結果
$ php artisan migrate --seed
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
Seeding: UsersTableSeeder
Database seeding completed successfully.

正常にテーブルの作成とデータの挿入が行われました。

データの確認

先程行ったマイグレーション及びシーディングは、特に意識はしていませんが SQLite へテーブルの作成とデータの挿入が行われています。 簡単にデータ取得を行い確認してみます。

laravel/routes/web.php
Route::get('/', function () {
    // 3件だけデータを取得
    $users = App\User::limit(3)->get()->toArray();
    dd($users);
});

ブラウザからアクセスしてダンプを表示させてみます。

Array
(
   [0] => Array
       (
           [id] => 1
           [name] => Herbert Anderson PhD
           [email] => art.purdy@example.com
           [email_verified_at] => 2019-07-06 09:48:34
           [created_at] => 2019-07-06 09:48:34
           [updated_at] => 2019-07-06 09:48:34
       )

   [1] => Array
       (
           [id] => 2
           [name] => Prof. Raul Bergnaum
           [email] => froob@example.net
           [email_verified_at] => 2019-07-06 09:48:34
           [created_at] => 2019-07-06 09:48:34
           [updated_at] => 2019-07-06 09:48:34
       )

   [2] => Array
       (
           [id] => 3
           [name] => Katheryn Gerhold
           [email] => albina67@example.net
           [email_verified_at] => 2019-07-06 09:48:34
           [created_at] => 2019-07-06 09:48:34
           [updated_at] => 2019-07-06 09:48:34
       )
)

SQLite へ正常にデータが挿入されている事を確認できました。

また、この時点でデータが空で返ってくる場合は MySQL の方へデータを見に行っている可能性があります。 まずは再度設定を見直し、そこに問題がなかったら、env ファイルのキャッシュのおかげでデータソースの向き先が SQLite に 変更されていない場合があります。その場合は以下の artisan コマンドを叩いてキャッシュを削除してから再度試してみてください。

# プロジェクトルートへ移動
cd /path/to/laravel

# キャッシュの削除
php artisan config:cache

まとめ

以上で作業は終了です。 SQLite を用いると気軽にデータソースを用意する事ができ、ちょっとした場合に使えて便利です。 また、EloquentORM の使用により DB の種類を意識する事なくデータ操作が行える事も Laravel さまさまですので是非試してみてください。

[Github]サンプルコード

Author

rito

  • Backend Engineer
  • Tokyo, Japan
  • PHP 5 技術者認定上級試験 認定者
  • 統計検定 3 級