asopi tech
asopi techIndie Developer

Asopitech With · 日記アプリ

Day One with Alopex DB

Day Oneは、写真や音声を添えて書ける日記のアプリです。これをAlopex DBを使って再現すると…?

更新: 2026/10/12

どんなサービスか

Day Oneは、日記のアプリです。日記には写真、動画、音声を添えられ、同じ日付の過去の日記を振り返れます。日記はパスコードで守り、いつでも書き出せます。扱うデータは、日記の本文、日付、添付の情報、場所です。

データの置き場所

  • SQLテーブル:日記、ジャーナル、タグをテーブルに持ちます。同じ日付の過去の日記は、日付の条件で引きます。
  • JSON:場所、天気、添付の情報など、日記ごとに違う項目をJSONの列に持ちます。
  • ベクトル:本文の埋め込みをベクトル列に持ち、「子どもと海に行った日」のような問いで日記を探します。

添付のファイルは端末に置き、テーブルにはその情報だけを持ちます。

配置の形

Alopex DBを、端末のアプリに組み込みます。日記はすべて、端末の中の1つの .alopex ファイルに入ります。書き出しは、そのファイルのコピーです。

Alopex DBが合う理由

日記は、いちばん私的なデータです。Alopex DBは、端末の中で日記と意味検索をひとつにまとめ、サーバーを持たずに長い年月の日記を扱えます。

コードで見る

日記を本文・日付・埋め込みで持ち、意味の近さで過去の日記をたどります。探す中心だけを取り出したコードです。

import alopex
import numpy as np

db = alopex.Database.open("dayone.alopex")

# 日記(本文+日付+埋め込み)を持つ。埋め込みはアプリが作る
db.execute_sql("""
    CREATE TABLE IF NOT EXISTS entries (
        id INTEGER PRIMARY KEY,
        entry_date DATE,
        body TEXT,
        embedding VECTOR(4)
    )
""")

entries = [
    (1, "2026-08-10", "子どもと海に行った", [0.9, 0.1, 0.0, 0.0]),
    (2, "2026-09-02", "確定申告の準備をした", [0.0, 0.0, 0.9, 0.1]),
    (3, "2026-09-20", "家族で山にキャンプ", [0.8, 0.2, 0.0, 0.0]),
]
for eid, d, body, emb in entries:
    db.execute_sql(
        "INSERT INTO entries (id, entry_date, body, embedding) VALUES (?, ?, ?, ?)",
        [eid, d, body, np.array(emb, dtype=np.float32)],
    )

# 「家族で出かけた日」に近い日記を、意味で探す
query = np.array([1.0, 0.0, 0.0, 0.0], dtype=np.float32)
rows = db.execute_sql(
    """
    SELECT entry_date, body, vector_similarity(embedding, ?, 'cosine') AS score
    FROM entries
    ORDER BY score DESC
    LIMIT 2
    """,
    [query],
)
for row in rows:
    print(row["entry_date"], round(row["score"], 3), row["body"])

言葉が思い出せなくても、意味の近さで、その日の日記にたどり着けます。

日記の本文、場所、意味検索を端末の中のファイルにまとめられるAlopex DBを、日記アプリの土台としておすすめします。クイックスタートですぐ動きます。

関連リンク