asopi tech
asopi techIndie Developer

Asopitech With · タスク管理

Todoist フィルター with Alopex DB

Todoistは、思いついたタスクをすぐに書き留め、プロジェクトやラベル、フィルターで整理するタスク管理アプリです。これをAlopex DBで作り直すと…?

更新: 2026/10/13

どんなサービスか

Todoistでは、ふだんの言葉でタスクを書き留め、プロジェクトとラベルで整理します。ラベルは、プロジェクトをまたいで似たタスクをまとめます。フィルターは、問い合わせの書き方で条件を書いた、タスクの独自の見え方です。今回作り直すのは、タスクとフィルターの部分です。

データの置き場所

  • Alopex DBのSQLテーブル:タスク、プロジェクト、セクション、ラベル、タスクとラベルの対応をSQLテーブルに持ちます。
  • SQL:フィルターの条件は、期限、優先度、ラベル、プロジェクトをつなぐSQLの条件に置き換えます。
  • 全文検索:タスクの名前とメモを全文検索で探します。

タスクの文章から期限を読み取るのは、アプリのコードです。

配置の形

Alopex DBを、スマホとパソコンのアプリに組み込みます。タスクは手元にあるので、すぐに開けます。チームで共有するタスクは、同じエンジンのAlopex DBのサーバーで受けます。

Alopex DBが合う理由

タスク管理のデータは、タスク、プロジェクト、ラベルの関係と、それを切り出す条件です。Alopex DBは、その関係をSQLテーブルで持ち、フィルターをSQLの条件として端末の中で動かします。

コードで見る

タスクとラベルをテーブルに持ち、フィルターをSQLの条件で書きます。Alopex DBを端末の中のデータの層にした、コアの部分だけを取り出したコードです。

import alopex
from datetime import date, timedelta

# Alopex DB を端末の中のデータの層にする(アプリに組み込む想定)
db = alopex.Database.open("todoist.alopex")

# タスクとラベルを SQL テーブルで持つ(ラベルはプロジェクトをまたいでまとめる)
db.execute_sql("""
    CREATE TABLE IF NOT EXISTS tasks (
        id INTEGER PRIMARY KEY,
        content TEXT NOT NULL,
        project TEXT,
        priority INTEGER,
        due DATE
    )
""")
db.execute_sql("""
    CREATE TABLE IF NOT EXISTS task_labels (
        task_id INTEGER,
        label TEXT
    )
""")

# タスクを書き留める
db.execute_sql(
    "INSERT INTO tasks (id, content, project, priority, due) VALUES (?, ?, ?, ?, ?)",
    [1, "請求書を送る", "仕事", 3, "2026-10-24"],
)
db.execute_sql(
    "INSERT INTO task_labels (task_id, label) VALUES (?, ?)",
    [1, "@お金"],
)

# フィルター=SQL の条件。「今週が期限・優先度が高い・@お金のタスク」
week_end = (date.today() + timedelta(days=7)).isoformat()
rows = db.execute_sql(
    """
    SELECT t.id, t.content, t.due
    FROM tasks AS t
    JOIN task_labels AS l ON l.task_id = t.id
    WHERE t.due <= CAST(? AS DATE)
      AND t.priority >= 3
      AND l.label = ?
    ORDER BY t.due
    """,
    [week_end, "@お金"],
)

for row in rows:
    print(row["due"], row["content"])

フィルターは、期限・優先度・ラベルをつなぐSQLの条件です。見たい切り口が変わっても、条件を書き換えるだけで済みます。

フィルターをそのままSQLの条件で書けるAlopex DBを、タスクアプリに組み込んでみよう。

関連リンク