UnityとFirebase

gremito氏(以下、gremito):では「FirebaseとUnity」ということでLT始めたいと思います。よろしくお願いします。

(会場拍手)

トップバッターということで、すごく簡単に話していこうと思います。今日のこのスライドはコードは一切ないので軽く。月曜ということでお疲れだと思うので、気楽に聞いてもらえればなと思います。

自己紹介です。岩本と申します。

ネットではgremitoというアカウントでよく活動しています。最近はUNIBOOKを書いたり、八耐というイベントもやっていたりします。

ゲーム以外にも広がるUnityの世界

Unityとは? みなさんご存知だと思いますが、よく言われているのはゲームを開発するツールですかね。ゲームエンジンとも呼ばれています。

それはすでに過去の話で、今ではAR、VR、映像系でも使われています。グラフィック周り、3D、2D周りでソフトウェアを作るときによく使われるツールになってきています。FirebaseはそんなUnityをサポートしていて、そんな話をこれからしていきます。

Firebaseは、これだけSDKを提供しています。

Unityしか扱ったことがないとか、サーバーサイドを全然知らないという人でも扱いやすくサポートしていて、しかもドキュメントもしっかり作られているんですよね(笑)。

すでに公式ドキュメントを見ている人も多いかと思うんですけれども、それだけやり応えがあるって感じがしますよね。

何を提供しているかと言うと、ネイティブプラグインと言われている、最終的にはiOSやAndroidにビルドして使えるような形で、Unityが提供しています。

フロントエンジニアがサーバーエンジニア無しでサービスインまで開発

先々週か先週(注:イベント開催日は4月2日)くらいに、ほそ道さん(@jshosomichi )という方が登壇されたスライドなんですけれども、おもしろかったので紹介させていただこうと思います。

「Firebaseってモバイルアプリを役立たさせるBaaSと呼ばれるものだよね」というプレゼンテーションですが、ほそ道さんはフロントエンドの方なんですけれども、新規事業のプロトタイプを作るということで、その際にFirebaseを使った事例の紹介でした。

今回資料を使わせてもらいますが、この資料では「Noサーバインスタンス、Noサーバサイドエンジニア」ということで、フロントエンジニアがサーバーの知識がそれほど無い状態でもプロトタイプまでは作れました、という話でした。

おそらく、実際にサービスインまでできるような形だったりするんですよね。こうした図のようにサービスを作っていくんですが、Unityもこんな形でできちゃいます。

1点、ベータ版であるCloud Firestoreがまだサポートされていないと思うんですが、使うとしたらRealtime Databaseなんですけども。まあ、そのうち(Unityにも)SDKが出るんじゃないかな、というところで書かせてもらってます。

実際、iOS、Androidでビルドして、そこで提供されているFirebaseのSDKを使ってサービスを作っていくような形になると思いますが、Unityはマルチプラットフォームと呼ばれているツールでもあって、いろいろビルドができます。

最近では、WebGLもホットになってきて、ここにも(Firebaseを)使いたいときは、RESTAPIや資料上に書いていませんが、JavaScriptのSDKを使って、対応できることはできます。

Firebaseはいろんな用途に応じて、設計しやすいようなSDK提供がされているので、「これは使うしかないよね」ということで、いろいろ触って思ったことをこれから話していきたいと思います。

学習コストをさほどかけずにFirebaseが使える

実際にFirebaseを用いてUnityで開発するとなると、こんな形になります。

何が言いたいかと言うと、共通化がすでにされているので、サーバーサイドの学習コストを通常よりもかけずにFirebaseを使うことができサーバー側の開発が短縮できます。

そして、先ほど言ったネイティブプラグインなんですが、これは何ぞや? という話だと思いますが、UnityではよくあるSDK提供の形なんで、C#とネイティブコードが主になります。

実際に、ネイティブプラグインと言われているAndroidやiOSの機能を呼び出すところのスクリプトは、Androidだとjarファイル、.aファイルなどが提供され、ネイティブの機能が使えるようになります。

一番上がC#で従来だと、次にAndroidでは、.aarファイルやjarファイルで最初は提供されていたんですけれども、最近は.aarファイルで提供されていました。iOSは生のObjective-Cで提供されていました。

Firebaseは、これらの形とは異なりdllファイルがほとんど.でした。

Androidは何も書いていませんが、実際にはAndroidマニフェストがちゃんとあります。先ほどの.aarファイルとかではなくて、おそらく上のFirebaseならではの拡張子(.srcaar)を使って、SDKを提供されているんじゃないかなと思います。

そして、どこがネイティブプラグインになっているかと言うと、.dllのところでおそらくC++やC#をパックにしていてSDKを提供しているようです。この.dllファイルは、ネイティブコードのパッケージになっています。

従来では、SDKを独自カスタマイズができやすい作りになっていたものの、Firebaseに関しては、独自カスタマイズできない状態で提供されていました。Firebaseは、独自カスタマイズしなくても良い、資料上のようにスッキリとした設計でSDK提供されているようです。

独自のSDKを作ることで気をつけたいこと

それでも「やっぱり独自のFirebaseのSDKを独自カスタマイズしたい!」みたいな変態さんがいるんですよ。僕もそのうちの1人なんですけれども(笑)。ネイティブプラグインとは、Android・iOSで提供されている機能をUnityで扱えるようにする。

独自カスタマイズする際には、先ほど紹介したネイティブプラグインを実際に作ることになります。

最近はVRが有名なので、VRを作るとなるとやっぱりPC、とくにWindowsで作ると思います。

そういえば、Appleが最新のHigh Sierraで外部GPUをサポートするとニュースがあって、おそらくその目的は「VR開発してよ」というアプローチなのかなって思います。

実際にそれでFirebase使いたくなったら、現状だと資料上のWebGLのようにRESTAPIを使って作っていくんじゃないかと思います。

FirebaseとUnityで抑えておきたいこと

FirebaseとUnityを連携させて開発するにあたって押さえておきたい話があります。まず1つが、ゲーム開発でクライアントやフロントエンドの人って、ゲームを面白くするために集中して作りこむので、バックエンドはお任せっていうことが少なくありません。でもFirebaseの一つひとつのサービスを知って、どうやって作っていくかをちゃんと知ってればゲームと一緒に開発できます。

その際、すでにローンチされているサービスがどうやって作られているのか話されている資料を参考にすると、然程難しく無いです。

2つ目に、独自のFirebaseのSDKを作るときは注意が必要です。この間GDCで、Firebaseは、Windowsマシン上のUnityへのSDK提供が発表されました。

Windows使ってVR開発している僕の知り合いに「VRでもFirebaseのFirestoreとかあのへんのサービスを使って、サービスを作りたいんだよね」という話をしていたんです(笑)。でも、この発表があったから結局作らなくてよかった、と。なので注意が必要なのです。

何が言いたいかと言うと、クライアントだけの話ではなく、サービス全体で意識して開発することが大事です。

Unityを使っている人はUnityだけで話が終わってしまったり、面倒くさいことはやらないみたいな。「3D上でやらなくちゃいけないことがあるから、サーバーなんて考えてられないよ」となりがちです。これは、別に悪いことではないです。

でも、サービスとしてユーザーに提供するというところは一緒なので、全体をちゃんと見据えてサービスを作っていくというところは意識して開発すると良いと思います。そんなきっかけ作りにもあると思い、最近Firebaseを使い始めました。

ご静聴ありがとうございました。

(会場拍手)