asopi tech
asopi techIndie Developer

Asopitech With · プロジェクト管理

Trello ボード with Alopex DB & Alopex Chirps

Trelloは、ボードの上でカードをリストからリストへ動かし、チームの仕事の流れを見えるようにするプロジェクト管理のツールです。これをAlopex DBとAlopex Chirpsで作り直すと…?

更新: 2026/10/13

どんなサービスか

Trelloの基本の部品は、ボード、リスト、カードです。リストで仕事の流れを作り、カードを各段階に動かします。カードは、ボードの中でいちばん小さく、いちばん詳しい単位です。今回作り直すのは、ボードとカードの部分です。

データの置き場所

  • Alopex DBのSQLテーブル:ボード、リスト、カード、メンバー、カードのコメントをSQLテーブルに持ちます。カードの並びは、リストと順番の列で表します。
  • Alopex Chirpsのメッセージ:カードを動かした、書き換えたという変更を、サーバーのノードの間にChirpsで届けます。
  • 合意:同じカードへの変更の順番は、ChirpsのRaftの合意でそろえます。

変更を画面に反映するのは、アプリのコードです。

配置の形

Alopex DBとChirpsを、サーバーのノードに組み込みます。ボードのデータはAlopex DBのクラスタに置き、ノードの一覧と生死はChirpsのgossipのメンバーシップで分かります。

Alopex DBとAlopex Chirpsが合う理由

ボードのデータは、リストとカードの関係と、その順番です。Alopex DBはその関係をSQLで持ち、Chirpsは変更をノードの間に直接届けます。メッセージのための別のサーバーは要りません。

コードで見る

ボード・リスト・カードはAlopex DBが持ちます(変更の配送はChirps)。カードを動かして並べ替える中心だけを取り出したコードです。

import alopex

# ボード・リスト・カードは Alopex DB(変更の配送は Chirps)
db = alopex.Database.open("trello.alopex")

db.execute_sql("CREATE TABLE IF NOT EXISTS lists (id INTEGER PRIMARY KEY, name TEXT)")
db.execute_sql("""
    CREATE TABLE IF NOT EXISTS cards (
        id INTEGER PRIMARY KEY,
        list_id INTEGER,
        pos INTEGER,
        title TEXT
    )
""")

for lid, name in [(1, "ToDo"), (2, "Doing")]:
    db.execute_sql("INSERT INTO lists (id, name) VALUES (?, ?)", [lid, name])
for cid, list_id, pos, title in [(1, 1, 0, "仕様を書く"), (2, 1, 1, "レビュー依頼"), (3, 2, 0, "実装")]:
    db.execute_sql("INSERT INTO cards (id, list_id, pos, title) VALUES (?, ?, ?, ?)", [cid, list_id, pos, title])

# カードを別のリストへ動かす(list_id と pos を書き換える)
db.execute_sql("UPDATE cards SET list_id = ?, pos = ? WHERE id = ?", [2, 1, 2])

# 「Doing」リストのカードを順番に並べる
for row in db.execute_sql("""
    SELECT c.pos, c.title
    FROM cards AS c
    JOIN lists AS l ON l.id = c.list_id
    WHERE l.name = ?
    ORDER BY c.pos
""", ["Doing"]):
    print(row["pos"], row["title"])

カードの移動は list_id と pos の書き換えです。その変更をノードの間に届け、順序をそろえるのはChirpsが受け持ちます。

ボードの関係はAlopex DB、変更の配送はAlopex Chirps。共同作業のサービスに、この組み合わせをおすすめします。

関連リンク