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 アーカイブ日時

マイグレーション

マイグレーションファイルは @takosjp/yurucommu-core パッケージの migrations/ を管理元とします。デプロイする リポジトリには重複したコピーを置きません。

ローカルの core Bun サーバーは起動時に MIGRATIONS_PATH の SQL を適用します。 Cloudflare 直接経路では bun run deploy が Wrangler の D1 マイグレーションを実行します。Takosumi 経路では operator が設定した バージョン管理されたライフサイクルアクションとして適用します。 Takosumi 自体がデータベースの種類やコマンドを推測することはありません。

Cloudflare: bun run deploy -> D1 migration -> wrangler deploy
Takosumi: Git URL 登録 -> Plan -> 承認 -> Apply -> 復元ポイント + 実行結果 + 履歴

データの確認

直接経路は Cloudflare dashboard または Wrangler、Takosumi 経路は operator / debug 権限で provider console または実行記録の証跡を確認します。

バックアップ

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