あるatprotoユーザーのユーザーストーリー

@knksm5.final-techblog.com

私はコンテンツプラットフォームを作りたいと思っている開発者です。
自分のプラットフォームを盛り上げるにはどうすればいいか考えています。
そのためにまず、ターゲットユーザーがどんなことを考えていて、どうしたら貢献できるか考えることにしました。

コンテンツを作る人は何を考えているのか

コンテンツプラットフォームには二種類のユーザー、コンテンツを作る人と見る人がいます。
まずコンテンツを作る人に関して考えていきます。

ソーシャルメディア上でコンテンツ、文章や絵や動画を公開する人たちはなぜ投稿し、どんな基準でプラットフォームを選ぶのでしょうか?
なんでInstagramに旅行の写真を載せ、TikTokやYouTubeに動画をアップし、Xで許せない出来事や理不尽をシェアするんでしょうか? 私が思いつく限りで、コンテンツを作って全世界に公開する動機は私が割合が高いと思う順に

  1. コンテンツを褒められたり共感されたい。 多くの人や自分が好きな有名人に 見てもらい、すごいね、といっぱい褒められたり肯定されたい。まさかね、と思いつつも心の奥ではひょんなことから有名人になり、クラスのみんなに一目置かれることを期待しており、芸能事務所からスカウトが来て芸能人となり、イケメン俳優やアイドルグループメンバーと付き合ったり結婚したい。
  2. お金を稼ぎたい。多くの人に知ってもらって 有料で買ってもらったり、サポーターになってもらって定期的にお金を払ってもらったり、寄付してもらいたい。商品を宣伝するための動画を作って買ってもらいたい。
  3. 自分の意見を主張し、 多くの人の心を動かして 世の中を変えたい
  4. 自分が持っているスキルや知見を活かした何か発表し、多くに共有・いいねされる ことで能力を証明するエビデンスにしたい

とかだと思います1
プラットフォーム選びも当然動機に基づいたものになるはずです。つまり、

  1. 多くの人に見てもらって共感されやすい プラットフォーム。クラスのみんなが使っていて、芸能人も見ている。プラットフォームごとに喜び、驚き、怒りといったTPOがあるから、それに応じて使い分ける
  2. お金を稼ぎやすいプラットフォーム。つまり 多くの人の目につき、コンテンツを売ったり、サブスクリプションできる 仕組みがあるところ
  3. 多くの人に見てもらい、意見を変えさせる チャンスがあるプラットフォーム
  4. 多くの人にいいねしてもらえる プラットフォーム

大前提としてこれらがクリアされたうえで、 じゃあ自分が知っている有名なあの人と同じようにコンテンツを投稿してみよう 、とか

  1. 自分が投稿しようとしているコンテンツを受け入れ拡散してくれるユーザー層か
  2. サイトのデザインがきれいで作ったものが美しく表示されるか
  3. プラットフォーム側の都合で垢BANされたり、作ったコンテンツが消されたり、見えなくなったりしないか2

を比べ、悩んでどれか一つ選んで 一番勝てそうな場所で勝負をかけようという流れになると思います。
自分の作ったコンテンツが消されたり収益化の方法を変えられたりといった話はあくまで拡散力や収益化システムといった大前提をクリアしたうえで最後に考える、この中で最も優先度が低い観点でしょう。
大前提をクリアして初めてその部分が差別化になります。 プラットフォーム提供者も当然拡散力や収益化に貢献しない開発をできる限り抑えるようにするはずです。

「多くの人にチヤホヤされたり、他人に評価されることばかりが人生じゃないよ、本当に良さがわかってくれる一部の人を大事にすればいいじゃない。お金を稼ぐことは必要だけど、自分の『好き』という感情に従ってコンテンツを作って、お金を稼げればラッキーくらいの気楽な気持ちでいたらどう?評価を狙ってばかりいても疲れるでしょ。」という意見は昔からありもっともだと思います。
ただし、大勢に褒められたいとか有名になりたいという煩悩を捨て現世の苦から逃れられる人がどれくらいいるか、それを仕事にしている人に同じことを言えるか、ということを真剣に考え、対案を出さないかぎり、受け入れられるとは思えません。
そもそもその一部の人と繋がれる確率はプラットフォームのユーザー数や拡散力やレコメンデーション力で決まるので、人口を増やすべきという話を裏付けているとも言えます。

コンテンツを見る人は何を考えているのか

コンテンツを見る人達はどうやってプラットフォームを選び、アカウントを作っているのでしょうか?

  • 自分が面白いと思う人や興味ある情報が得られる場所で投稿を漏らさずいち早く見たい
  • 自分が支援したい人がいる場所で支援したい

