SQLiteは、サーバーのセットアップを必要とせずに動作する軽量で信頼性の高いリレーショナルデータベース管理システムです。

多くのオペレーティングシステムに標準でインストールされており、アプリケーションのローカルストレージやプロトタイピングの現場で不可欠なツールとなっています。

本記事では、コマンドラインツールである sqlite3 を活用して、データベースの操作を効率化するための具体的な手法を詳しく紹介します。

初心者の方から、実務での運用を見据えたエンジニアの方まで役立つ内容を網羅していますので、ぜひ最後までご覧ください。

SQLite3コマンドラインツールの基本

sqlite3 コマンドを使用することで、ターミナルやコマンドプロンプトから直接データベースファイルを操作できるようになります。

SQLiteは設定ファイルやサーバープロセスを持たないため、特定のファイル名を指定するだけで即座にデータベースへアクセスできる点が大きな特徴です。

対話モードの起動と終了

最も基本的な使い方は、コマンドラインから sqlite3 に続けてデータベースファイル名を指定することです。

指定したファイルが存在しない場合は、新しくデータベースファイルが作成されます。

Shell
# test.db という名前のデータベースを作成・起動する
sqlite3 test.db
実行結果
SQLite version 3.x.x 2026-xx-xx
Enter ".help" for usage hints.
sqlite>

対話モードを終了するには、.exit または .quit コマンドを入力します。

キーボードの Ctrl + D を押すことでも終了が可能です。

ドットコマンドの概念

SQLiteのコマンドラインツールには、通常のSQL文とは別に 「ドット(.)」から始まる特殊なコマンド が用意されています。

これらは「ドットコマンド」と呼ばれ、データベースの管理や出力形式の変更、設定の確認に使用されます。

ドットコマンドの末尾には、SQL文とは異なりセミコロン (;) を付ける必要がないという点に注意してください。

データベース構造を確認する基本操作

作成したデータベースにどのようなテーブルが存在し、どのような構造になっているかを確認することは実務において非常に頻度が高い作業です。

テーブル一覧とスキーマの確認

現在接続しているデータベース内のテーブル名を確認するには、.tables を使用します。

特定のパターンに一致するテーブルのみを抽出することも可能です。

sqlite3
-- 全てのテーブルを表示する
.tables

-- 特定の文字列(例: 'user')を含むテーブルを表示する
.tables 'user%'

テーブルの定義(DDL)を詳細に確認したい場合は、.schema コマンドが役立ちます。

これにより、CREATE TABLE 文などの構築時のSQLをそのまま出力できます。

sqlite3
-- usersテーブルの定義を確認する
.schema users
実行結果
CREATE TABLE users(
  id INTEGER PRIMARY KEY,
  name TEXT,
  email TEXT
);

データベース情報の詳細表示

複数のデータベースをアタッチして使用している場合、.databases コマンドで現在接続されているファイルの一覧を表示できます。

また、インデックスの一覧を確認したい場合は .indexes コマンドを使用します。

出力形式のカスタマイズと可読性の向上

デフォルトの状態では、SELECT 文の実行結果は見栄えが良くありません。

出力形式を適切に設定することで、データの視認性は劇的に改善されます。

カラム形式とヘッダーの表示

標準の出力は区切り文字が | (パイプ)になっていますが、これを列ごとに整理された形式に変更できます。

実務では .mode column.headers on を組み合わせて使用するのが一般的です。

sqlite3
-- ヘッダーを表示する設定
.headers on

-- カラム形式で表示する設定
.mode column

-- データを取得する
SELECT * FROM users;
実行結果
id  name      email            
--  --------  -----------------
1   Tanaka    tanaka@example.com
2   Sato      sato@example.com

さらに、.mode table を使用すると、罫線付きの美しい表形式で結果が出力されます。

その他の便利な出力モード

用途に合わせて、SQLiteは多様な出力モードをサポートしています。

モード名用途・特徴
csvカンマ区切り形式で出力。Excel等での利用に最適。
markdownGitHub等のドキュメントに貼り付け可能な形式。
insert結果を INSERT INTO 文の形式で出力。データの移行に便利。
jsonJSON配列形式で出力。Webアプリケーションとの親和性が高い。
listデフォルトの縦棒区切り形式。

