2024.10.01
自社の社内情報を未来の“ゴミ”にしないための備え 「情報量が多すぎる」時代がもたらす課題とは?
React360でVR(全1記事)
リンクをコピー
記事をブックマーク
堀川豊氏(以下、堀川):よろしくお願いします。「React360でVR」というタイトルで、お話させていただきたいと思います。
冒頭から申し訳ないんですが、「スリーハンドレッドシックスティ」って何回も言うのつらそうなので、今回の発表内では「Reactサンロクマル」と呼ぶのをお許しください(笑)。
本日の内容ですが、ReactVRとの差分とか、React360とはどんなもんなのかということを簡単に紹介させていただけたらと思います。
まず自己紹介しますと、私、堀川と申します。ピックアップ株式会社というDMMのグループ会社に所属しておりまして、この下のフロアで働いてます。職種としてはサーバーサイドエンジニアで、ふだんはGoでAPIを書いたり、WebのフロントエンドだとVue.jsで管理画面作ったりするのが仕事です。
今回のタイトルのReact360について説明しますと、こちらは3DとVRのUIフレームワークとなっておりまして、Webブラウザで動作する3D、VRアプリケーションの開発が可能となっております。
先ほどもお話が出たんですが、以前ReactVRというものがありまして、それが改名してReact360になった……ReactVRどこいった、って感じですが。
改名の詳しい経緯は公式のブログに記載されてますが、ざっくりと触れると、ReactVRにはWeb実装とOculus向けネイティブ実装があったそうなんですが、インターフェースが同じだけで中身はまったく別物だったんですね。紛らわしいので、Web版だけ別名で抜き出して、それがReact360になったという経緯らしいです。
このフレームワークを使用するメリットなんですが、Reactと同様の概念でUIの構築が可能というところが1つあると思います。Reactのユーザーインターフェース構築に関わる機能とかをそのまま活かせるのは、かなり大きなメリットかなと。
画面の構成要素をツリー状に組み立てていったり、コンポーネントという単位で切り出して、それを組み合わせてUIを組み立てていけるという概念そのものはそのままだということと、実績のあるReact開発の資産をそのまま利用できるのも大きいと思います。
テストのフレームワークだったり、ステートのマネジメントにRedux使ったりみたいな。既に実績のあるツールをそのまま使用してVRの開発ができるのは、かなり大きなメリットだと思います。
なので、上記の2つを見てみても、Reactの開発経験がある開発者は、けっこう低コストでVRコンテンツの開発ができるのではないかな、と思います。
続いてインストールとサンプル起動についてですが、npmで360のcliツールをインストールできるようになっています。このcliツールを利用してinitコマンドを叩くと、プロジェクトのひな形みたいなものを作ってくれます。
プロジェクトを作成したあとにnpm startをするとWebサーバーが立ち上がりまして、ローカルホストの8081番にアプリケーションが立ち上がるようになっています。
実際に立ち上がったアプリケーションは(スライドを指して)こんな感じです。
これはサンプルなのですごいシンプルですが。3D空間内に2Dのパネルがポコンと置いてあって、その中にテキストで「Welcome to React 360」って書いてあるぐらいのアプリケーションですね。
このサンプルアプリケーションの構造を見ていきたいと思います。2つあるんですが(スライドを指して)1つ目、ここが実際のUIを構成するReactコンポーネントの部分ですね。このHello360というところが、先ほどのUIを構築している宣言の部分になります。
ここ自体は見慣れたJSXの形式で、宣言的にコンポーネントを組み合わせてUIを構築できるというかたちですね。ViewとかTextというのはReact360のほうで提供してくれているコンポーネントで、React Nativeとかで開発されてる方は見慣れているかなと思います。
1番下でAppRegistry.registerComponentというメソッドを実行してるんですが、ここでエントリーポイントとなるコンポーネントを登録しているというかたちですね。このへんもReact Nativeと一緒です。
続いてサンプルコード2です。こちらは、React360のインスタンスを生成して、UIの描画メソッドを叩いている処理が書いてあります。プラスで、バックグラウンドのイメージとして360度画像のjpegを指定しています。
続いて、軽くアーキテクチャの話をさせていただきたいと思います。React360を立ち上げますと、Webブラウザの中にMain ThreadとExecutorという2つが立ち上がるようになっています。
Executorのほうから説明させていただきますと、こちらでReactアプリケーションの実行が行われるようになっております。ExecutorはWebWorkerとして実行されまして、メッセージパッシングを用いてMain Threadの360 Runtimesというやつとエントリーを行います。
Main Threadはブラウザのスレッドなんですが、こちらで3D周りの処理ですとか、インタラクションの管理とか、UIのレンダリング、Executorのやり取りなどを行っています。
サンプルコードを例に、処理の流れをざっくり説明していきます。client.jsからrenderToSurfaceを実行しますと、Main ThreadのRuntime内からExecutorにAppRegistryのrunApplicationを実行するようなメッセージが送信されます。メッセージを受け取ったExecutorは、Reactアプリケーションを起動します。起動したあとは、Main Threadのほうに実行してほしい処理をメッセージで通知するようになってます。
例えばサンプルコード1では、TextコンポーネントとかViewコンポーネントとかを使ってたんですが、それぞれに対応するRCTビューとかRCTテキストの描画をMain Threadに依頼するために、メッセージの送信を行っています。そのメッセージを受け取ったRuntimeが、UIマネージャーっていうモジュールから指定のコンポーネントの描画を行うという仕組みになっています。
React360になって、Runtimeの部分が刷新されたそうなんですよね。公式のドキュメントとかにも書いてあるんですが。そこがReactVRと違うところらしいです。
Runtimeのざっくりとした構造ですが、Runtimeの中にはReactNativeContextとGuiSysという2つのオブジェクトがありまして、この2つが主要なオブジェクトになっています。
ReactNativeContextは、プロパティにネイティブモジュールっていうExecutorとやり取りするために必要なモジュール類とかを大量に保持してまして、それらがUIに必要な処理とかを実行しています。
GuiSysのほうはインタラクションの管理をしていて、ユーザーのインタラクションに応じて適切なイベントの発火を行ったりなどしています。
このRuntimeなんですが、ざっくりどんなことやってるかというと、Reactコンポーネントを3D要素に変換したり、ユーザーの入力イベントをReactコンポーネントにフィードバックしたり、React Nativeの処理を実行したり、Executorとメッセージのやり取りなどを行っています。
3D周りの処理は、実際にはThree.jsというライブラリが行っています。React Nativeとのやり取りは、先ほど出てきたReactNativeContextというオブジェクトを介して実行されるかたちです。
Executorは、先ほどから何回か説明させていただいていますが、Reactアプリケーションを実行するための機能ですね。WebWorkerとして実行されるようになっています。ブラウザのMain Threadとは別に実行されるようになっていますので、requestAnimationFrame(loop)を中断することなくコードの実行ができるようになっているところが大きなメリットで、パフォーマンスの向上にも貢献しているところかと思います。
続きまして、360で新しく追加された要素として、Surfaceというものがあります。こちらは3D空間内に2Dの要素を追加できる機能です。3Dオブジェクトの場合ですと、座標の指定とかはメートル単位とかでやるんですが、こちらはピクセル単位で指定が可能になっていますので、Webの開発者とかにはけっこう親和性が高いと思います。SurfaceはCylinderとFlatの2種類がありまして、用途に応じて使い分けていくようになっています。
ざっくりまとめですが、React360は、Reactの考え方とか資産を活用してVRの開発が可能になっています。そして、Runtimeが刷新されていまして、パフォーマンスが大きく向上しています。あとはSurfaceの登場によって、2Dのコンテンツなどが非常に扱いやすくなっている点が特徴かなと思っています。
私からは以上です、ご清聴ありがとうございました。
(会場拍手)
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには