SQLiteでデータベースを作成する方法|コマンド・GUIツール・注意点まで完全ガイド

データベース・SQL

「簡単に使える軽量なデータベースを使いたい」
「アプリ開発のテストに最適なデータベースを探している」
そんな方にぴったりなのが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の場合

  1. SQLite公式サイトにアクセス
  2. 「Precompiled Binaries for Windows」からsqlite-toolsをダウンロード
  3. ZIPファイルを展開してPATHに追加
  4. コマンドプロンプトで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 の導入

インストール方法

  1. DB Browser for SQLite 公式サイトにアクセス
  2. 使用するOS(Windows/Mac/Linux)に対応したインストーラをダウンロード
  3. インストーラを実行してセットアップ完了

DB Browser for SQLite の特徴

  • 完全無料のオープンソースツール
  • 直感的なGUIでSQLiteを操作
  • テーブル作成、データ編集、クエリ実行が可能
  • SQLファイルのインポート・エクスポート対応

GUIでのデータベース作成手順

手順1:新しいデータベースの作成

  1. DB Browser for SQLite を起動
  2. 「新しいデータベース」ボタンをクリック
  3. 保存先フォルダとファイル名を指定(例:my_database.db
  4. 「保存」をクリックして空のデータベースを作成

手順2:テーブルの作成

  1. 「テーブルを作成」ボタンをクリック
  2. テーブル作成ダイアログが表示される
  3. 以下の項目を設定:
    • テーブル名users
    • フィールド追加
      • id(型:INTEGER、主キー、自動増分)
      • name(型:TEXT、NOT NULL)
      • email(型:TEXT、UNIQUE)
      • created_at(型:DATETIME、デフォルト値:CURRENT_TIMESTAMP)

手順3:データの入力

  1. 「データの参照」タブをクリック
  2. 「新しいレコード」ボタンでデータ追加
  3. 各フィールドに値を入力
  4. 「変更を書き込む」で保存

高度なテーブル設計をGUIで行う

外部キー制約の設定

  1. テーブル作成時に「外部キー」タブを選択
  2. 参照するテーブルとフィールドを指定
  3. 更新・削除時の動作を設定(CASCADE、SET NULL など)

インデックスの作成

  1. 「データベース構造」タブを選択
  2. 「インデックスを作成」ボタンをクリック
  3. インデックス名とフィールドを指定
  4. ユニーク制約の有無を設定

制約の追加

-- 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ツールの活用法

データベース設計フェーズ

  1. ER図の作成(別ツールまたは手書き)
  2. GUIでテーブル構造を作成
  3. サンプルデータでテスト
  4. 必要に応じて構造を調整

開発フェーズ

  1. アプリケーションから接続テスト
  2. パフォーマンスの確認
  3. データの整合性チェック
  4. バックアップとリストア手順の確認

運用フェーズ

  1. 定期的なデータベース最適化
  2. インデックスの効果測定
  3. 容量とパフォーマンスの監視

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ツール:直感的で初心者にも優しい
  • プログラムから:アプリケーション組み込み時に最適

設計時の重要な考慮事項

  • 適切な型指定と制約の設定
  • インデックス設計によるパフォーマンス最適化
  • セキュリティとバックアップ戦略
  • ファイル管理とバージョン管理

コメント

タイトルとURLをコピーしました