GitHub

データベース

YurucommuはCloudflare D1(SQLite)を使用したAP-nativeなスキーマを採用しています。 すべてのActivityPubオブジェクトはAP IRIを主キーとして使用します。

設計思想

主要テーブル

actors

ローカルアクター(ユーザー)を格納

カラム 説明
ap_id TEXT PK ActivityPub IRI
type TEXT Person
preferred_username TEXT ユーザー名
name TEXT 表示名
summary TEXT 自己紹介
icon_url TEXT アイコンURL
header_url TEXT ヘッダー画像URL
inbox TEXT インボックスURL
outbox TEXT アウトボックスURL
followers_url TEXT フォロワーコレクションURL
following_url TEXT フォローコレクションURL
public_key_pem TEXT 公開鍵(PEM形式)
private_key_pem TEXT 秘密鍵(PEM形式)
follower_count INTEGER フォロワー数(非正規化)
following_count INTEGER フォロー数(非正規化)
post_count INTEGER 投稿数(非正規化)
is_private INTEGER 承認制フラグ
role TEXT owner / moderator / member

actor_cache

リモートアクターのキャッシュ

連合で取得したリモートユーザーの情報を保存。定期的に更新。

objects

投稿(Note)やストーリー(Story)などのActivityPubオブジェクト

カラム 説明
ap_id TEXT PK ActivityPub IRI
type TEXT Note / Story
attributed_to TEXT 作成者のap_id
content TEXT 本文(HTML)
summary TEXT CW(Content Warning)
attachments_json TEXT 添付メディア(JSON配列)
in_reply_to TEXT 返信先のap_id
visibility TEXT 公開範囲
community_ap_id TEXT 所属コミュニティ
end_time TEXT ストーリーの有効期限
conversation TEXT DM会話のコンテキストURL
to_json TEXT 宛先リスト(JSON配列)
cc_json TEXT CCリスト(JSON配列)
audience_json TEXT グループ宛先(JSON配列)
like_count INTEGER いいね数(非正規化)
reply_count INTEGER 返信数(非正規化)
announce_count INTEGER ブースト数(非正規化)
share_count INTEGER シェア数(非正規化)
is_local INTEGER ローカル投稿フラグ

follows

フォロー関係

カラム 説明
follower_ap_id TEXT フォローする側
following_ap_id TEXT フォローされる側
status TEXT pending / accepted / rejected
activity_ap_id TEXT Followアクティビティの参照

likes

いいね

PRIMARY KEY (actor_ap_id, object_ap_id)

bookmarks

ブックマーク(ローカル機能、連合しない)

inbox

受信したアクティビティ(通知の代わりに使用)

カラム 説明
actor_ap_id TEXT 受信者のap_id
activity_ap_id TEXT アクティビティのap_id
read INTEGER 既読フラグ
created_at TEXT 受信日時
PRIMARY KEY (actor_ap_id, activity_ap_id)

object_recipients

オブジェクトの宛先(効率的なクエリ用)

カラム 説明
object_ap_id TEXT オブジェクトのap_id
recipient_ap_id TEXT 宛先のap_id
type TEXT to / cc / bcc / audience
PRIMARY KEY (object_ap_id, recipient_ap_id)

activities

アクティビティログ(Like, Follow, Announce等)

カラム 説明
ap_id TEXT PK ActivityPub IRI
type TEXT Like / Follow / Announce 等
actor_ap_id TEXT 実行者のap_id
object_ap_id TEXT 対象のap_id
published TEXT 実行日時
local INTEGER ローカルアクティビティフラグ

communities

コミュニティ(ActivityPub Group)

story_views

ストーリー閲覧履歴

story_shares

ストーリーのシェア履歴

カラム 説明
id TEXT PK シェアID
story_ap_id TEXT ストーリーのap_id
actor_ap_id TEXT シェアしたアクター
shared_at TEXT シェア日時

dm_read_status

DM会話の既読状態

カラム 説明
actor_ap_id TEXT 既読側のap_id
conversation_id TEXT 会話コンテキスト
last_read_at TEXT 最終既読日時

dm_typing

DMのタイピング状態

カラム 説明
actor_ap_id TEXT タイピング側のap_id
recipient_ap_id TEXT 受信者のap_id
last_typed_at TEXT 最終タイピング日時

notification_archived

通知のアーカイブ状態

カラム 説明
actor_ap_id TEXT 対象ユーザー
activity_ap_id TEXT 通知アクティビティ
archived_at TEXT アーカイブ日時

マイグレーション

マイグレーションファイルは migrations/ ディレクトリにあります。

ローカルの Bun サーバーは起動時に MIGRATIONS_PATH の SQL を自動適用します。production では Takosumi が Capsule の Plan -> Apply と operator migration policy に従って D1 schema を更新します。

flow: Source の pinned commit を更新 -> Takosumi が Capsule を読み検証 -> Plan -> approval -> Apply
evidence: Run logs / StateVersion / Output / AuditEvent / operator migration record

データの確認

operator/debug 権限で provider console または Takosumi run evidence を確認します。 一般ユーザー向け docs では direct provider CLI を操作手順として公開しません。

バックアップ

Backup / restore は Takosumi control/state backup と provider backup policy の範囲です。provider service data restore は operator policy と runbook に従います。