Skip to content

フォロー通知を実装しました#104

Merged
totegamma merged 5 commits into
mainfrom
followNotification
Jun 18, 2026
Merged

フォロー通知を実装しました#104
totegamma merged 5 commits into
mainfrom
followNotification

Conversation

@inugamine

Copy link
Copy Markdown
Contributor

resolve #96

フォロー通知を実装しました

背景

フォロー通知が今まで無かったのは、association のつけ先(entity / profile / ack)が定まっていなかったため。ととがんまさんの判断で ack ドキュメントの ccfs:// を対象につける 方針に決定したので、それを実装しました。

仕組み

  1. client.Acknowledge(to) が従来どおり ack ドキュメントを commit し、戻り値の SignedDocument.ccfs を取得する
  2. その ccfsassociate にした kind: 'association' のフォロー association を作成
  3. distributes に自分の activity-timeline と相手の notify-timeline を指定して commit(fav / reaction と同じ通知経路)
  4. 相手の NotificationTimeline がこの association を拾い、「○○さんがあなたをフォローしました」として表示する
    ack 本体と通知用 association を分離しているのは、ack を social graph のプリミティブとして純粋に保ちつつ、通知配信は fav / reaction と同じ「association → distributes」の仕組みに乗せるため。

変更点

worldlib

  • schemas.ts: followAssociation: 'https://schema.concrnt.world/a/follow.json' を追加
  • schemas/followAssociation.ts: 新規。FollowAssociationSchema 型(likeAssociation に倣い profileOverride? のみ)
  • schemas/index.ts: 上記を re-export
  • client.ts: Acknowledge に、ack commit 後のフォロー association 生成・配信処理を追加。通知の commit 失敗はフォロー自体に影響させない(ack は成立済みなので catch してログのみ)

app/src, web/src(両方に同じ変更)

  • components/NotificationTimeline.tsx:
    • Schemas.followAssociation を schema 分岐に追加。集約せず 1 件ずつ表示するため $follow サフィックスでキー化
    • FollowNotification コンポーネントを追加(人追加アイコン + フォロワーのアバター + 文言、タップで相手のプロフィールへ)
    • app は useStack().push(<ProfileView />)、web は navigate('/profile/:ccid') と、導線のみ差分

設計判断(レビュー観点)

  • スキーマ URL = a/follow.json: 既存 association(a/*.json)に揃えました。ack 本体は schema.concrnt.net/acknowledge.json で名前空間が別なので衝突しません。
  • 通知先 profile = main 固定: フォローは entity 単位だが notify-timeline は profile 単位。fav の || 'main' フォールバックに合わせました。
  • アンフォロー時は通知を送らず、既存通知も削除しません: 「フォローされた」は履歴イベントとして残す一般的な SNS 挙動に倣いました。再フォロー時は新規通知が飛びます。
  • 集約せず 1 件ずつ表示します: like / reaction と違いフォローは対象投稿を持たないため、集約すると時系列がぼやけるため。

動作確認

  • 別アカウントから対象ユーザーをフォロー → 対象ユーザーの通知欄に「○○さんがあなたをフォローしました」が表示される
  • 通知タップでフォロワーのプロフィールへ遷移する
  • app(実機)で確認
  • web で確認

worldlib を変更しているため、レビュー / 動作確認時は pnpm -r build 後にお願いします。

@totegamma totegamma merged commit 2291840 into main Jun 18, 2026
1 check passed
@totegamma totegamma deleted the followNotification branch June 18, 2026 15:56
@totegamma

Copy link
Copy Markdown
Member

todo: notification timelineだけでなく、通常messageの表示箇所でもfollowAckを表示できるようにする

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

アクティビティ欄にてフォローイベントを表示

2 participants