
2025.03.19
ドバイ不動産投資の最前線 専門家が語る、3つの投資モデルと市場の展望
UnityとGoogleCloudFunction を連携して社内サービスを作った話(全1記事)
リンクをコピー
記事をブックマーク
小林慶祐氏:それでは、さっそくですがライトニングトークを始めたいと思います。表題のとおり、「UnityとGoogleCloudFunctionを連携して社内サービスを作った話」ということで、小林から発表します。よろしくお願いします。
まず初めに登壇者情報ということで、軽く自己紹介をさせてください。現在、Graffity株式会社でUnityエンジニアとして活動している、小林と申します。専門領域は一応サウンドプログラミングで、Twitter(現X)では@8bitdots、QiitaはCova8bitdotというアカウントでいろいろ発信をしてます。
最近だと、このフェスを機会に、Unity関連のデザインパターンや細かい内容の記事をなるべく二番煎じにならないように心掛けて、平日毎日投稿しています。過去にいろいろなUnityのコミュニティで登壇したりとか、あとは技術書の査読などを行っています。
急遽宣伝になって恐縮ですが、私が共著で参加している『Unityバイブル R5夏号』に先ほど「Amazon」のページができました。いわゆる初中級者のゲーム開発者向けの本になります。サウンドの章を丸々1章担当しているので、Unityに興味があったり、近くにUnityの初中級者の方がいたら、ぜひぜひ予約ボタンをポチッてもらえればと思います。
まだ今はページができたばかりで、たぶん明日か明後日ぐらい(登壇時点)から予約ができるようになるかと思うので、ぜひよろしくお願いします。
また、今所属している会社のGraffityは、現在はtoC向けのAR事業と、あとはtoB向けのARエンタメDX事業というところにフォーカスしている、ARに特化したスタートアップ企業になります。
まだ社員も15人に満たないぐらい、本当に小規模ですが、ARのシューティングゲームなどをリリースしていたりします。ARに興味がある方がいたら検索してもらえればと思います。
ということで、宣伝と自己紹介はこのぐらいにして、さっそく本題に移ります。
まずは基礎知識の部分からおさらいしたいと思います。「Unityとは?」というところです。Unityとは、Unity Technologiesが提供しているゲームエンジンです。
基本的に言語はC#で書かれていることが多いです。PC、iOS、Android、WebGL、あとはコンシューマー、例えばSwitchだったりPS4だったりXboxだったりにアプリをビルドできる、マルチプラットフォームに展開できる特徴を持っています。
国内のスマホゲームはだいたいUnity製で、あとはプラグインを導入することでARやVRのアプリも作ることが可能になっています。
次、「Google Cloud Functions」について。おそらく今回の参加者はWebエンジニアの方が多いのかなと思って。そうなると本当に釈迦に説法で恐縮ですが、簡単に説明したいと思います。
GCFとはいわゆるGCP(Google Cloud Platform)上で提供されているFaaS(Function-as-a-Service)と呼ばれているものになります。
いわゆるサーバーレスと呼ばれているもので、クラウド上で任意のコードを実行する環境を提供してくれるようなものです。JavaScriptだったりPythonだったり、いろんな言語に対応しているものになります。
こちらを聞くと「ぜんぜんニッチじゃないじゃん!?」と思う方が多いかなと思います。正直、登壇する前は自分もそんな感じで思っていたんですが、ここでQiitaの検索結果を見てみましょう。
Qiitaで「Unity CloudFunction GCP」で検索すると、書いた当時は8件程度記事が出てきました。関連度順でいうと、上位3つはすべて自分の記事になっております。
一応「CloudFunction」というキーワードだと、UnityのほかのSDK(Software Development Kit)で使われている用語だったりするので若干Unityの記事があるんですが、いわゆるGCFに関する記事でいうと、ほとんどヒットしないかたちです。
もうちょっとワードを絞ってみようと思って「Unity GoogleCloudFunction」で検索すると、なんと自分の記事しかない。
「おや?」と。UnityもGCFもぜんぜんニッチじゃない技術だけれど、実は組み合わせるとニッチであることがQiitaの結果からだと言えるかなと思ったので今回登壇しました。
今回の主な部分です。UnityとGCFとGCsql(Google Cloud SQL)で、社内のデバッグ端末の管理サービスを構築しました。Unityで作ったアプリなので、入力インターフェイスとしてはAndroidでもiOSでも動かせるものです。
それぞれにNFCタグを各デバッグ端末にあらかじめ設定しておいて、その端末のNFCデータと社員証を読み込むことによって、誰が何の端末を借りるのかという情報をGCFに投げるというかたちです。
GCF側はPythonで実装していて、Pythonで受け取った情報をパースして、Cloud SQLにあるデータベースに問い合わせて、ちゃんと借りられるかどうか、返却するかの処理を行っています。
(スライドを示して)貸し出し・返却フローは、図でいうと真ん中から下半分というかたちです。利用者には非エンジニアの方も多いので、一応そういう方がレンタル状況を確認するためにも、テーブルのアップデートと同時にスプレッドシートの更新も行うようにしています。
また、返却期限は一応設けているんですが、たまに返却期限を過ぎていたり、あとはリモートワークもあるので、場合によっては端末を持ち帰って開発するケースもあります。
その場合だと、実は借りっぱなしでしばらく放置しているようなものもあったり、紛失してしまったなどのトラブルもあったりします。
そういう紛失の防止というところで、もし返却期限を過ぎていたら、レンタルした人に対してちゃんと通知を飛ばすようなボットも作成しています。それが画面の上半分の青いエリアですね。
cron的に用いているのがCloud Schedulerで、そこからCloud Functionsを叩いて、テーブルに問い合わせをして、必要であればSlackで通知するかたちで作っています。
実際に作ったものの写真になります。左側に社員証のFeliCaを用意しておいて、端末に対してNFCタグのシールを張って、それをレンタルのアプリで読み取ってあげるというかたちです。
社員証を読み取ったので、「こんにちは. covaさん」みたいなかたちで自分の名前が出ています。この後、NFCタグを読むとデバイス情報が出て、あとは借りるボタンを押すと、そこからエンドポイントを叩くようなかたちになっています。
また、右側は先ほどの返却通知ボットが実際に動いている例です。メンションの部分は個人情報になるのでぼかしていますが、こんな感じで誰がなんの端末を借りて、返却期限を過ぎているとメンションが定期的に飛んでくるシステムを作って、紛失の防止を減らしています。
ここまで聞くと、「普通に実装すればできるんじゃないか?」と思うかもしれませんが、実はけっこう落とし穴がありました。
そのうちの1つが、UnityからGCFのエンドポイントを叩く部分でした。cURLで叩く時は普通にJSONのデータをPOSTして通っていたのですが、同じJSONのデータをUnityに食わせてエンドポイントを叩くと、なんと400のエラーが出て弾かれる。Bad Requestとなってしまった。
これを解決するためにいろいろ検索したのですが、たまたま海外の「Stack Overflow」で1件だけ同じ記事が見つかったので、そちらを参考にしました。
解決方法としては、UnityのcURLのラッパー的なものでUnityWebRequestというクラスがあるので、それを叩いてエンドポイントを呼び出すのですが、その時に、ちゃんとヘッダーを書いたりダウンロードとかアップロードのハンドラーを書くことが大事です。
(スライドを示して)その中でも3つ目が一番大事で、POSTするJSONデータをバイナリに1回エンコードしてあげないとなぜか通らないことがありました。なぜかJSONのそのままのStringの文字列データはNGだけど、バイナリに変換するとGCF側が受け付けてくれるようなことがありました。ここでけっこう沼ってしまって、せっかくなのでそのことを記事として公開してあります。
まとめです。一般的にスマホゲームでは、UnityからAPIサーバーのエンドポイントを叩く時は、GCEとかEC2のインスタンスを用意することが多いです。ただ、社内サービスとか小規模であれば、サーバーレスのGCFやLambdaなどで代替は可能かなと考えています。
また、先ほどのQiitaの記事の例もありますが、意外と既知の技術同士の組み合わせをやっていない場合があるので、ある意味組み合わせ次第ではブルーオーシャンになっているのかなと思います。
またQiitaは個人的に、「いつか誰かの役に立つだろう」というような知見の共有に最適なプラットフォームだと考えています。「バズらなくても誰か1人でも役に立てば良いかな」というスタンスで記事を書いているので、ぜひそういう記事が増えてくれるとすごくうれしいなと個人的に思っています。
最後に、みなさんもいろいろな技術を組み合わせて便利なサービスを作っていきましょう、ということを締めの言葉にして、LTを終わりにしたいと思います。ご清聴ありがとうございました。
関連タグ:
2025.03.17
いくら読書をしても「成長しない人」が見落としていること 10分でできる「正しい学び方」
2025.03.17
ソフトバンクとOpenAIにとって「歴史的な日」になった 孫正義氏が語る、AI革命の全ぼう
2025.03.17
不確実な時代だからこそ「知らないこと」を武器にする ハーバード主席卒業生の逆説的なメッセージ
2025.03.19
部下の「タスクの先延ばし」が少ない上司の特徴とは? 研究が示す、先延ばし行動を減らすリーダーの条件
2025.03.18
フェデラー氏が語る「努力しない成功は神話」という真実 ダートマス卒業生に贈る勝利の秘訣
2025.03.18
全知全能の最先端AI「Cristal」が企業の大脳となる ソフトバンク孫正義氏が語る、現代における「超知性」の可能性
2025.03.12
SNSで炎上している研究者は「研究者として正しい」 人文学のプロ・阿部幸大氏が説く“強い意見を出せない時代”に対する考え方
2025.03.14
三流の上司と一流の上司の違い 部下の心を動かす科学的アプローチ
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.13
改正後のiDeCoと退職金の受け取り方の事例 「改悪」は本当か? プロが真相と狙いを解説
2025.03.17
いくら読書をしても「成長しない人」が見落としていること 10分でできる「正しい学び方」
2025.03.17
ソフトバンクとOpenAIにとって「歴史的な日」になった 孫正義氏が語る、AI革命の全ぼう
2025.03.17
不確実な時代だからこそ「知らないこと」を武器にする ハーバード主席卒業生の逆説的なメッセージ
2025.03.19
部下の「タスクの先延ばし」が少ない上司の特徴とは? 研究が示す、先延ばし行動を減らすリーダーの条件
2025.03.18
フェデラー氏が語る「努力しない成功は神話」という真実 ダートマス卒業生に贈る勝利の秘訣
2025.03.18
全知全能の最先端AI「Cristal」が企業の大脳となる ソフトバンク孫正義氏が語る、現代における「超知性」の可能性
2025.03.12
SNSで炎上している研究者は「研究者として正しい」 人文学のプロ・阿部幸大氏が説く“強い意見を出せない時代”に対する考え方
2025.03.14
三流の上司と一流の上司の違い 部下の心を動かす科学的アプローチ
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.13
改正後のiDeCoと退職金の受け取り方の事例 「改悪」は本当か? プロが真相と狙いを解説
【手放すTALK LIVE#046】 出版記念イベント 『大きなシステムと小さなファンタジー』 一つ一つのいのちが大切にされる社会へ
2025.02.03 - 2025.02.03
「聴く」から始まる組織変革 〜篠田真貴子さんと考える対話型マネジメント〜
2025.02.14 - 2025.02.14
「目の前の利益を優先する」心理とは:ビジネスに活かせる意思決定の科学
2025.02.12 - 2025.02.12
新刊『組織をダメにするのは誰か?職場の問題解決入門』出版記念セミナー
2025.02.04 - 2025.02.04
会社の体質、これまでどおりで大丈夫? 職場に新たな風を吹き込むための「ネガティブ・ケイパビリティ」入門
2025.02.10 - 2025.02.10