データベース
YurucommuはCloudflare D1(SQLite)を使用したAP-nativeなスキーマを採用しています。 すべてのActivityPubオブジェクトはAP IRIを主キーとして使用します。
設計思想
- AP-native - ActivityPub 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 に従います。