あたりになるでしょう。
面白いコンテンツがあるならどんなにサイト自体のUXが悪くても気にせず見るはずで、例えばYouTubeの広告量はどんどん増えていますが文句こそ言えど動画を見るのを止める人が急増してYouTube存続の危機です、という話は聞いたことがありません。

あるサービス開発者のストーリー

当たり前の結論ですが、面白いコンテンツを持ってきてくれる人を増やしましょう、そのためにユーザー人口、拡散力、収益化システムを強化しましょうとしか言いようがありません。
サービス開発者としては、「私のサービスは最低限のユーザー人口や拡散力、収益化システムをクリアしています。だからこの今までにない面白い機能を見て下さい」、と言いたいところです3
欲を言えば、「私のサービスは他のプラットフォームよりユーザー人口や拡散力に優れており、収益化システムもあります。そしてこんな面白い機能や美しいUIがあります」と言いたいです。
非中央集権の何かを作りたいなど決して全く頭によぎりません。

そういうことを考えながらXを見ていた私は、勝手に見たくない人の投稿が出てこずインプレゾンビに汚染されていないきれいなXがあったらなーと思っていました。
そんなときBlueskyという良かった頃のXがあり、しかもBlueskyは内部で使っているatprotoとかいうプロトコルの実証・リファレンス実装という話を聞きました。
技術者として興味を惹かれ、同時に自分のサービスにも使えるかも、という期待感に駆り立てられた私はatprotoのサイトを開きました。
atprotoのサイトにはよくわからない専門用語が目白押しで、まずPDSだのDIDだのlexiconだのxrpcだのDAG-CBORだのCIDだのに圧倒されました。
しかし、それはむしろ謎めいた雰囲気を加速させ、atprotoへの期待感を増やす 結果に繋がりました。
私は必死でサイトに書かれた内容を読み、行間を読み、頭を悩ませながらときにはMerkle Search Treeの論文を読み、時にはGitHubで実際のコードを見ながら理解を進めていきました。
同時に、自分のサービスにこれを使ったらどんな楽しいUXが実現できるだろう、どう既存のサービスにはない体験を提供できるだろう、と胸を踊らせました。
理解が進むに連れ、atprotoはぶんさんがたえすえぬえすとか言う種類のサービスを作るためのもので、多くのサービスが互いに協力し合ってコンテンツを融通したりやり取りしたりするものなんだ、ということもわかってきました。
もしかしたら、自分のサービスがネットワークに入ったら拡散力が高まったり、最初から多くの人口を抱えていると言えるんじゃないか、そうするとコンテンツを作る人達にアピールできるんじゃないか 、と期待が高まりました。
ただ、調べていく中でなぜBluesky以外にこのプロトコルを使ったサービスが出てきていないのか、また、プロトコルを使ったらどんな面白いことができるのか具体的なイメージが沸かないのも事実でした。
サービスを作るのは時間も労力もかかりますが、プライベートの時間を使い、atprotoを使って実際に使えるサービスを作ることでatprotoの真価を探って行こうと決心しました。

試行錯誤しながら実際に私は実際に使うことができ、Blueskyと並立する、Blueskyとは全く異なるブログ投稿サービスを立ち上げました。
私は実際に作ったサービスをBlueskyで発表しました。
自分と同じことを考えていた人が多かったのか、これまで誰も作ってこなかったBlueskyと同じ技術を使った別プロダクト、ということである程度の反響を得ました。
ただ、私は自分のサービスに満足していませんでした。
なぜなら、私が作ったサービスはBlueskyと並立する存在であるにも関わらず、Bluesky上のUIではその他大勢のWebサイトと同じ扱いであり、当初期待していた拡散力やユーザー人口の恩恵を全く得ることができていなかったからです。
これではBluesky上で既存のサービスと何ら変わりなく見えるので、atprotoは何にも自分のサービスの競争力強化に貢献していないと言えます。
ユーザーはatprotoのお陰でいつでも自分が作ったサービスを別の似たようなサービスに変えることができるのですが、そのようなサービスはどこにも無いので恩恵は無いに等しいです
自分が作ったサービスを気に入ってくれた人もいて、それは嬉しい誤算でした。
しかし、Bluesky上で「atprotoのサードパーティーサービスはどこなんだ!?早くサードパーティーサービスを見たい!!」と言っている人に、そういう気に入ってくれた人たちが「こんなのがありますよ」、と自分のサービスを紹介してくれますが、大多数の反応は冷淡です。
「何もatprotoの凄さがわからないから意味がない、もっとちゃんとしていてすごいものを見せてくれ」「ああたしかにatprotoを使ってるのかもしれないね、はい、次
心無い批評に悔しく思いつつも言い返す言葉も無いのが現実です。
私が作ったサービスのデータはBlueskyに届いているはずなのですがBlueskyには理解できず、単に捨てられています。
この状況は決してBluesky以外のサービスが増えても変わることは無いでしょう。
なぜなら彼らも力を持っていないサービスのデータにわざわざ対応してあげる時間も義理も無いからです。

