記録する場所と、
共有する場所を分ける

Trailcast / AT Protocol / PDS

@shino3.net  ·  trailcast.shino3.net  ·  github.com/ShinoharaTa/trailcast

Trailcast は、自分の体験を時系列で残すアプリ

9/1015:42
成田空港
写真 1枚コメント
9/1021:05
西九州新幹線
写真 3枚コメント
9/1021:39
長崎駅
写真 4枚コメント
9/1110:06
出島
写真 4枚コメント
9/1116:09
佐世保
写真 3枚コメント
9/1119:33
嬉野温泉
写真 3枚コメント
trailcast.shino3.net のスレッド画面

trailcast.shino3.net

実際の記録「2026-09 九州」全 25 チェックポイントから抜粋  ·  旅行 / 開発記録 / 謎解き参加 などに利用

タイムラインは、記録には向いていない

Bluesky / SNS
自分の投稿
他人の投稿
おすすめ
返信
リポスト
自分の投稿
ニュース
Trailcast
15:42  成田空港
21:05  西九州新幹線
21:39  長崎駅
22:25  宿へ

SNS は共有には強い。でも、自分の履歴を辿る用途とは性質が違う。

記録は、自分の PDS に保存する

自分の PDS
Trailcast

記録する / 振り返る

Bluesky

共有する / 会話する

自分の PDS に置くと、何がいいか

データは自分の PDS に残る

Trailcast というアプリが無くなっても、記録は自分の手元に残る。
他のアプリからも同じ記録を読める。

独自のキーで自由に設計できる

Bluesky の投稿の型に合わせなくていい。
net.shino3.trailcast.post に必要な項目だけを持たせる。

checkpointAt ・ images ・ sourceRef ・ thread

PDS は「Bluesky 用の保存先」ではなく、自分のレコード置き場。

PDS に入っている実物

at://did:plc:rpwpuzu2yyiuufm3232d7pm5/
net.shino3.trailcast.post/1ir3qi7qjlg7d

{
  "$type": "net.shino3.trailcast.post",
  "thread": "at://…/net.shino3.trailcast.thread/1ir3d4o0rdg66",
  "text": "見渡す限り一面の曇り空",
  "images": [ { "$type": "blob", "mimeType": "image/jpeg",
           "size": 60670, "ref": { "$link": "bafkrei…" } } ],
  "checkpointAt": "2026-09-10T09:57:03.000Z",
  "createdAt":    "2026-09-10T10:43:47.084Z",
  "sourceRef": "at://…/app.bsky.feed.post/3mv5umbf3ae2l"
}

rkey は時刻から作る

(now_µs << 10 | clock)
  .toString(32)
  • 1ir3d606ms82j9/10 15:42
  • 1ir3g666rqosq9/10 16:19
  • 1ir3qi7qjlg7d9/10 18:57

文字列として並べるだけで時系列になる。並び替えの仕組みが要らない。

$type が独自なので、Bluesky のタイムラインには一切出ない。sourceRef がクロスポスト先への参照。

Trailcast には「みんなの Trailcast」がない

PDS A
Trailcast データ
PDS B
Trailcast データ
PDS C
Trailcast データ

全ユーザーの記録を集約するビューを持たない

検索ランキング / おすすめ / 人気投稿 / 全体フィード を作らない

サーバーに持っているのは「索引」だけ

Cloudflare Pages
Next.js静的書き出し。PDS へはブラウザから XRPC で直接読み書き
Functions/api/index/sync ・ /api/index/thread、OGP の meta 差し込み
D1post_index: post_uri / thread_uri / checkpoint_at
  • 本文・画像・位置情報は持たない。at-uri と時刻だけ
  • 公開スレッドに複数人が投稿したぶんを束ねるためだけにある
  • 全部消しても /api/index/sync で各 PDS から作り直せる
  • ランキング・おすすめ・全体フィードは作らない

これが「AppView を持たない」の実装上の意味。正本はいつも各ユーザーの PDS。

コミュニティが、記録の構造を壊さない

コミュニティ型サービス
全ユーザーの投稿
ランキング / おすすめ / トレンド / 人気投稿
自分の体験が埋もれる
Trailcast
自分の PDS
自分の記録
そのまま残る

記録空間は、他人の活動によって変形しない。

共有は捨てない

Trailcast で記録
クロスポストする
Bluesky
フォロワー
リプライ
リアクション
そのまま残る
自分の PDS
共有しても、
Trailcast 側の記録構造は変わらない

「2026-09 九州」の 19 件はすべて Bluesky へクロスポスト済み。PDS 上の記録が持つのは Bluesky 投稿への参照 1 つだけ。

記録する空間と、共有する空間を分ける

Trailcast
  • 自分の記録
  • 時系列
  • PDS
  • 振り返る
Bluesky
  • 他人とつながる
  • フィード
  • 会話
  • 共有

PDS は使う。コミュニティ空間は作らない。

Trailcast は、自分の記録を
自分の領域に残す。

共有したいものだけ、Bluesky へ。

trailcast.shino3.net  ·  github.com/ShinoharaTa/trailcast

1 / 1