Laravel で SQLite を連携してデータベースを使う方法


はじめに

手軽に使えるデーターベースである SQLite と Laravel を連携して使うための方法について手順をまとめました。
Laravel8 をインストール済みの状態を前提にしています。

SQLiteデーターベース連携

データベースファイルを作成

データベースの本体となるファイルを作成する必要がありルートの database フォルダの中に作るのが分かりやすいです。ファイル名はなんでもいいですが今回は database.sqlite を作成します。

.env の編集

データベース連携の設定は config/database.php に書いてあります。

'default' => env('DB_CONNECTION', 'mysql'),

env().env ファイルを参照するのでそちらを開くとデフォルトで mysql となっているため sqlite に変更します。HOSTやPORT情報はコメントアウトでOKです。

DB_CONNECTION=sqlite
#DB_CONNECTION=mysql
#DB_HOST=127.0.0.1
#DB_PORT=3306
#DB_DATABASE=laravel
#DB_USERNAME=root
#DB_PASSWORD=

sqlite のデフォルトの設定をみると DB_DATABASE の環境変数が無ければ database.sqlite というファイルを見るようになっています。database_path() は database フォルダの中のファイルを参照します。

'database' => env('DB_DATABASE', database_path('database.sqlite')),

動作確認

ターミナルで以下のコマンドを打つとで接続状況を確認できます。

php artisan migrate:status
 Migration table not found. 

上記のように表示されたら連携が成功しています。

このようなエラーが出た場合はうまく連携できていません。

SQLSTATE[HY000] [2002] Connection refused

.env の内容が反映されていないことがあるらしいのでコマンドでキャッシュをクリアしてみると解消するかもしれません。

php artisan config:cache
 Configuration cache cleared!
 Configuration cached successfully!

Laravelでテーブル作成(マイグレーション)

マイグレーション

database/migrations/ にあるファイルで定義されている内容を以下のコマンドでデータベースに反映することができます。

php artisan migrate

以下のコマンドで反映を取り消すことも可能です。

php artisan migrate:rollback

Laravel にはマイグレーション履歴を管理するテーブルがあるのでデーベースを手動で変更すると整合性が崩れてしまうので注意しましょう。

以下のコマンドでマイグレーションファイルが反映済みか確認できます。Yesになっていれば反映済みです。

% php artisan migrate:status
+------+-------------------------------------------------------+-------+
| Ran? | Migration                                             | Batch |
+------+-------------------------------------------------------+-------+
| Yes  | 2014_10_12_000000_create_users_table                  | 1     |
| Yes  | 2014_10_12_100000_create_password_resets_table        | 1     |
| Yes  | 2019_08_19_000000_create_failed_jobs_table            | 1     |
| Yes  | 2019_12_14_000001_create_personal_access_tokens_table | 1     |
+------+-------------------------------------------------------+-------+

データベース確認

Laravel にはデフォルトでユーザーを管理するためのテーブルを作成するマイグレーションファイルが用意されておりマイグレーションすると users テーブルが作成されます。

(TablePlus というデータベースクライアントツールを使いました。)

Laravel でデータ取得処理を実装

検証用にコントローラーとルートを作成します。
まずコントローラーを作成して User モデルからデータ取得するようにします。

php artisan make:controller ExampleController
class ExampleController extends Controller
{
    public function index() {
        $user = User::find(1);
        dd($user->toArray());
    }
}

ルートは以下を追加。

use App\Http\Controllers\ExampleController;

Route::get('/example', [ExampleController::class, 'index']);

データベースに検証用データを追加。

サーバーを起動してブラウザからアクセスするとデータベースの値が表示できるはずです。

php artisan serve

まとめ

Laravel と SQLite を連携する方法について解説しました。
小規模なWebアプリであれば Laravel と SQLite で簡単に作ることができそうですね。手間をかけずにデータベースを使いたい方の参考になれば幸いです。