ECSを知ってから気づいたAutonomous Worldの大きな勘違い
※この記事は2023年9/17に公開されたものです。
こんにちは、Gussanです。
これまでぐっさんという名前をGuss3で表記していたのですが、念願のGussanでENSが取れたので、これからはGussanでやっていきます。Twitterは@0xguss3のままでです。
今日はECS(Entity/Component/System)について調べてみたのとそこから得られた気づきを書きます。ECSって何だよって感じなんですが、先日、Autonomous WorldのプロジェクトPixeLAWのFounderであるsyora氏と話ていた時に僕も初めて知りました。
PixeLAWは、Autonomous Wolrd系のプロジェクトの中でも、オンチェーンゲームというよりもちゃんと”World”を作ろうとしているので、めちゃくちゃ期待しているプロジェクトです。要チェックです。
Autonomous World的な思考は僕も持っていたのですが、僕が考えていたことは正確に言うとWorldではないことがsyora氏と話していて気づき、その明確な違いにこのECSが絡んでくる気がしました。
僕が考えていたAutonomous Worldとどの点に違いがあるのかについても書いていきます。
今回はECSに関して触れていますが、エンジニアの方が読んだら「ちょっと違うな…」ということもあるかもしれないので、ぜひ教えてください。
今回、ECSやAutonomous Worldについてもっとちゃんと知りたい方は、イーサリアムナビやsyora氏の読めばいい気がしています。0xPARCの記事も貼っておきます。
ECSってなんだ
ECSは、Entity Component Systemというシステムのソフトウェアのアーキテクチャーパターンの一つです。クラスと継承についてコード書いたことある人だと聞いたことあるかもしれませんが、一つのクラスに対して複数のクラスを継承をすると多重継承となり、バグの原因となるらしくその辺りを解消できるようです。
特にゲーム開発では、さまざまなアイテムやモンスターが出てきますが、それぞれの特性の組み合わせパターンにより設計されるため、クラスと継承による開発は多重継承を起こすし、保守性も悪くなるらしいです。
ECSの歴史を遡ると、元々 Thief: The Dark Projectというゲームのアーキテクチャーとして採用されたのが始まりのようです。
Entityは、ゲーム内の各オブジェクトです。オブジェクトなので、モンスターとかアイテムとか武器とか、多分あらゆるものです。
Componentは、そのオブジェクトに対してどのような振る舞いをするかを決めるためのラベルと連想配列のデータにあたります。
Systemは、同じコンポーネントを持つエンティティ全てに対して作用する処理のことを指します。
Mud Workshopの資料を引用します。でりおさんの記事にも出てきてます。
上記のイメージの中で四角で囲まれているもの(Movable, Inventory, Combat)は、Componentにあたり、Monster, Donkey, Tower, ChestがEntityにあたります。Systemは、Movable, Combat, Inventory のComponentを持つEntityに対応する処理になります。
もう少し具体的な例としてOPcraft(Optimism上で動くMinecraftっぽいゲーム)のオブジェクトで例えると、Entity 0x01が草(grass)を示します。そのEntityは、Position ComponentとItem ComponentというComponentを持っているという状態です。
このEntityのsystemを実行するには、トランザクションを送信し、所有していることの確認、その場所に他のEntityがないかを確認して実行されます。(Latticeの記事より)
ゲーム設計においては、各Entityが多重的にシステムを持つことになるためこのような設計が最適になるようです。さらにオンチェーンゲームをより拡張させるための仕組みとして機能するMUDにもこのECSがコンポーザブルな働きをしてくれます。
Autonomous WorldにおけるECSの重要性
ECSが成立することで2つの利点が主にあるかと思います。
ゲーム開発、保守や運用のしやすさ
コンポーザビリティの高さ
Autonomous Worldの中では特に2に価値が見出されていくはずです。
ちなみに、syora氏の受け売りですが、フルオンチェーンゲームとAutonomous Worldは違います。フルオンチェーンゲームはゲームロジックがオンチェーンにあるものですが、相互運用性は乏しく各ゲーム内で完結しています。Autonomous Worldは、世界そのものを構築するので拡張性が非常に高いものを指している気がします。
Autonomous Worldは、ルールがコントラクトによって規定されるため、その世界の物理法則や空間規定が自律的に形成されている世界になります。
世界を規定するということはその世界にあらゆる特性を持ったモノ、アイテム、敵、人を表現する必要があるので、Entity / Component / Systemと分けて考えることのは開発としても非常に重要です。ただ、これは今あるゲームにもいえます。
自律的に世界が規定されるには規定するためのルールが必要です。Autonomous Worldにはその拡張性が必要になります。ちなみに、この拡張性というのはゲームのシステム的な拡張性だけでなく、ゲームルールの捉え方にも必要な考え方だと思います。今回は、僕も考えがまとまってないので割愛します。
僕自身がMUDを触っていないので憶測ですが、ルールのためのルールを規定するとMUD(Multi-User Dungeon)が成立するかと思います。MUDはルールの抽象度によってWorldそのものの質が大きく変わる気がします。
自分が考えていたAutonomous Worldとその間違い
syora氏と話していてAutonomous Worldの話をしてECSを知ってから、自分が考えていたあることが間違っていたことに気づきました。
何が間違えていたかを端的に言えば、NFTがAutonomous Worldになりうるということです。これはAutonomous Worldという概念を僕なりに整理した上での個人的な意見です。
これまで僕のポッとでのアイデアは基本的にNFTをベースにプロジェクトを考えていました。その中でもStory Tellerというプロジェクトのアイデアはとても自分好みなものです。(これはちゃんとやろうと思っているんですがね…)
Story Tellerというのは簡単に言うと約2時間半が1年で進む設定の中で、みんながその時間内にその年の出来事を書き込み、みんなで年表を作るというプロジェクトです。詳しくはツイートを見てください。
このプロジェクトはフルオンチェーンであり、全てのルールがコントラクトに書き込まれているので自律的に動き続けるプロジェクトです。
僕は、このプロジェクトをある種のAutonomous Worldと捉えていました。自律的に動き続け、世界の事象を書き込み続けられるからです。先述の通り、これはおそらく不正解でした。
この理由を正確に言語化できていないのですが、Autonomous Worldの”World”という言葉に理由がある気がしました。
Worldの意味を調べると…
と出てきます。地球に乗っている場所とかモノとか人とかを総じているわけですが、これはEntityですね。
一方で、そこで起こる事象は、Entityではありません。モノはEntityですが、モノを動かすという行為はEntityではありません。
Worldを規定するには、3つの要素が必要なのではないかと考えています。
空間
自分の存在
他者の存在
自分と他者は同じ空間に相互に影響しあえる環境にあることが重要です。
思えばWorldなので、そりゃそうだろって感じですが、この3つが同時に成立しないとWorldとは言えません。NFTではこの3つを表現するのは難しいです。
逆に、この3つを満たせばWorldといえます。もちろん空間というのはインターネット空間でもいいので、TwitterやInstagramはWorldといえます、Autonomousではありませんが。
なぜECSを知ってから間違いと感じたかというと、ECSは圧倒的に世界を作ることを指向しているアーキテクチャパターンだったからです。
ECSは空間と空間にあるあらゆるモノを構築可能にします。その空間に影響可能な形で自分が存在し、各自が相互に影響し合うことで世界を構築し得るのではないかと考えています。
本当にそれだけなんですが、NFTとは全く別物感があり、NFTが作っているものをWorldというのに違和感が出てしまいました。自分の存在と他者の存在はありますが、そこに空間はないからです。
Autonomous View of the Worldという概念
ではNFTは何を表現できるのでしょうか?
僕の答えはView of the World、つまり「世界観」です。
そして、Story Tellerのような自律的に動き続けるプロジェクトは、Autonomous View of the World(AVW)と名付けたいと思います。先日、フォークで話題になっているNounsもこれに近いです。
多くのNFTプロジェクトが作り上げているのは世界そのものではなく世界観です。Entityは単体で世界を構築することはできず、世界の断片であり、世界そのものではありません。世界の見え方を表しています。
Autonomous Worldは、空間とエンティティで構成されますが、そこに色はついていないため世界観がありません。UIで補えば世界観っぽいものはありますが、オンチェーンデータとしては世界観は持ち得ません。なぜなら、世界観が存在すれば、それはAutonomous Worldではなくオンチェーンゲームに程近くなってしまうからです。
一方でNFTは、それぞれ世界観を持っていますが、先述の通り、相互作用するための空間を持っていません。
Autonomous WorldとNFTはゲーム機とカセットの関係に似ています。似てるんかな。
まとめ
ECSを勉強してデジタル空間上に世界を構築することの設計思想の片鱗を垣間見ました。Autonomous WorldはWorldというの名前の通り「世界」です。
世界を構成する要素をもう少し言語化が必要ですが、「空間」、「自分の存在」、「相互に影響する他者の存在」であるとすると、世界っぽくないけど実は世界を作っているもの、世界っぽいんだけど世界ではないものが存在する気がします。
書いてみましたが、正直全くまとまりませんでした。
書いてみて、読み直しても、なんかちょっとまだ腑に落ちてない。
適宜書き直します。
Twitter: @0xguss3