TinyDBとは何か?
Pythonでちょっとしたデータを保存したいとき、わざわざ重たいデータベースを用意するのは大変ですよね。そんなときに便利なのが、**TinyDB(タイニーディービー)**です。

Pythonで手軽にデータを保存・管理したい方におすすめのTinyDBをご紹介します。このガイドでは、TinyDBのインストール方法から、データの追加、検索、更新、削除といった基本操作まで、初心者にもわかりやすく解説しています。小規模なプロジェクトや学習用途に最適な軽量データベースを使ってみませんか?
TinyDBはどんなライブラリ?
TinyDBは、軽量でシンプルなNoSQLデータベースです。特に以下のような場面で役立ちます:
- 小規模なデータ保存が必要なとき
- SQLiteやMongoDBを使うほどではないアプリ
- Pythonだけで完結したいツールやスクリプト
つまり、ちょっとした「メモ帳」的な役割で使えるデータベースと言えます。
どんな特徴があるの?
TinyDBには、以下のような特徴があります。
- 依存関係が少ない:外部にサーバーを立てる必要がなく、Pythonさえあれば動きます。
- 保存形式はJSON:データはそのままJSONファイルとして保存されるため、中身を直接見ることも可能です。
- NoSQL形式:リレーショナル(表形式)ではなく、辞書型のようなデータ構造で管理します。
- 使い方がシンプル:SQLを使わず、Pythonのコードだけで操作できます。
他のデータベースとの違い
SQLiteとの違い
SQLiteも軽量なデータベースですが、SQLの文法が必要です。また、テーブル構造が決まっていて、型の制約もあります。対して、TinyDBは柔軟なデータ構造を持ち、型に縛られません。
💡 SQLiteと比較したい方はこちらの記事もおすすめ!
MongoDBとの違い
MongoDBは本格的なNoSQLデータベースで、大規模なアプリに向いていますが、別途サーバーを立てる必要があります。TinyDBはローカルのJSONファイルで完結するので、セットアップが非常に簡単です。
TinyDBのインストールと基本的な使い方
TinyDBは、Pythonに簡単に組み込むことができる軽量データベースです。この章では、インストール方法から、基本的な使い方までを丁寧に解説します。
インストール方法
TinyDBのインストールはとても簡単です。以下のコマンドをターミナルやコマンドプロンプトで実行するだけでOKです。
pip install tinydbもし仮想環境を使っている場合は、その環境を有効にしてからインストールしてください。
インストールが完了したら、すぐにPythonコードから使い始めることができます。
データベースの作成と接続
まずは、TinyDBをインポートして、データベースファイル(たとえば db.json)に接続してみましょう。
from tinydb import TinyDB
# データベースファイルに接続(なければ自動で作成されます)
db = TinyDB('db.json')このように、わずか数行でデータベースを準備できます。db.jsonというファイルが作成され、データがJSON形式で保存されるようになります。
データの挿入
TinyDBでは、辞書形式でデータを挿入します。たとえば、ユーザー情報を保存する場合はこんな感じです:
db.insert({'name': 'Taro', 'age': 25})
db.insert({'name': 'Hanako', 'age': 30})これだけで、データベースに2件のレコードが追加されます。
データの取得(検索)
TinyDBでは、データを検索するのも簡単です。すべてのデータを取得するには、以下のようにします:
all_users = db.all()
print(all_users)これで、すべてのレコードがリスト形式で取得されます。
データの更新
条件に一致するデータを更新するには、Query クラスを使います。次章で詳しく解説しますが、ここでは簡単な例を紹介します:
from tinydb import Query
User = Query()
db.update({'age': 26}, User.name == 'Taro')このコードは、name が 'Taro' のレコードの age を 26 に更新します。
データの削除
特定のデータを削除したいときも、Query を使います。
db.remove(User.name == 'Hanako')このように、指定条件に一致するレコードを削除できます。
TinyDBの基本操作は、ここまでで一通りカバーできました。とても直感的で、Pythonの辞書を扱う感覚で使えるのが魅力です。
検索条件の指定とQueryクラスの使い方
TinyDBでデータを検索・更新・削除する際に欠かせないのが、Queryクラスです。この章では、Queryクラスの基本から、複雑な検索条件の組み立て方まで、順を追ってわかりやすく解説します。
Queryクラスとは?
Query クラスは、データベースに対して検索条件を作成するための仕組みです。SQLの「WHERE句」に相当すると考えるとわかりやすいかもしれません。
まずは、基本的な使い方を見てみましょう。
from tinydb import Query
User = Query()
result = db.search(User.name == 'Taro')
print(result)このコードでは、name が 'Taro' であるレコードを検索しています。
よく使う検索演算子
TinyDBでは、以下のような検索条件が使用できます。
等しい(==)
db.search(User.age == 30)より大きい(>)、より小さい(<)
db.search(User.age > 25)
db.search(User.age < 40)否定(!=)
db.search(User.name != 'Hanako')含まれている(in)、含まれていない(not in)
db.search(User.name.one_of(['Taro', 'Hanako']))
db.search(~User.name.one_of(['Taro']))部分一致(正確な文字列検索ではなく、部分を含む)
TinyDB自体には完全な部分一致(例:"ar"を含む)機能はないため、関数を使って条件を書く必要があります。
db.search(lambda x: 'ar' in x['name'])複数条件の組み合わせ
複雑な条件も、論理演算子を使えば簡単に組み立てられます。
AND条件(かつ)
db.search((User.name == 'Taro') & (User.age == 25))OR条件(または)
db.search((User.name == 'Taro') | (User.name == 'Hanako'))NOT条件(〜を含まない)
db.search(~(User.age < 30))&、|、~ は、それぞれ AND, OR, NOT を表しています。
一致したデータの更新・削除にもQueryを使う
検索だけでなく、更新や削除にも同じようにQueryを使えます。
更新の例
db.update({'age': 35}, User.name == 'Hanako')削除の例
db.remove((User.age > 30) & (User.name == 'Hanako'))このように、柔軟に条件を組み合わせることで、かなり複雑な操作も簡単に実現できます。
ここまでで、TinyDBにおける検索とQueryクラスの基本的な使い方をマスターできたかと思います。
データの管理とストレージの仕組み
TinyDBの大きな特徴のひとつは、「JSONファイルにそのまま保存される」という点です。この章では、TinyDBのデータ保存の仕組みや、テーブルの使い分け、応用的なストレージの使い方について詳しく解説します。
TinyDBの保存形式:JSONファイル
TinyDBは、データベースを1つのJSONファイルとして保存します。たとえば、以下のようなコードを書いた場合:
from tinydb import TinyDB
db = TinyDB('db.json')
db.insert({'name': 'Taro', 'age': 25})このとき、db.json ファイルが作成され、中身は以下のようなJSON形式で保存されます:
{
"_default": [
{
"name": "Taro",
"age": 25,
"doc_id": 1
}
]
}補足:doc_id とは?
各レコードには、TinyDBが自動的に付ける一意のID「doc_id」が存在します。これにより、特定のデータを個別に扱うことができます。
db.remove(doc_ids=[1]) # IDが1のデータを削除テーブルの使い分け
TinyDBでは、1つのJSONファイルの中に複数のテーブルを作ることができます。初期状態では _default というデフォルトテーブルが使われていますが、必要に応じて別のテーブルを定義できます。
テーブルを使い分ける例
users_table = db.table('users')
tasks_table = db.table('tasks')
users_table.insert({'name': 'Hanako', 'age': 30})
tasks_table.insert({'title': '掃除', 'done': False})このように、役割ごとにテーブルを分けることで、データの整理がしやすくなります。
データベースのメモリ管理
TinyDBは、標準ではファイルに保存する仕組みですが、一時的にメモリ上で動作させることも可能です。これは、テストや一時的なデータ処理に便利です。
メモリストレージを使う例
from tinydb.storages import MemoryStorage
db = TinyDB(storage=MemoryStorage)
db.insert({'name': 'TestUser', 'age': 99})
print(db.all()) # 結果は表示されるが、保存はされないこの方法を使えば、データがファイルに保存されないため、終了後に自動的に破棄されます。
カスタムストレージの利用
TinyDBは柔軟な設計になっており、独自のストレージ形式を実装することも可能です。ただし、これは中〜上級者向けの話題になりますので、ここでは概要のみご紹介します。
TinyDBは「ストレージ」という概念で保存方法を管理しています。独自の保存方法を実装するには、Storageクラスを継承してカスタムクラスを作成する必要があります。
TinyDBはファイルベースながらも、柔軟な構造と拡張性を持っているため、小規模なプロジェクトで非常に便利に使えます。ファイル1つで管理できるという手軽さも、初心者にとって大きな魅力です。
TinyDBを使った簡易アプリケーションの例
ここでは、TinyDBを使って「ToDoリスト管理アプリ」を作成する簡単な例を紹介します。コマンドラインで動作するシンプルなプログラムですが、TinyDBの基本操作(追加・表示・完了・削除)をすべて含んでいます。
アプリの概要
以下のような機能を持った、テキストベースのToDoアプリを作ります:
- タスクの追加
- タスクの一覧表示
- タスクの完了フラグ更新
- タスクの削除
必要なライブラリ
このアプリでは tinydb のみを使います。まだインストールしていない方は、以下でインストールしてください。
pip install tinydbソースコード全文
from tinydb import TinyDB, Query
# データベースに接続(tasks.jsonが自動作成されます)
db = TinyDB('tasks.json')
tasks = db.table('tasks') # テーブル名を明示
def add_task(title):
tasks.insert({'title': title, 'done': False})
print(f"タスク「{title}」を追加しました。")
def list_tasks():
all_tasks = tasks.all()
if not all_tasks:
print("登録されているタスクはありません。")
return
print("【ToDoリスト】")
for task in all_tasks:
status = '✔' if task['done'] else '✗'
print(f"{task.doc_id}. [{status}] {task['title']}")
def complete_task(task_id):
Task = Query()
tasks.update({'done': True}, doc_ids=[task_id])
print(f"タスクID {task_id} を完了に設定しました。")
def delete_task(task_id):
tasks.remove(doc_ids=[task_id])
print(f"タスクID {task_id} を削除しました。")
# 実行用の簡易インターフェース
def menu():
while True:
print("\n=== ToDoアプリ ===")
print("1. タスク追加")
print("2. タスク一覧")
print("3. タスク完了")
print("4. タスク削除")
print("5. 終了")
choice = input("番号を選んでください: ")
if choice == '1':
title = input("タスク内容: ")
add_task(title)
elif choice == '2':
list_tasks()
elif choice == '3':
task_id = int(input("完了にするタスクID: "))
complete_task(task_id)
elif choice == '4':
task_id = int(input("削除するタスクID: "))
delete_task(task_id)
elif choice == '5':
print("アプリを終了します。")
break
else:
print("無効な入力です。")
if __name__ == "__main__":
menu()実行方法
このコードを todo.py などのファイルに保存して、以下のコマンドで実行してください。
python todo.pyターミナル上でメニューが表示され、番号を入力することでタスクの追加や完了ができます。
補足:実用性と安全性
この例は学習用のミニアプリなので、入力チェックや例外処理などは最小限です。実際のアプリケーションでは、入力エラーやファイル破損への対処なども必要になります。
このように、TinyDBを使えば簡単なアプリを素早く作ることができます。学習用途にもぴったりですし、ちょっとしたツール作成にも十分使えるパワーを持っています。
TinyDBのメリット・デメリットと適した用途
ここまでTinyDBの使い方を詳しく紹介してきましたが、実際に使うとなると「どんな場面で使えるのか」「どこまで頼れるのか」が気になるところですよね。この章では、TinyDBの長所と短所を整理し、どのような用途に向いているのかを具体的に解説します。
TinyDBのメリット
導入が簡単
pip install tinydbだけでインストール可能- 外部のデータベースサーバーが不要
- ファイル1つでデータ管理できるため、初心者にも扱いやすい
柔軟で直感的なAPI
- Pythonの辞書(dict)感覚でデータを操作できる
- SQLの知識がなくてもすぐに使える
- 条件検索やテーブル分割もシンプルに記述可能
軽量で高速
- 小〜中規模のアプリケーションに最適
- JSONファイルを直接操作するため、オーバーヘッドが少ない
拡張性がある
- ストレージの仕組みを差し替えることができる
- カスタムクエリや独自処理の実装も可能
TinyDBのデメリット
データ量に限界がある
- JSONファイルにすべてのデータが保存されるため、大量のデータには不向き
- 数千〜数万件を超えると、読み書き速度が低下する可能性がある
同時アクセスに弱い
- ファイルベースのため、複数プロセスからの同時アクセスには対応が難しい
- スレッドセーフではないため、マルチスレッド環境では注意が必要
検索機能は限定的
- 複雑なインデックスや正規表現検索には対応していない
- パフォーマンスチューニングの余地が少ない
TinyDBが向いている用途
TinyDBは、以下のような用途にぴったりです:
- 個人のツール・スクリプトのデータ保存
- 小規模なデスクトップアプリケーション
- 学習用やプロトタイプのデータストア
- Webアプリのバックエンドテスト用(本番には非推奨)
- IoTデバイスなど、リソース制限のある環境
TinyDBが不向きな用途
逆に、次のような場合には他のデータベースを検討することをおすすめします:
- 大量のデータを扱う業務システム(→ SQLite、PostgreSQLなど)
- 多人数・多プロセスが同時にアクセスする環境(→ MongoDB、MySQLなど)
- 複雑なデータ構造とパフォーマンス最適化が必要な場合
まとめ
TinyDBは、「シンプルさ」と「手軽さ」を最大の強みにしたデータベースです。学習目的や、小規模アプリのプロトタイプなどでは非常に優秀な選択肢となります。
一方で、規模が大きくなるにつれて制約も見えてくるため、適材適所で他のDBと使い分けることが大切です。
「とりあえずデータをちょっと保存したいな」と思ったとき、TinyDBはきっとあなたの頼れるパートナーになってくれるはずです。

ここまで読んでいただきありがとうございます!
UdemyのPythonコースにはオンラインで学習ができる動画コンテンツがたくさんあります。
当ブログのような文章メインの説明では足りない箇所を補えると思うので、もっと詳しく勉強したいという方はぜひチェックしてみてください!



コメント