そんな折、Blueskyのチームから今後のatprotoに関する方針4が出てきました。
atprotoはまだまだ未完成だとわかっている私は期待を込めてページを開きました。
スクロールするにつれて、期待は失望に変わりました。
認証の仕組みを整備します、Firehoseのイベントを増やします、など確かに最低限必要なんだろうな、とわかることが書かれているのですが、私が一番の課題に感じているatprotoサービス同士の連携を強化する施策が何も見えてこないからです。
ああ結局自分のサービスは他のサービスから無視され続けるんだろう、ということを直感しました。

バッドエンドルート

次第に私はなぜ自分が大事なプライベートの時間を使っているのかわからなくなってきました。
新しいテクノロジーで世界が変わる瞬間を目撃し、それに関わることができるかもしれないという期待に旨を踊らせていた私はどこにもいませんでした。
次第にサービスを改善する手も止まっていき、数カ月後にユーザーが残っていないのを確認してひっそりとサービス終了の案内を出しました。

ハッピーエンドルート

私は言葉を選びつつも自分が感じているatprotoに対する不満をBlueskyで投稿しました。
すると偶然それを見かけたBluesky / atproto開発者の一人が君のサービスのデータがうちでどう見えたら嬉しい?その逆はどう?と声をかけてくれました。
私は不満に感じている部分を解消する最後のチャンスだと思い、自分が開発しているサービスを使ってフィードバックを書き始めたのでした。

「まず他サービスのデータがその他大勢のWebサイトとは違うことがひと目で分かる表示にしてください」

「せっかくatprotoでサービスを作ったのにその他大勢のWebサイトと同じ見た目をしていてはがっかりです。
そして、現状はそのようになっています。

貴方がたに私のサービスのデータを描画するコードを書いてくれとは言いません。
私は自分のサービスのデータをどう描画すべきかよく知っています。
データのレンダリング方法を解決できる仕組みを作って下さい

あなたのサービスやそのユーザーが望まないなら特定サービスをミュートしたり、ブロックしたりする権利があると思うので、他人のlexiconの表示をプロトコル上の必須にはしないほうがいいと思います。
また、オリジナルのlexicon作成者のレンダリングが気に入らないが、表示はさせたいという場合には、表示方法をオーバーライドすることも許されるべきです。
また、NSID保有者以外の第三者がレンダラーを作っている場合、それに切り替える自由も認められるべきです。
また、あなたはあなたなりに自分のサービスの統一感を持たせたいと思っているはずです。
文字数制限があることをコンセプトにしているメディアで制限のないデータを他の投稿と同じようには表示したくはないでしょう。
解決の際に、ダーク/ライトモードなり、画面サイズなり、文字数制限があるのか、表示がタイムライン上で行われるのか、通知欄で行われるのか、ロングフォームテキストの中なのか、動画の中なのか、写真の中なのか、ブラウザ上なのかCLI上なのかなどコンテキストを与えられるようにして、あなたのサービスに合わせられるようベストを尽くせる方法があってもいいですね。

技術的詳細は問いません。iframeで動かすなり、スタイル記述言語を作るなり方法はあると思います。

プロトコルの複雑性とのトレードオフだと思うので、あなたがたにお任せしますが、ゼロ回答は厳しいと思います。 」

「表示だけではなく、atprotoでしかできないインタラクティブな機能を実現して下さい。それによってコンテンツ作成者が望んだらよりatproto中の多くの人からリアクションを得られ、もっとコンテンツを作りたいと思うような仕組みを作って下さい」

「コメント、いいねなどどんなサービスからでも簡単に送れるようにして下さい。
例えば今うちはBlueskyを特別扱いして、「Blueskyでリアクションを投稿する」というフォームを作って置いています。
これと同じUXを、任意のLexiconに関して、こちら側のハードコード無くできるようにして下さい。
既存のブログなどのサービスはFacebook, Instagram, X, はてなブックマーク, etcを恣意的に選んでシェアボタンを配置しています。
自分のサービスが必ず載っているなら、そのサービスを使ってリアクションを書いてくれる可能性が高まり、開発者目線でatprotoを使う大きなメリットです。

