データベース
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 | アーカイブ日時 |
マイグレーション
マイグレーションファイルは
@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 に従います。