Shelflet

SQLite不要。Python標準ライブラリで動く、究極の軽量ORM

設定ゼロ、シンプルに始めたい開発者のために。

Shelflet(シェルフレット)は、Python組み込みの shelve をベースとした、軽量データ管理ORMシステムです。

データベースサーバーの構築や、SQLiteのファイル管理すら面倒。そんな時のための「ちょうどいい」ソリューションを提供します。モデル定義を書くだけで、バリデーションやリレーションが手に入ります。

Shelflet Usage

モデル定義と直感的な操作

主な特徴

外部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アプリケーションやユーティリティの開発を行っています。

公式ホームページ