RitoLabo

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

  • 公開:
  • カテゴリ: PHP Laravel
  • タグ: PHP,Laravel,Database,SQLite

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

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

アジェンダ
  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]サンプルコード