設定ゼロ、シンプルに始めたい開発者のために。
Shelflet(シェルフレット)は、Python組み込みの shelve をベースとした、軽量データ管理ORMシステムです。
データベースサーバーの構築や、SQLiteのファイル管理すら面倒。そんな時のための「ちょうどいい」ソリューションを提供します。モデル定義を書くだけで、バリデーションやリレーションが手に入ります。
モデル定義と直感的な操作
主な特徴
外部DB不要
Python標準ライブラリのみで動作。インストールの手間なく、即座にプロジェクトに導入できます。
強力なバリデーション
モデル定義に基づき、データの型や必須チェックを自動で行います。不正なデータの混入を防ぎます。
リレーション対応
多対1(ForeignKey)や多対多(ManyToManyField)をサポート。複雑なデータ構造も直感的に扱えます。
マルチプロセス安全
ファイルロック機構(msvcrt/fcntl)により、CGI環境などの複数プロセスからの同時アクセスにも対応。
入出力の柔軟性
JSON形式でのインポート・エクスポートに標準対応。他システムとの連携やバックアップも簡単です。
柔軟なクエリ
プロパティによる等値検索に加え、ラムダ式を用いた自由度の高いフィルタリングが可能です。
クイックスタート
1. インストール
外部ライブラリは不要です。shelflet.pyをプロジェクトにコピーしてください。
2. モデルの定義
shelflet.py をインポートしてモデルを定義します。
from shelflet import Model, CharField, IntegerField, ForeignKey
class Author(Model):
name = CharField(required=True)
age = IntegerField()
class Book(Model):
title = CharField(required=True)
author = ForeignKey(Author, backref='books')
# データの保存
author = Author(name="門王", age=30)
author.save()
book = Book(title="Shelflet入門", author=author)
book.save()
3. 高度な検索と連携
複雑な条件でのフィルタリングや、JSON形式でのデータ移行も標準機能でサポートしています。
# ラムダ式によるフィルタリング
adult_authors = Author.filter(lambda a: a.age >= 20)
# 関連データの取得 (逆参照)
for book in author.books():
print(book.title)
# JSONへのエクスポート
Author.export_json("authors_backup.json")
よくある質問
Q. SQLiteと何が違うのですか?
A. SQLiteは強力なRDBMSですが、ファイル管理や型定義が切り離されています。ShelfletはPythonオブジェクトとしてデータを扱い、定義と永続化を一体化させることで、より迅速なプロトタイピングを可能にします。
Q. 大規模なデータにも対応できますか?
A. Pythonの shelve をベースにしているため、数万件程度のデータであれば軽快に動作しますが、数百万件を超えるような巨大なデータセットや、複雑なトランザクション管理が必要な場合は、PostgreSQLやMySQLなどの利用をお勧めします。
Q. どのような環境で動きますか?
A. Python 3.6以降の標準ライブラリのみを使用しているため、Windows, macOS, Linuxのあらゆる環境で動作します。レンタルサーバーのCGI環境など、追加ライブラリのインストールが制限されている場所でも威力を発揮します。
Q. データの安全性は?
A. ファイルロック機構により、同時書き込みによる破損を防いでいます。また、JSON形式での書き出しが容易なため、定期的なバックアップも簡単に行えます。
ライセンス・商用利用について
BSD 3-Clause License
ShelfletはオープンソースとしてBSD 3-Clauseライセンスで公開されています。
商用利用・カスタマイズをご検討の方へ
BSDライセンスにより、商用・個人を問わず自由にご利用いただけます。もし「独自の機能を追加したい」「商用プロジェクトへの導入サポートが必要」といった場合は、受託開発や、カスタマイズの開発依頼も承っております。
開発元について
門王 (Monou)
シンプルで強力なツールの開発を通じて、エンジニアの「面倒くさい」を解決することを目指しています。
Shelfletの他にも、様々なWebアプリケーションやユーティリティの開発を行っています。