[PHP] CodeIgniter + SQLite3で軽量WEBサイトを作る

PHPでデータベースというとMYSQLやMariaDBが人気かつ速度面でも有利ですが、PHPさえあれば動いてくれる軽量な組み込みDB・SQLite3をCodeIgniterで使ってみました。

PHPならSQLite3を読み込み設定は導入済み

PHPさえあれば基本的にはSQLite3を使う拡張機能がデフォルトで組み込まれています(一部格安サーバーでは、SQLite3に対応していないこともあります)。この点がSQLite3のいいところで、格安サーバーでもスピーディにDB付きサイトを立ち上げられるんですよね。

SQLite3に対応したconfig/database.phpの書き方

さて、CodeIgniterでSQLite3を使うには、database.phpの記述がMYSQLの場合とちょっと違います。

'dsn'	=> '', //空白にする

.
.
.

'database' => 'db/test.sqlite3', //sqlite3ファイルの置き場所。index.phpからの相対パス、もしくは絶対パス
'dbdriver' => 'sqlite3',//mysqliから変更

こんな感じで、

  • ドライバをsqlite3にする
  • DNSを空にする
  • databaseにsqlite3の実ファイルを指定する

の3点を守れば動いてくれます。簡単ですね。

それ以外は、基本的にMYSQLと同じように使える

Active Recordも普通に使えますし、Railsみたいにdb同期ができるmigrate機能も問題無し。速度も、数十件のレコードからのSELECTで0.007秒くらいなので、MYSQLよりかは遅いですが体感としては問題無し。

CodeIgniter由来ではないですが、SQLite3はdatetimeの扱いが違ったりするので、その辺りは注意が必要です。また、レコード数が大きくなると重くなるのと、INSERT/UPDATEなどのロックが必要な処理を多数行う場合は、処理数によってはエラーになるの回避するのにテクニックが必要だったりします。

それ以外は、概ねMYSQLと同じですね。


MYSQLサーバーが肥大化してきて、新規サイトを作る際に速度面でボトルネックになってしまっていたので、サイトそれぞれに専用のDBを持たすことができるという点で、CodeIgniter + SQLite3構成のサイトが使えるは便利です。

筆者が使う時は、DockerでPHP+APACHEのベースコンテナに、CodeIgniterのファイルを設置したものをビルドして、使い回しています。

CodeIgniterもSQLiteも軽量なので、どこでも省スペース+省パワーで動くPHPサーバーとして、ちょっとしたサイトを立ち上げるのに重宝しています。