「簡単に使える軽量なデータベースを使いたい」
「アプリ開発のテストに最適なデータベースを探している」
そんな方にぴったりなのがSQLite(エスキューライト)です。
SQLiteはサーバー不要・インストール不要で、ローカルファイルひとつで使える手軽さが魅力です。
大規模なデータベースサーバーを立てる必要がなく、学習や小〜中規模のアプリ開発に最適です。
この記事では、SQLiteでのデータベース作成方法をコマンドライン・GUIツール両方の視点からわかりやすく紹介します。
SQLiteとは?初心者向けに基本を解説
SQLiteの基本的な特徴
軽量・シンプルな構成
- ファイル1つで完結する軽量なデータベース
- サーバー不要、複雑な設定も不要
- 数十MBから数GBまでのデータを効率的に管理
- メモリ使用量も最小限
幅広い採用実績
- Androidの内部データベースとして標準採用
- iOS アプリでも広く使用
- Webアプリケーションのローカルストレージ
- IoT機器や組み込みシステム
SQLiteを使うメリット
開発・学習面でのメリット
- 簡単インストール:多くのOSで標準搭載または簡単導入
- 学習コスト低:SQL の基本を学ぶのに最適
- 開発効率:すぐに試せるため、プロトタイプ作成が早い
- ポータブル:ファイルを移動するだけでデータも移動
運用面でのメリット
- バックアップ簡単:ファイルコピーだけで完了
- バージョン管理:Gitなどでデータベースファイルも管理可能
- デプロイ簡単:アプリと一緒にファイルを配布するだけ
- ライセンス:パブリックドメインで商用利用も自由
SQLiteが適している用途
おすすめの用途
・モバイルアプリのローカルデータベース
・Webアプリの小〜中規模データ管理
・プロトタイプ・概念実証(PoC)での利用
・データ分析・レポート作成の中間データ保存
・設定ファイルの代替(構造化データ)
・学習・教育目的でのSQL練習
適さない用途
・大量の同時接続が必要なシステム
・高いトランザクション性能が必要な業務システム
・複数サーバーでのデータ共有
・リアルタイム性が重要なシステム
他のデータベースとの比較
vs MySQL/PostgreSQL
- SQLite:軽量、簡単、シングルユーザー向け
- MySQL/PostgreSQL:高性能、マルチユーザー、サーバー管理必要
vs NoSQL(MongoDB など)
- SQLite:リレーショナル、SQL使用、スキーマ定義
- NoSQL:ドキュメント指向、スケーラブル、スキーマレス
SQLiteの特徴を理解したところで、実際にデータベースを作成してみましょう。まずはコマンドラインでの方法から説明します。
SQLiteでデータベースを作成する方法【コマンドライン編】
事前準備:SQLiteのインストール
macOSの場合
# Homebrew を使用(推奨)
brew install sqlite
# インストール確認
sqlite3 --version
Linuxの場合(Ubuntu/Debian)
# パッケージマネージャーでインストール
sudo apt update
sudo apt install sqlite3
# インストール確認
sqlite3 --version
Windowsの場合
- SQLite公式サイトにアクセス
- 「Precompiled Binaries for Windows」から
sqlite-tools
をダウンロード - ZIPファイルを展開してPATHに追加
- コマンドプロンプトで
sqlite3 --version
で確認
基本的なデータベース作成手順
手順1:データベースファイルの作成
# 新しいデータベースを作成(ファイルが存在しない場合)
sqlite3 sample.db
# 実行すると SQLite のプロンプトが表示される
SQLite version 3.40.0 2022-11-16 12:10:08
Enter ".help" for usage hints.
sqlite>
手順2:基本的なテーブル作成
-- ユーザー情報を管理するテーブル
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
手順3:テーブル構造の確認
-- 作成されたテーブルの一覧表示
.tables
-- 特定テーブルのスキーマ確認
.schema users
-- より詳細な情報表示
PRAGMA table_info(users);
実践的なテーブル作成例
商品管理テーブル
CREATE TABLE products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL CHECK(price > 0),
category_id INTEGER,
stock_quantity INTEGER DEFAULT 0,
description TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
注文管理テーブル
CREATE TABLE orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
quantity INTEGER CHECK(quantity > 0),
total_amount REAL,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
サンプルデータの挿入
ユーザーデータの挿入
INSERT INTO users (name, email) VALUES
('田中太郎', 'tanaka@example.com'),
('佐藤花子', 'sato@example.com'),
('鈴木一郎', 'suzuki@example.com');
商品データの挿入
INSERT INTO products (name, price, stock_quantity, description) VALUES
('ノートパソコン', 89800.00, 10, '高性能な15インチノートPC'),
('マウス', 2980.00, 50, 'ワイヤレス光学マウス'),
('キーボード', 8500.00, 25, 'メカニカルキーボード');
便利なSQLiteコマンド
データベース操作の基本コマンド
-- データの確認
SELECT * FROM users;
-- 条件付き検索
SELECT name, email FROM users WHERE name LIKE '田中%';
-- データ件数の確認
SELECT COUNT(*) FROM users;
-- データベースファイルの情報表示
.databases
-- SQLiteを終了
.exit
データベース設定の調整
-- 外部キー制約を有効化(推奨)
PRAGMA foreign_keys = ON;
-- ジャーナルモードの設定
PRAGMA journal_mode = WAL;
-- 同期モードの設定(パフォーマンス調整)
PRAGMA synchronous = NORMAL;
バックアップとエクスポート
SQLファイルとしてエクスポート
# データベース全体をSQLファイルとして出力
sqlite3 sample.db .dump > backup.sql
# 特定テーブルのみエクスポート
sqlite3 sample.db ".dump users" > users_backup.sql
CSVファイルとしてエクスポート
-- CSV出力の設定
.mode csv
.headers on
.output users.csv
SELECT * FROM users;
.output stdout
コマンドラインでの操作は柔軟性が高く、スクリプト化も可能です。
しかし、GUIで直感的に操作したい場合もあります。次はGUIツールでの作成方法を説明します。
SQLiteデータベースをGUIで作成する方法
DB Browser for SQLite の導入
インストール方法
- DB Browser for SQLite 公式サイトにアクセス
- 使用するOS(Windows/Mac/Linux)に対応したインストーラをダウンロード
- インストーラを実行してセットアップ完了
DB Browser for SQLite の特徴
- 完全無料のオープンソースツール
- 直感的なGUIでSQLiteを操作
- テーブル作成、データ編集、クエリ実行が可能
- SQLファイルのインポート・エクスポート対応
GUIでのデータベース作成手順
手順1:新しいデータベースの作成
- DB Browser for SQLite を起動
- 「新しいデータベース」ボタンをクリック
- 保存先フォルダとファイル名を指定(例:
my_database.db
) - 「保存」をクリックして空のデータベースを作成
手順2:テーブルの作成
- 「テーブルを作成」ボタンをクリック
- テーブル作成ダイアログが表示される
- 以下の項目を設定:
- テーブル名:
users
- フィールド追加:
id
(型:INTEGER、主キー、自動増分)name
(型:TEXT、NOT NULL)email
(型:TEXT、UNIQUE)created_at
(型:DATETIME、デフォルト値:CURRENT_TIMESTAMP)
- テーブル名:
手順3:データの入力
- 「データの参照」タブをクリック
- 「新しいレコード」ボタンでデータ追加
- 各フィールドに値を入力
- 「変更を書き込む」で保存
高度なテーブル設計をGUIで行う
外部キー制約の設定
- テーブル作成時に「外部キー」タブを選択
- 参照するテーブルとフィールドを指定
- 更新・削除時の動作を設定(CASCADE、SET NULL など)
インデックスの作成
- 「データベース構造」タブを選択
- 「インデックスを作成」ボタンをクリック
- インデックス名とフィールドを指定
- ユニーク制約の有無を設定
制約の追加
-- CHECK制約の例(SQL実行タブで実行)
ALTER TABLE products
ADD CONSTRAINT price_positive CHECK (price > 0);
-- 複合インデックスの作成
CREATE INDEX idx_user_email_created
ON users(email, created_at);
その他の便利なGUIツール
SQLiteStudio
- 無料で高機能なSQLiteエディター
- プラグイン機能で拡張可能
- 複数データベースの同時操作
SQLite Expert(有料版あり)
- 商用利用に適した高機能ツール
- クエリビルダー機能
- パフォーマンス分析機能
Navicat for SQLite(有料)
- プロフェッショナル向けの統合ツール
- データ同期・バックアップ機能
- レポート作成機能
GUIツールの活用法
データベース設計フェーズ
- ER図の作成(別ツールまたは手書き)
- GUIでテーブル構造を作成
- サンプルデータでテスト
- 必要に応じて構造を調整
開発フェーズ
- アプリケーションから接続テスト
- パフォーマンスの確認
- データの整合性チェック
- バックアップとリストア手順の確認
運用フェーズ
- 定期的なデータベース最適化
- インデックスの効果測定
- 容量とパフォーマンスの監視
GUIツールを使えば、SQL文を書かずに直感的にデータベースを作成できます。
初心者には特におすすめの方法です。最後に、データベース作成時に注意しておくべき重要なポイントをまとめます。
データベース作成時の注意点とベストプラクティス
データ型設計の注意点
SQLiteの柔軟な型システム SQLiteは他のデータベースと異なり、動的型付けを採用しています。これは便利な反面、注意が必要です。
-- 型の厳密性を高めるための制約例
CREATE TABLE strict_users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL CHECK(length(name) > 0),
age INTEGER CHECK(age >= 0 AND age <= 150),
email TEXT CHECK(email LIKE '%@%.%'),
salary REAL CHECK(salary >= 0)
);
推奨される型の使い方
-- 良い例:適切な型と制約
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
price REAL CHECK(price > 0),
stock INTEGER DEFAULT 0 CHECK(stock >= 0),
is_active INTEGER CHECK(is_active IN (0, 1)) -- ブール値
);
-- 避けるべき例:制約なしの緩い設計
CREATE TABLE bad_products (
id, -- 型指定なし
name, -- 制約なし
price, -- 制約なし
stock -- 制約なし
);
ファイル管理のベストプラクティス
ファイル命名規則
推奨する拡張子:
・.db - 一般的なデータベースファイル
・.sqlite - SQLiteであることを明示
・.sqlite3 - SQLite3であることを明示
命名例:
・app_data.db - アプリケーションデータ
・user_management.sqlite - ユーザー管理システム
・inventory_2024.db - 年度別在庫管理
ファイル配置の考慮事項
- 適切な権限設定(読み取り専用、読み書き可能)
- バックアップファイルとの分離
- 一時ファイルの配置場所の検討
- ログファイルとの分離
パフォーマンス最適化
インデックス設計
-- 検索頻度の高いフィールドにインデックス
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_orders_user_id ON orders(user_id);
CREATE INDEX idx_products_category ON products(category_id);
-- 複合インデックス(複数条件での検索用)
CREATE INDEX idx_orders_user_date ON orders(user_id, order_date);
クエリパフォーマンスの確認
-- クエリの実行計画を確認
EXPLAIN QUERY PLAN
SELECT * FROM users WHERE email = 'test@example.com';
-- 統計情報の更新
ANALYZE;
セキュリティ考慮事項
ファイルレベルのセキュリティ
# ファイル権限の設定(Linux/macOS)
chmod 600 database.db # 所有者のみ読み書き可能
# バックアップファイルも同様に保護
chmod 600 backup_*.db
アプリケーションレベル
- SQLインジェクション対策(プリペアドステートメント使用)
- 機密データの暗号化
- アクセスログの記録
バックアップ戦略
定期バックアップの自動化
#!/bin/bash
# SQLiteバックアップスクリプト例
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/path/to/backup"
DB_FILE="/path/to/database.db"
# ファイルコピーによるバックアップ
cp "$DB_FILE" "$BACKUP_DIR/backup_$DATE.db"
# SQLダンプによるバックアップ
sqlite3 "$DB_FILE" .dump > "$BACKUP_DIR/dump_$DATE.sql"
# 古いバックアップの削除(30日以上)
find "$BACKUP_DIR" -name "backup_*.db" -mtime +30 -delete
バックアップの検証
# バックアップファイルの整合性チェック
sqlite3 backup.db "PRAGMA integrity_check;"
# バックアップからの復元テスト
sqlite3 test_restore.db < dump_backup.sql
開発環境での注意点
バージョン管理
# .gitignore での設定例
*.db
*.sqlite
*.sqlite3
db/*.db
!db/schema.sql # スキーマファイルは含める
環境別の設定
-- 開発環境用の設定
PRAGMA foreign_keys = ON;
PRAGMA journal_mode = DELETE; -- シンプルな設定
-- 本番環境用の設定
PRAGMA foreign_keys = ON;
PRAGMA journal_mode = WAL; -- パフォーマンス重視
PRAGMA synchronous = NORMAL;
トラブルシューティング
よくある問題と対処法
-- データベースがロックされている場合
.timeout 10000 -- 10秒のタイムアウト設定
-- 破損チェック
PRAGMA integrity_check;
-- データベースの最適化
VACUUM;
-- 統計情報の更新
ANALYZE;
データ移行時の注意
- 文字エンコーディングの確認
- データ型の互換性チェック
- 外部キー制約の依存関係確認
これらの注意点を押さえることで、安定したSQLiteデータベースシステムを構築できます。特に初心者の段階で適切な設計を心がけることで、後々の拡張や保守が楽になります。
まとめ:SQLiteで効率的なデータベース開発を始めよう
この記事では、SQLiteでのデータベース作成について詳しく解説しました。
重要なポイント
SQLiteの特徴と活用場面
- ファイル1つで完結する軽量データベース
- サーバー不要で簡単にセットアップ可能
- 小〜中規模アプリケーションに最適
- 学習・プロトタイプ開発に理想的
作成方法の選択肢
- コマンドライン:柔軟性が高く、スクリプト化可能
- GUIツール:直感的で初心者にも優しい
- プログラムから:アプリケーション組み込み時に最適
設計時の重要な考慮事項
- 適切な型指定と制約の設定
- インデックス設計によるパフォーマンス最適化
- セキュリティとバックアップ戦略
- ファイル管理とバージョン管理
コメント