あなたがここでものを作ったらatproto中隅から隅までオーディエンスとなってリアクションをもらえ、その一つ一つを見て達成感を得られますよ、知らなかった意外なサービスからのリアクションも見れて、予想しなかったオーディエンスとつながったり化学反応が起こりますよ 、と言わせて下さい。
どのようなUIで、どのようなレコードが作られるのかはレコードそのものに語らせるか、解決できるようにして下さい。
lexicon設計者次第でその他人のアプリ上でフルのコンテンツを作ることもできるし、小さなリアクションだけは送れるがフルコンテンツはうちのサイトでに限定する、というように選べるような柔軟な仕組みがベストです。
プラットフォーム提供側としては、例えリアクションが別アプリで作られても、コンテンツ作成者の嬉しさにつながるのでメリットはあります。
また、うちのメインコンテンツをBluesky上で作れるようにしても、データが共有されているので、自分のプラットフォームのコンテンツが結局リッチになっていると捉えることができ、プラスでは無いでしょうか。

「コンテンツ作成者の人がatprotoサービス上で作った、誇りに思い、自信がある任意のものをプロフィール上で出せるようにしてください。」

「例えば動画をつくる人は動画の再生ボックス、文章を書く人は「続きを読む」で展開もしくはページ遷移するボックス、ゲーム配信者はゲームサーバーから受けた記録の証明や表彰状など、せっかく同じアイデンティティを共有するのだから、どこのサービスでも見れるようにするべきです。
そうすることで自分の作品がより多くの目につき、同じような興味を持っている人と繋がれたり、リアクションを受けられる可能性が高くなります。
プロフィールがbsky lexiconになっている限りこれは実現できない、あるいは変だと思います。
プロフィールをプロトコル上の一級市民として扱うか、更に抽象化するか、上のレイヤーを作るなりしてください」

「面白い人がatproto上でやっている面白いことを見落とさないようにさせてください」

「コンテンツを見る人はなぜサービスに登録するのでしょう?
面白い人がやっていることをいち早く知って楽しみ、リアクションし、応援したいからです。
relayにすべてのサービスのすべてのデータが流れるatprotoなら、個別サービスでアカウントを作る手間なく、面白い人がどんなサービスを使っていても見逃すことはないようにする仕組み を作れるはずです。
そうすればサービスを訪れて確認する敷居がなくなるので、ユーザーは楽ですし、コンテンツ作成者側も見てもらえる確率が高まりますし、サービス提供側も集客できて嬉しいです。
もちろん単にJSONを見せられてもユーザーにはなんのことかわからないのでちゃんとリッチに表示して下さい。
他サービスでの活動をBlueskyのタイムラインに流してもいいですが、Blueskyをやっていないatprotoユーザーが理論上あり得るので、atproto browserを別に作ってそこで流したほうがいいと思いますが、おまかせします。
ユーザーにもお気に入りのサービスがあると思うので、そのお気に入りのサービス上をできれば離れること無く確認し、詳しく見たい場合は離れるようにして下さい。
少なくとも、そのサービスのアプリをインストールしたり、そのサービスのページをわざわざ開かないと追っている人の活動が見えないUXは面白く無いですし、弱小アプリをインストールしてもらえると思いません。」

「サポーターにしか見られないようなコンテンツを作る仕組みを作って下さい」

「限定公開のコンテンツはマイルストーン上優先順位が低く位置づけられていますが、コンテンツを売りたい人には死活問題となるので、早く作って下さい」

「Blueskyさんだけでなく、今後出てくる色々なサービス上で今言ったような体験が自動的に実現されると期待できる仕組みを作って下さい」

「Blueskyさんなど特定サービス上で特別対応してうちのコンテンツをリッチに表示できるようになるだけではなんの意味もありません。
他のatprotoサービスが貴方がたと同じように対応してくれるかわからないからです。」

「atprotoを使うサービス提供者視点の利点を普通にサービスを作ろうとしている人に周知して下さい」

「ユーザー視点では仕組みを理解できるかはともかくとして、いつでもサービス提供者を変えられる、引っ越してもフォロワーを失わないというatprotoの利点がそれなりに浸透してきていると思います。
元々ソーシャルメディア界隈をウォッチしていないような、ごく一般的で、コンテンツプラットフォームを作ろうとしていて、技術ではなくユーザーと自分のビジネスを向いた開発者に対して利点を明確化し周知して下さい
インフラ費を抑えられるとか、ユーザーは作る前からあなたのサービスのアカウントを持っているなどありますが、サイトにはどこにも書かれていません。」

