asopi tech
asopi techIndie Developer

Asopitech With · クラウドストレージ

Dropbox ファイル同期 with Alopex DB

Dropboxのファイル同期は、クラウドストレージのDropboxで、ファイルと版の履歴を端末どうしでそろえる仕組みです。Alopex DBで同じものを作るとしたら…?

更新: 2026/10/12

どんなサービスか

Dropboxは、ファイルを端末どうしで同期し、共有するサービスです。保存したファイルは自動ですべての端末に同期され、以前の版に戻せます。オフラインで編集した分は、つながったときに反映されます。扱うデータは、ファイルとフォルダの情報、版の履歴、共有の設定です。

データの置き場所

  • SQLテーブル:ファイル、フォルダ、版、共有をテーブルに持ちます。以前の版の一覧は、版のテーブルから引きます。
  • トランザクション:ファイルの移動や名前の変更と、版の追加を、同じトランザクションでコミットします。

ファイルの中身は、ファイルのストレージに置き、テーブルにはその情報だけを持ちます。

配置の形

端末のアプリにはAlopex DBを組み込み、オフラインでもファイルの一覧と版を引けます。クラウドではAlopex DBのサーバーが同期を受け、利用者が増えたらAlopex DBのクラスタに広げます。端末とサーバーで同じSQLを使います。

Alopex DBが合う理由

同期のサービスは、端末とクラウドの両方に同じファイルの情報を持ちます。Alopex DBは、端末の組み込みとサーバーで同じデータの形とSQLを使えるので、両方の作りがそろいます。

コードで見る

ファイルと版をテーブルに持ち、改名と版の追加を同じトランザクションでコミットします。整合を守る中心だけを取り出したコードです。

import alopex

# 端末にもサーバーにも同じSQL。ここでは端末側の .alopex ファイル
db = alopex.Database.open("dropbox.alopex")

db.execute_sql("""
    CREATE TABLE IF NOT EXISTS files (
        id INTEGER PRIMARY KEY,
        name TEXT
    )
""")
db.execute_sql("""
    CREATE TABLE IF NOT EXISTS versions (
        file_id INTEGER,
        rev INTEGER,
        note TEXT,
        created DATE
    )
""")

db.execute_sql("INSERT INTO files (id, name) VALUES (?, ?)", [1, "report.txt"])
db.execute_sql("INSERT INTO versions (file_id, rev, note, created) VALUES (?, ?, ?, ?)", [1, 1, "初版", "2026-10-18"])

# 改名と版の追加を、同じトランザクションでコミットする
tx = db.begin(alopex.TxnMode.READ_WRITE)
try:
    tx.execute_sql("UPDATE files SET name = ? WHERE id = ?", ["report-final.txt", 1])
    tx.execute_sql("INSERT INTO versions (file_id, rev, note, created) VALUES (?, ?, ?, ?)", [1, 2, "改名", "2026-10-20"])
    tx.commit()
except Exception:
    tx.rollback()
    raise

# 版の履歴を新しい順に引く
rows = db.execute_sql("""
    SELECT v.rev, v.note, v.created
    FROM versions AS v
    JOIN files AS f ON f.id = v.file_id
    WHERE f.name = ?
    ORDER BY v.rev DESC
""", ["report-final.txt"])

for row in rows:
    print(f"rev{row['rev']}", row["created"], row["note"])

改名と版の追加が、ひとつのトランザクションでまとまります。途中の状態が見えることはありません。

端末への組み込みとサーバーで同じSQLを使えるAlopex DBは、同期のサービスの両側をそろえられます。クイックスタートで両方を試せます。

関連リンク