2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
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を終わりにしたいと思います。ご清聴ありがとうございました。
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05