実務で役立つデータのインポートとエクスポート

大量のデータを一括で投入したり、解析のために外部ファイルへ出力したりする作業は頻繁に発生します。

CSVファイルからのインポート

外部のCSVデータを既存のテーブル、あるいは新しいテーブルに読み込むには .import コマンドを使用します。

まず .mode csv でモードを切り替えてからインポートを実行するのが確実な方法です。

sqlite3
-- モードをCSVに設定
.mode csv

-- data.csv を users テーブルにインポートする
.import data.csv users

CSVの1行目がヘッダーである場合、SQLiteは自動的にカラム名として認識してくれます。

実行結果のファイル出力 (リダイレクト)

画面に表示するのではなく、ファイルに直接結果を書き込みたい場合は .output コマンドを使用します。

これにより、重いクエリの結果を後でゆっくり解析することが可能になります。

sqlite3
-- 出力先を result.txt に変更
.output result.txt

-- 実行結果がファイルに書き込まれる
SELECT * FROM large_table;

-- 出力先を画面(標準出力)に戻す
.output stdout

データベース全体のバックアップとダンプ

データベースの全内容をSQL文の形式で保存したい場合は .dump コマンドが非常に強力です。

このコマンドを使えば、テーブル構造からデータ挿入文まで、すべてをテキストファイルとして書き出せます。

Shell
# コマンドラインから直接ダンプを取得する例
sqlite3 test.db .dump > backup.sql

実務を支える高度な設定とメンテナンス

データベースのパフォーマンスを維持し、トラブルを未然に防ぐための設定についても触れておきます。

外部ファイルからのSQL実行

複雑なSQLクエリや、大量の命令を記述したファイルを直接読み込んで実行するには .read コマンドを使用します。

これにより、ミスが許されない本番環境での操作において、事前に検証したスクリプトを確実に実行できます。

sqlite3
-- script.sql 内の命令をすべて実行する
.read script.sql

パフォーマンスの最適化:VACUUMとANALYZE

データの削除を繰り返すと、データベースファイル内に空き領域が生じ、ファイルサイズが無駄に大きくなることがあります。

これを解消してファイルを再構築し、ディスクスペースを節約するには VACUUM 命令を実行します。

SQL
-- データベースファイルのサイズを最適化する
VACUUM;

また、クエリプランナーが最適な実行計画を立てられるように統計情報を更新する ANALYZE も、大規模なデータを扱う際には重要です。

データベースの整合性チェック

ファイルが破損していないか、インデックスが壊れていないかを確認するには、PRAGMA文を使用します。

実務で不審な動作を感じた際には、まずこのコマンドで健全性を確認しましょう。

SQL
-- 整合性をチェックする
PRAGMA integrity_check;
実行結果
ok

知っておくと便利な設定コマンド

日々の作業をより快適にするためのマイナーな、しかし有用な設定をいくつか紹介します。

.show コマンドを入力すると、現在の各種設定(ヘッダーの有無、モード、出力先など)を一覧表示できます。

また、SQLの実行にかかった時間を計測したい場合は、.timer on を有効にすると便利です。

sqlite3
-- 実行時間の表示を有効化
.timer on

-- SQLを実行すると、最後に実行時間が表示される
SELECT COUNT(*) FROM logs;
実行結果
Run Time: real 0.005 user 0.000123 sys 0.000045

特定のSQLがボトルネックになっていないかを調査する際に非常に役立ちます。

まとめ

SQLite3のコマンドラインツールは、単なるデータベース操作の手段に留まらず、開発効率を向上させる強力な機能を備えています。

.mode.headers による視認性の向上、.import.dump によるデータ移行の自動化は、日々の実務において非常に大きな助けとなるでしょう。

特に、サーバーレスという特性を活かし、ローカルで迅速にデータを解析・加工できる点は、他のRDBMSにはない大きな魅力です。

まずは基本的なドットコマンドから使い始め、徐々に自分好みのカスタマイズを試してみてください。

今回紹介したテクニックを活用することで、SQLiteを用いた開発やデータ管理がよりスムーズに進むことを願っています。