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を、日記アプリの土台としておすすめします。クイックスタートですぐ動きます。