GitHub

データベース

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

設計思想

主要テーブル

actors

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

カラム説明
ap_idTEXT PKActivityPub IRI
typeTEXTPerson
preferred_usernameTEXTユーザー名
nameTEXT表示名
summaryTEXT自己紹介
icon_urlTEXTアイコンURL
header_urlTEXTヘッダー画像URL
inboxTEXTインボックスURL
outboxTEXTアウトボックスURL
followers_urlTEXTフォロワーコレクションURL
following_urlTEXTフォローコレクションURL
public_key_pemTEXT公開鍵(PEM形式)
private_key_pemTEXT秘密鍵(PEM形式)
follower_countINTEGERフォロワー数(非正規化)
following_countINTEGERフォロー数(非正規化)
post_countINTEGER投稿数(非正規化)
is_privateINTEGER承認制フラグ
roleTEXTowner / moderator / member

actor_cache

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

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

objects

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

カラム説明
ap_idTEXT PKActivityPub IRI
typeTEXTNote / Story
attributed_toTEXT作成者のap_id
contentTEXT本文(HTML)
summaryTEXTCW(Content Warning)
attachments_jsonTEXT添付メディア(JSON配列)
in_reply_toTEXT返信先のap_id
visibilityTEXT公開範囲
community_ap_idTEXT所属コミュニティ
end_timeTEXTストーリーの有効期限
like_countINTEGERいいね数(非正規化)
reply_countINTEGER返信数(非正規化)
announce_countINTEGERブースト数(非正規化)
is_localINTEGERローカル投稿フラグ

follows

フォロー関係

カラム説明
follower_ap_idTEXTフォローする側
following_ap_idTEXTフォローされる側
statusTEXTpending / accepted / rejected
activity_ap_idTEXTFollowアクティビティの参照

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