+++ date = "2024-12-21" aliases = [ "/blog/post/2024/11/21/bluesky-ac-ja" ] tags = ["bluesky","atproto", "lang:ja"] title = "atmosphere" +++ 今年はblueskyのアドベントカレンダーに参加しています。`英語/日本語`の記事を用意しました。 [Bluesco Advent Calendar 2024](https://whtwnd.com/moja.blue/entries/%E3%83%96%E3%83%AB%E3%82%B9%E3%82%B3%E3%80%81%E3%82%A2%E3%83%89%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC2024) ## atmosphereとは まず用語の説明です。`at`にはいろいろな意味が込められています。`@`, `at://`, `[at]mosphere`, `[a]uthenticated [t]ransfer`など。例えば、初期の頃はアイコンが`@`でした。 https://atproto.com/ja/guides/glossary |word|name|example| |---|---|---| |at|uri|at://syui.ai| |@|user|@syui.ai| |[at]proto|repo|`git@github.com:bluesky-social/atproto`| |[at]mosphere|system|pds, bsky(appview), ozone, bgs, plc| |[a]uthenticated [t]ransfer|protocol|[did](https://www.w3.org/TR/did-core/)| > Atmosphere > > 「Atmosphere」は、AT プロトコル のエコシステムを説明するために使用する用語です。 > AT プロトコル > > AT プロトコルは、「Authenticated Transfer Protocol」の略です。この名前は、すべてのユーザー データが作成ユーザーによって署名されているという事実に由来しています。これにより、多くのサービスを通じてデータをブロードキャストし、発信元サーバーと直接通信しなくても、データが本物であることを証明できます。 > > この名前は、atproto がソーシャル システム向けに設計されているため、「@」記号、別名「at」記号をもじったものです。 そして、各領域に名前がつけられ、システム全体を`atmosphere(大気圏)`と呼んでいるみたいです。 atmosphereの下にあるそれぞれのservice(サービス)はearth(地球)の大気構造にちなんで`bluesky(bsky)`, `ozone(オゾン)`, `bigsky(bgs)`などの名前が使われています。 - https://github.com/bluesky-social/atproto/tree/main/services/bsky - https://github.com/bluesky-social/atproto/tree/main/services/ozone - https://github.com/bluesky-social/indigo/tree/main/cmd/bigsky 大気圏にはその他にも`meteor(流星)`, `aurora(オーロラ)`などがあるので今後、なにかの名前に使われることがあるかもしれません。 ```json { "atmosphere": { "uri": "https://atproto.com/ja/guides/glossary", "ref": "https://en.wikipedia.org/wiki/atmosphere_of_earth", "exosphere": { "km":[{ "min": 700, "max": 10000 }], "tag": [ "universe" ] }, "thermosphere": { "km":[{ "min": 80, "max": 700 }], "tag": [ "aurora" ] }, "mesosphere": { "km":[{ "min": 50, "max": 80 }], "tag": [ "meteor", "bigsky" ] }, "stratosphere": { "km":[{ "min": 12, "max": 50 }], "tag": [ "ozone" ] }, "troposphere": { "km":[{ "min": 0, "max": 12 }], "tag": [ "bluesky" ] } } } ``` ## ゲーム開発で考えたこと 現在、`atproto`を使ったゲームを開発中です。 ゲーム開発で考えたことをまとめます。 ### 見えない部分 最初に作り始めたのは見えない部分でした。 ゲームエンジンは通常、平面をベースにします。マップはどこまで行っても地平線が広がっているばかり。上空に飛んでも惑星から抜けることはできないのです。 ゲーム内で行くことができない場所を作る必要がないため、ゲームで月が出ていたとしても、その月は絵を背後で動かしているだけなのです。 しかし、たとえゲームでは行くことができない場所でもそこにあるべきものがある、というのが私の考えです。ゲーム内で月が昇るなら、その月はちゃんとキャラクターが触れられるものを作りたい。 unreal engineには`atmosphere`という機能があり、工夫することでなんとか形になりました。 できる限り現実を反映させるという理念のもと、ゲーム開発をやっていきたいと思います。 ### 人は何を求めているのだろう 人は何を求めているのでしょう。これはゲームを作るうえで考えていかなければならないことです。 例えば、運営が終了してもデータは残したいですよね。 人は自分の痕跡を残したいという欲求があり、生命は子孫を残す本能があります。その派生として自分がやってきたことが残されると嬉しい。そのため`atproto`でデータを保存する事を考えました。 ユーザーは活動してきたものを全部無駄にしたくないはずで「サービスが終了したらおしまいです」より「サービスが終了しても大丈夫です」を選択したい。今後、何十年も活動していくならなおさらです。 `atproto`は未来に耐えられるものを作っています。 ### 人はどこから情報を得るのだろう 人がどこから情報を得るのかは時代とともに変化します。 昔は本からでした。それがテレビになり、インターネットになりました。 昔の人は本から情報を得ていたので、本には価値がありました。出版社や新聞社、書店の価値は高かったと思います。ですが、テレビ、インターネットが普及するとともに出版、新聞、書店の経営は厳しくなっていきます。 重要なのは「人と情報」。これから先、人はどこから情報を得ていくのかです。今はインターネットからですね。 次に考えるべきは「どのように」です。インターネットから情報を得ていくにしても、どのように得ていくのでしょう。それを考えます。 まずは歴史を見てみましょう。インターネットが普及し、最初に起こったのは個々人がホームページを作りだしたことでした。誰でもホームページを作ると情報を発信できたのです。そして、検索エンジンが登場します。 最初はurlを入力してアクセスしていた人々が検索エンジンからwebサイトにアクセスするようになります。この時代を1としましょう。 次に登場したのはサービスでした。色々なサービスができて、sns(social network service)が登場します。twitterとかfacebookなどですね。次第に人々はホームページや検索エンジンからではなく、snsから情報を得ていくようになります。この時代を2としましょう。 ではその次はなんなのでしょう。これはまだはっきりとはしません。 ですが、次第に輪郭が見えてきたような気がします。それが`activitypub`や`atproto`のようなものになると思います。それとAIですね。AIも人から情報を得ていて、人が情報を発信することは必要になります。 確かに2の時代では人々がサービス上にアカウントを作るようになりました。すべての投稿はそのサービスに帰結します。個人にではありません。もちろん、情報をどこから得ていくのかもサービスの中からです。これが近年のインターネットの形であり、あり方でした。 ですが、1では違いました。検索エンジンは個人サイトにトラフィックが帰結していました。 私は3ではまた1の方向、つまり、個人の方向に帰結するのではないかと考えているのです。個人から企業へ。企業から個人へ。そこまで単純なものでもないですけど、時代に合ったバランスで個人の方向へ向かうのでしょう。 これは1にそのまま戻るというわけではありません。1にはたくさんの問題がありました。その問題のため、2が使われるようになった側面があるのです。例えば、検索エンジンでは求めている情報にたどり着けないことが増えましたよね。そうした問題をバランスよく解決したり回避したりしながら、3への移行になるのだと思います。 そして、どの時代でも私達が唯一選択できるのは自身のアイディンティティをどこに置くかということです。 atprotoはその点でバランスがいい。 ### なぜatprotoなのか activitypubを2017年頃から触っています。mastodonでインスタンスを立てたのがそれくらいでした。当時はjpが立ったか立ってないかくらいの時期だったと記憶しています。 当時は`ostatus`というprotocol(プロトコル)を使っており、それから程なくしてactivitypubに移行しました。 mastodonの他には`pleroma`, `misskey`, `mitra`, `gnu-social`などをherokuで立てたりしていました。 とても面白い技術で、当時は本当に楽しかった。 それから数年が経過し、2023年頃から`bluesky`を始めました。 blueskyにはatというprotocolが採用されています。それを見て、これからのインターネットは`at`になるかもしれないと思いました。 ```sh https://syui.ai --> at://syui.ai ``` activitypubとatprotoはシステムが根本的に異なります。その一つが履歴の保存性です。 例えば、アカウントやサーバーを作成したとして、atprotoではplcからその歴史を確認できます。いつ建てられたのか、どのように名前が変更されたのか、です。 私は「activitypubを2017年頃から触っている」と言いましたが、当時の記録はブログにしかありません。その後、何度かdbをリセットしているので、mastodon上では最近開通したばかりに見えます。 activitypubには中央集権的な機能がなく、それぞれのサーバーがそれぞれに記録を保存します。どこかには痕跡が残されているのかもしれませんが、それがどこかはわからない。 atprotoではこのような問題を解決できるのです。多くの人が使用するようになる技術というのは、あまり技術を全面に出さないような気がします。 「好きなサーバーを選んでください」とか「この技術は分散しており非中央集権です」とかそういうことではなくて、protocolはユーザーが意識するような領域のものではありませんから、ユーザー側からすると、内部で勝手に分散し、難しいことは裏でやっていてほしいのです。つまり、初めて触れる人にもわかりやすいものでなければいけません。そして、それは結果と直結していなければならないのです。 結果というのは、「検索すれば結果が返ってくる」みたいなものです。snsでいうなら「サーバーを意識しなくても繋がれる」ということ。 activitypubはこれが難しい。技術の根幹に関わるものなので、解決は難しく、そして致命的だと思うのです。 また、自分の名前を使うにはサーバーを立てる必要があります。 |protocol|user|body| |---|---|---| |activitypub://|@syui@syui.ai|サーバーを建てる必要がある| |at://|@syui.ai|サーバーを建てなくても設定できるし短くなる| 特に`at://`の部分が気に入っており、短く簡潔で、なおかつ意味が通る名前です。 ### nostrはどうか nostrは私からするとactivitypubよりも有望なprotocolに見えます。 ただ、広まるか広まらないかでいうと、そこまで広まらないと予想します。 blueskyやatprotoは責任の所在がはっきりしており、誰が運営しているのかもわかりやすい。スパムが排除される環境にあります。逆に言うと、これがはっきりしない環境ではスパムだらけになりやすいと思っています。そういうものはリレーサーバーの管理者が個別に対処しており、サーバーによってはスパムが来ないものもあると思います。しかし、一般人からするとわけがわからない。私も「どこですかそれは」となります。 このような性質を無法地帯、無秩序、無責任分散と呼ぶことがあり、普通の人は住みたがらないと思います。 ネットでそういう場所を作るのはそこまで難しいことではありません。しかし、検索エンジンが荒廃していった経緯もあり、それではうまくいかなかった。だからこそどうするか、どうやって秩序を作り、それを維持するのか。人々は長年その事を考え、解決策を模索してきました。 多くの人はバランスの良い秩序を求めているのだと思います。 例えば、すべての個人が独立し、自立していて、何でも自分でできるようになった世界。すべての住人が安定した精神を持ち、揉め事やトラブルも起こさず、誰も悪いことをせず、すべてのことを一人でやって生きている、そんな世界では、ルールや法律、管理者や政府がある事自体おかしい。そのようなものは必要ないからです。このような段階において無法地帯は正しい。 ですが今この段階でそういったものが普及するかというと、私は難しいと思っています。 また、インターネットを変えていくには、個人と企業の両方を取り込んでいく必要があります。 もしあなたが企業の責任者だった場合、nostrでやるかblueskyでやるか、どのように検討するでしょう。 ### 名前の限界 人間はいつの時代も数字ではなく名前を使います。例えば、プログラミング言語も名前を数字に変換するものです。名前のほうが人間にとって読み書きしやすいからです。したがって、名前は重要です。 今度はこの名前について考えてみることにします。 今のインターネットはこの名前に限界があると感じています。 今のインターネットはサービスの中だけで情報のやり取りが完結していて、例えば、twitter, facebook, youtubeの中だけで情報のやり取りが完結していますよね。これらを相互にやり取りできるようにするには、同じprotocolを採用する必要があります。 未来のインターネットではサービス同士がやり取りできるようになるというのが、私の予測でした。 そして、ここでは2つの理由からその未来に向かうだろうと考えていて、その一つが名前に限界があるからです。 各サービスで名前が枯渇していますが、これから生まれてくる人や新しい会社はたくさんあります。今後の情報の潮流になるのは彼らです。そんな彼らが入ってこないと成長は見込めません。 しかし、新しい人たちは自分が使いたい名前が使えません。なぜならその名前はすでに取られているからです。それなら他のところに行くというのが自然の流れです。 つまり、この問題は自然と解決される方向に進むだろうと私は考えています。それが`domain`形式になると予想します。 今後、人々が使う名前はdomain形式になり、なぜなら(1)各サービスごとの名前が枯渇しているからという理由と、(2)名前をdomain形式にしないとサービス外とやり取りできないという理由からです。そして、未来のインターネットは一つのアカウントで複数のサービスを使うのが一般的な形に変化していくと予測しています。 ### 重力と弱い力 アララギ「名前なんてそんなのどうでもいいだろ」 オシノ「いや、名前は重要だよ。アララギくん」 この二人のやり取りはどちらが正しいのでしょう。 答えは「どちらも正しい」です。 しかし、あえて言うなら前者は即効性やインパクトを求め、後者は影響力や環境を求めるといったところでしょうか。 ここからは少し自然界の話をします。自然界で最も弱い力がなんなのかご存知ですか。 答えは重力です。 意外に思われるかもしれませんが、現在の科学では重力がこの世界で最も弱い力と考えられています。 しかし、重力というと現在の宇宙環境を構築するほどに強力なもののはずではと思っている人がいるかもしれません。 そうです。この世界では弱い力ほど大きな影響力を持ち、環境を構築しているものなのです。これが自然の摂理、自然の原理です。 話を戻して、名前について考えてみましょう。 名前には瞬時に何かを変える力はありません。即効性やインパクトがあるようなものではない。 しかし、人間の意識、無意識下に影響を及ぼし、長い時間をかけて環境を形作っていく。重力に似た作用を持つのです。 例えば、人間社会は人々の意識によって構築されています。 ### 広めること protocolは、多くの人に広めることが最も重要になります。 これはprotocolに限らず、より根幹部分の技術になるほど広めたもの勝ちになります。 根幹部分というのは、時間に置き換えて考えるとわかりやすい。 人々が一日のうちに最も多くの時間を使っているもの、答えはコンピュータです。 したがって、最も広く使われるosを開発、提供しているところが覇権を握ります。 これは時価総額で考えてみてもわかりやすい。microsoft(windows)やapple(mac/ios)です。 最近はAIが膨大な時間を消費(削減)しているためnvidia(gpu)が巨大な時価総額を持つようになりました。 人間の歴史を見ると、広めることが最も価値を持つのです。 例えば、自分たちの物語を広めることを宗教と呼びます。基軸通貨のドルは大きな力を持ちます。言語もそうです。英語の影響力は計り知れない。 ### 同じようなものが広まることはない 私は原神というゲームをよくプレイしています。 そこで原神のようなゲームを作ればいいのでしょうか。それではダメだと思うのです。たとえ品質が同じかそれ以上のものを作っても厳しいのではないでしょうか。なぜなら、すでに原神があるからです。 最近はvtuberにハマって動画を見ていました。しかし、vtuberを今から始めるのは厳しいと思いました。vtuberとして恩恵を受けるのは、そのような概念が存在しなかった当時から取り組んでいた人達であって、今から始める人達ではない、そんな風に感じます。 今流行っているものをそのまま真似したり、参入しようとしても、ときすでにおそし(時既に遅し)。どうせやるなら違うことをやろう。 ### 人は何を楽しいと思うのか どんなゲームを作ろうかと考えたとき、その答えは「人を楽しませること」でした。 ですが、私一人が頑張って楽しいゲームを作ろうにも、やっぱり限界があると思うのです。 そこで考えなければいけないのは既に「人を楽しませている」人達です。 見ている人を楽しませているvtuberとゲームを繋げれば、ゲームと本人を同時に広めることができるのではないか。 そして、現在、vtuberをやるにはハードルが高く、やることが多すぎるのです。 例えば、3dモデルを用意し、twitterアカウントを開設、プレイするゲームを選定して、ライブ環境を整え、youtubeの開設、画面にユーザー名やアカウント、モデルを表示しなければなりません。ボイス環境も必要で、喋りながらゲームを操作し、ライブ画面を操作しなければなりません。 これをすべて統合できたらいいなと考えました。 人々は何を楽しいと思うのか。もう一度根本的な部分から考えてみましょう。 今までのゲームではプレイヤーがゲームの主人公になりきって物語を追体験していました。私が好きなゲームはそうですね。例えば、原神では蛍と空という主人公がいて、彼らの物語です。 しかし、本当は自分が主人公の物語をプレイしたいのではないでしょうか。プレイヤーが本当に求めているものは何なのでしょう。 この方向で考えられたゲームはすでにあり、例えば、最初にキャラメイク、自分で主人公をカスタマイズしてスタートするゲームがあります。 しかし、私はそういったゲームをあまりプレイしません。どのようにカスタマイズしていいかわからないし、めんどくさいし、カスタマイズしてもどうもしっくりと来ないのです。ですから「自分で作る」タイプのゲームはあまりやりません。原神のように最初からキャラクターが作り込まれているゲームを好みます。 やはり、カスタマイズ系は最初で躓いてしまうのです。よくわからないし、面倒なのです。すぐに始められることが何より重要だと思います。 ではこういったケースはどうでしょう。例えば、原神に自分自身がデザインされたキャラがいてそれを操作することができたら。私はきっと喜んでプレイしたでしょう。そのキャラに愛着を持てると思います。原神は声優さんもプレイしており、特に自分の声を使ったキャラを中心に楽しまれている姿が印象的でした。 つまり、このような体験を多くのプレイヤーができるようになれば、きっとゲームは楽しくなる。 そのためには何が必要になるでしょう。その一つが唯一性です。 ### プレイヤーの唯一性 このゲームでは、各プレイヤーに唯一性をもたせることを目指します。つまり、プレイヤーの唯一性を担保し、デザインするということです。 これをどのように実現していくのか。今考えている内容をお伝えします。 ここからはより具体的な方向性を話します。興味がない人は読み飛ばしを推奨します。 - プレイヤーは1キャラクターを割り当てられる - 使用できるキャラクターはプレイヤー固有のものとなる。そのプレイヤーしか使えない固有スキルを持つ - 1キャラクターにつき1回のピックアップ期間がある。ガチャで引いたキャラは固有スキルを使えない 1キャラクターにつき1が付与され、それが0になると、二度とピックアップされません。 なぜかというと、私は開発者というものをよく知っています。制限がないと復刻やリメイクを連発してしまうおそれがあります。今は時間がないから復刻やリメイクすればいい、と。 そうしているうち新しいものを作る力を失っていくのです。ガチャをやりたければ新しいものを作るしかないようルールを決めておきます。 プレイヤーの唯一性は`取り返しがつかない要素`の積み重ねです。 ## 大気圏に行こう ここからはゲームの機能例を紹介します。 ### キャラクターについて 1キャラクターには1属性が割り当てられます。割り当てられたキャラクターにはgroup(グループ)があり、season(シーズン)ごとに移行します。属性はグループ毎に異なります。そして、前シーズンに戻ることはありません。 最初に予定しているのは`fantasy(ファンタジー)`、次は`animal(アニマル)`というグループです。ファンタジーは`原子`属性のうちの1つを扱えます。アニマルは`分子`属性のうちの1つです。 例えば、シーズン1のドラゴンというキャラクターは`atomic(核)`という属性を持ち、ファンタジーのグループです。ファンタジーは他にフェニックス(陽子)、ペガサス(中性子)など。アニマルはクジラ(水)やライオン(火)がいます。ゲームを開始したシーズンにより最初に割り当てられるキャラクターが決まります。 |season|group|type|character| |---|---|---|---| |1|fantasy|陽子、中性子、核、電子、クォーク|ドラゴン、ペガサス、フェニックス...| |2|animal|水、火、岩、風、氷|クジラ、ライオン、ワシ...| |3|...|...|...| ```json { "atom": { "name": "atom", "group": [ "fantasy" ], "lang": { "ja": "原子" }, "ref": "https://en.wikipedia.org/wiki/atom", "body": { "text": "the word atom comes from the greek word atmos, which means indivisible. an atom consists of an atomic nucleus, which is made up of protons and neutrons, and electrons distributed around the nucleus", "lang": { "ja": "アトムはギリシャ語のアトモスの「これ以上分割できない」という単語が由来。原子は陽子と中性子からなる原子核と、その周囲に分布する電子から構成される" } }, "enum": [ "proton(陽子)", "neutron(中性子)", "atomic(原子核)", "electron(電子)", "quark(クォーク)" ] }, "molecule": { "name": "molecule", "group": [ "animal" ], "lang": { "ja": "分子" }, "ref": "https://en.wikipedia.org/wiki/molecule", "body": { "text": "a neutrally charged substance made up of two or more atoms", "lang": { "ja": "2つ以上の原子から構成される電荷的に中性な物質" } }, "enum": [ "water(水)", "wind(風)", "rock(岩)", "ice(氷)", "fire(火)" ] } } ``` どんどん進みましょう。次に説明するのはキャラクターの進化についてです。 人が単細胞生物から進化してきたように、キャラクターも進化するようデザインしました。 各キャラクターは`animal(動物型) -> human(人型) -> divinity(神性)`に進化できます。ゲーム内では各モデルにフォルムチェンジ(切り替え)できるようになります。 - animal(動物型) -> human(人型) -> divinity(神性) ![](https://git.syui.ai/ai/ue/raw/branch/main/verse/img/shinka.png) ### 各領域について 地上、天空、宇宙に分けられます。しかし、自由に飛び回れるようになるかというと、そうではありません。 開発では便利なのでアイを使用していますが、リリース版では自由に動き回ることはできなくなると思います。 なぜならバグの頻度が跳ね上がるからです。 バグを出さないようにするには自由に動き回れる範囲や速度を制限しなければなりません。また、デモで使用しているキャラクターは基本的に使えません。開発用の機能がたくさん付いているからです。 ですが、可能性がないわけではありません。安定して動作するようになれば行けるようになるかもしれない。 今回こういう部分を紹介したのは、外の世界があることを知ってほしいからです。 見上げる星空は本物で、実際に行くことができ、世界は広がっているのだと。 ### 自由であれば面白いのか 一見、プレイ動画を見て面白そうだなと思った人はいるかもしれません。 しかし、リリースできない理由があります。 リリースできない理由、それは「面白くない」からです。今の時点でプレイしていても面白くないなと思っていて、どうすれば面白くなるのかを考えています。 いくつか案はありますが、一つは不自由さを追加することです。 ゲームは制約があり不自由があるからこそ面白い。 原神やエルデンリングを参考にしながら制約のあるゲームを作っていきたいなと考えています。 ### 最初に選択があるべき ゲームは3つの要素で構成する方向で考えています。`choices(選択要素)`, `diagnosis(診断要素)`、`fate(運要素)`です。 - choices(選択要素) -> diagnosis(診断要素) -> fate(運要素) 最初にあるべきなのは選択要素だと思います。これを例えばアカウントを作成するケースに当てはめてみると 1. キャラクターの性別を選択する 2. キャラクターは診断から決められる 3. ステータスは運命、つまりランダムで割り振られる(9:1) 最初に性別を選択させるというゲームは多く、そこにも重要な意味があると思います。一つはプレイヤーにゲームの選択権があると理解してもらうところに意味があります。