「これまでatprotoで実現されてきたことに不満はありません、ただ色々足りないだけです」

コンテンツ作成者が最後に考えるペインを解決するプロトコルになっているのは間違いないです。
ただし、大前提の拡散力と人口の問題を如何にクリアするかという部分が抜け落ちています。

「悪いことをさせないための技術は悪い人に使ってもらわないと意味がないです」

「このプロトコルのターゲットユーザーは誰ですか?このプロトコルの特長はanti-enshittificationなのだから、enshittificationを企むような人に使ってもらわなければ意味がありません。
刃物を振り回している人に対して、ここに手錠があります、手を通せばあなたは自由に刃物を振り回せなくなりますと言う意味がありますか?
善良な人たちが自らの手に手錠をかけて、ほら無害でしょといっても世界は平和になりません。
刃物を振り回している人にとって魅力的に映り、自らの手に手錠をかけたくなるような、そういうものをみたいです。」

「話半分に聞いて下さい」

「私はすべてのコーナーケースを検討したわけでもないし、技術的な検討をしたわけでもないし、要求同士が矛盾しているかもしれません。
話半分に聞いて下さい。
私はまだあなた達のプロトコルに期待しています。

フィードバックを書き終えた私はその開発者に自分が書いた物を見せました。
プロトコルはもうすぐ完成だと思っていた開発者は驚き、同意できない部分はありつつもatprotoの弱点に関して概ね理解することができました。
これらの点を何等かの形で解決できる仕組みを作ることを約束してくれたため、私はひとまずこのサービスを作り、フィードバックを書いて良かったと思いました。

文脈

こんにちは、最初のサードパーティーatprotoサービス、WhiteWind開発者のK-NKSMです。
Blueskyで下みたいな投稿をしました。

The issue I'm facing is that the contents written in WhiteWind is not automatically shown in Bluesky although WhiteWind is technically a member of the network. The third-party developers will naturally expect their records receive a lot of exposure thanks to federation. (1/4)

— K-NKSM (@knksm5.final-techblog.com) May 7, 2024 at 21:46

するとBlueskyのエンジニアであり、atproto開発に直接関わっているbryan newboldさんから以下のような質問が届きました。

do you think full whtwnd posts should render in the bsky app, eg, in feeds? I would assume just a summary or description, which already sort of works via web embed cards.
if it is full posts, then whtwnd posts will be limited by what such apps can render. eg, LaTeX math, tables, interactive JS
a web browser is a fully general rendering "app".
should the bsky app be an atproto browser, or should it be easier to access and interact with atproto content from web browsers?
I do think it might be helpful if there was some concept of Lexicon schema "traits" or "interfaces".
eg, there could be a meta-schema for records that can be rendered in bsky feeds, with a title, description, and optional image thumbnail; maybe URL. any matching record would display as a card
similar for the opposite: how to reference/render arbitrary atproto records in a whtwnd post?
similar to oEmbed

5678

ということで、とあるatprotoに興味を持った開発者という想定でその人なら何を考えるか書いてみました!
こんな真面目な事考えてSNSやってる人いたら面白いですよね😂!

参考文献

Footnotes

  1. 私はそのようなスキルを持ち合わせておらず、フィードバックをもらったわけでもないので想像と検索に頼っています

  2. 今世間を賑わせている「クリエイターエコノミー」の4つの課題 | ショートムービー事業

  3. 長文投稿サイトは拡散力に対する期待は多少低いかもしれません。マイクロブログサービスは拡散力、ブログプラットフォームは収益化システム、というような役割分担があるからです

  4. 2024 Protocol Roadmap | Bluesky

  5. https://bsky.app/profile/bnewbold.net/post/3krw2j263ep2l

  6. https://bsky.app/profile/bnewbold.net/post/3krw2m7prru26

  7. https://bsky.app/profile/bnewbold.net/post/3krw2tbynmc2g

  8. https://bsky.app/profile/bnewbold.net/post/3krw2vckuqt27

knksm5.final-techblog.com
K-NKSM

@knksm5.final-techblog.com

Making a Markdown blog service using atproto which you can use with Bluesky account!
AT Protocolを使い、Blueskyアカウントがあれば使えるMarkdownブログサービス(AppView)を作っています!
WhiteWind https://whtwnd.com/

X / Twitter: @KNKSM5
Blog: https://blog.final-techblog.com/

Post reaction in Bluesky

*To be shown as a reaction, include article link in the post or add link card

Reactions from everyone (0)