九保すこひです(フリーランスのITコンサルタント、エンジニア)
さてさて、これまで私はクライアント様方から様々なタイプのご依頼を受けてきました。もちろんLaravel
関連の開発が多いのですが、そんな中、少し「変化球」な内容がありました。
それは・・・
データベースにSQLiteを使う
というものです。
というのも、クライアントさんにお話を伺うと・・・
- そのアプリケーションは今後コピーして複数で運用したい
- でもMySQLなどの初期設定はノウハウがないのでできない
とのことでしたので、「でしたらSQLite
はどうでしょう😉」と提案させていただきました。
なぜなら、SQLite
はファイルを使ったデータベースなので、初期設定を済ませたファイルをつくっておけば後はコピーするだけですし、さらにレンタルサーバーもSQLite
には対応してるところが多かったからです。
そこで!
今回はそんなSQLite
をLaravel
で使う方法をご紹介します。
ぜひ楽しみながらやってみましょう❗
「SQLiteって
思ったより高速ですね😲❗」
開発環境: Laravel 7.x、Ubuntu 18.04、nginx 1.14.0
目次
SQLiteをインストールする
まず以下のコマンドを実行してSQLite
がインストールされているか確認しておきましょう。
sqlite3 --version
もしインストールされていない場合は次のコマンドでインストールしてください。
sudo apt install sqlite3
LaravelでSQLiteを使う設定をする
.envを変更する
Laravel
でSQLite
を使うには、.env
内にあるDB_CONNECTION
を変更します。
DB_CONNECTION=sqlite # 👇 その他は不要なのでコメントアウト #DB_HOST=127.0.0.1 #DB_PORT=3306 #DB_DATABASE=***** #DB_USERNAME=***** #DB_PASSWORD=*****
なお、Laravel
のSQLite
ファイルは/database/database.sqlite
がデフォルトですが、変更したい場合はDB_DATABASE
で指定できます。
DB_DATABASE=/PATH/TO/YOUR/SQLITE/database.db
ファイルを作成する
SQLite
はファイルを使ったDBですので、まず「/database/database.sqlite」というDBファイルを作成します。
ちなみに、後ほどマイグレーションを実行して以下のようなエラーが出た場合はファイルの権限が正しくない場合があります。
unable to open database file ...
そんな場合、次のコマンドで所有者と権限を変更してみてください。
sudo chown www-data:(ログインしているユーザー名) database.sqlite
sudo chmod 775 database.sqlite
なお、www-data
の部分は実行環境によって違ってきますので、次のコードをPHPで実行してみるといいでしょう。
echo exec('whoami'); // 👈 PHPを実行しているユーザー名が表示されます
これでSQLite
の設定は完了です!
phpLiteAdminをインストールする
SQLite
の中身をブラウザから確認できるようにphpLiteAdmin
をインストールします。(不要な人は次まで読み飛ばしてください)
本体を設置する
まずダウンロードページにアクセスし最新版のphpLiteAdmin
をダウンロードします。
ダウンロードしたファイルを展開するとphpLiteAdmin_v1-9-8-2
というフォルダが作成されるので、以下のようにして移動します。
sudo mv phpLiteAdmin_v1-9-8-2 /usr/share/phpLiteAdmin
nginxの設定をする
次に、設置したphpLiteAdmin
に「phpliteadmin.test」としてアクセスできるようにnginx
で設定しておきましょう。
以下のコードを追加して保存してください。
/etc/nginx/sites-available/default
# 👇 追加 # phpLiteAdmin server { listen 80; listen [::]:80; server_name phpliteadmin.test; root /usr/share/phpLiteAdmin; index index.html, index.php; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } }
保存が完了したら、nginx
を再起動します。
sudo systemctl restart nginx
ドメイン登録する
続いて、「phpliteadmin.test」ドメインの登録です。
こちらも次のコードを追加してください。
/etc/hosts
127.0.0.1 phpliteadmin.test
これで、ブラウザから「http://phpliteadmin.test/phpliteadmin.php」にアクセスできるようになります。
phpLiteAdminの設定を変更する
最後にphpLiteAdmin
の設定を変更します。
/usr/share/phpLiteAdmin/phpliteadmin.php
//password to gain access $password = '(ここにパスワード)'; // 👈 phpLiteAdminへのログインパスワード //directory relative to this file to search for databases (if false, manually list databases in the $databases variable) $directory = false; // 👈 データベースは直接指定するので false に変更 //whether or not to scan the subdirectories of the above directory infinitely deep $subdirectories = false; //if the above $directory variable is set to false, you must specify the databases manually in an array as the next variable //if any of the databases do not exist as they are referenced by their path, they will be created automatically // 👇 ここが接続するSQLiteのDBファイルです。 $databases = array( array( 'path'=> '/PATH/TO/YOUR/LARAVEL/database/database.sqlite', // 👈 先ほどつくったファイル 'name'=> 'Laravel 7.x' ) );
これでブラウザからログインすると次のようになります。
※なお、phpLiteAdmin
はGPL
ライセンスですので、アプリケーションに同梱する場合はお気をつけください。
エラーが出たら・・・
phpinfo()
で表示した内容でsqlite3
が有効になっているか確認してみてください。
もし有効になってない場合は、以下のコマンドを実行してインストールしてみてください。
sudo apt install php-sqlite3
なお、バージョンを指定する場合はこちら。
sudo apt install php7.2-sqlite3
テストしてみる
では、適当にマイグレーションとSeeder
をつくってDBテーブルを作ってみましょう。
php artisan migrate:fresh --seed
すると、データベースの中身は次のようになりました。
成功です😊✨
おわりに
ということで、今回はLaravel
でSQLite
を使う方法をご紹介しました。
あまりSQLite
をメインで使うことは少ないかもしれませんが、簡単にコピーして気軽に使いたい場合は便利なんじゃないでしょうか。
また、データはすべて1つのファイルにまとめられているので、バックアップする場合もコピーだけでOKですよ😊✨
ぜひ機会があったら試してみてくださいね。
ではでは〜❗
「機能的には、もうLiteっていう
イメージじゃないですね👍」