データベース
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 | ストーリーの有効期限 |
| like_count | INTEGER | いいね数(非正規化) |
| reply_count | INTEGER | 返信数(非正規化) |
| announce_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
ブックマーク(ローカル機能、連合しない)
notifications
通知
communities
コミュニティ(ActivityPub Group)
story_views
ストーリー閲覧履歴
マイグレーション
マイグレーションファイルは migrations/ ディレクトリにあります。
# マイグレーション状態を確認
npx wrangler d1 migrations list yurucommu-db --remote
# マイグレーションを適用
npx wrangler d1 migrations apply yurucommu-db --remote
データの確認
# テーブル一覧
npx wrangler d1 execute yurucommu-db --remote \
--command "SELECT name FROM sqlite_master WHERE type='table'"
# データ確認
npx wrangler d1 execute yurucommu-db --remote \
--command "SELECT * FROM actors LIMIT 5"
バックアップ
D1のデータをエクスポートするには:
npx wrangler d1 export yurucommu-db --remote --output backup.sql