SHABOMの技術紹介
AR技術を組み合わせた新しいSNS「SHABOM」はどうやって作られているのか。今回は使用している技術を、技術選定を行ったメンバーの一人であるマミーが紹介していく記事となります。
フロント
Unity2019.1.10
まず使用するUnityのバージョンに関しては、プロダクトが決定する以前に固定していました。なぜなら、ハッカソンなので新しい機能を積極的に使いたかったからです。Unityには様々なバージョンが存在しますが、VFXなどのPreviewパッケージも機会があれば使っていきたいと思っていたので、なるべく新しめのバージョンを採用することにしていました。
ARFoundation
これはUnityでARアプリを開発する際のパッケージなのですが、大きく分けて三種類のものを考えていました。(ARKit/ARCore/ARFoundation)
その中で、なるべく多くの人が使えるように、android/iOSの両プラットフォームになるべくコストをかけずに対応したかったので、ARFoundationを採用しました。
Unity Test Runner
これはプロダクトが大方完成したハッカソン後に導入しました。笑
導入した理由は「テスト自動化したい。Unity Test Runnerと言うものがあるのか。ふむふむ面白そうだ( ̄▽ ̄)」って感じでした笑
導入した結果として、コードが理想の動作をするかの確認がしやすくなったことがあります。実際に実機で動作させないと検証が難しいところももちろんあるのですが、サーバから受け取ったデータが正しく処理できているかなど、実機で確認する必要がない部分はテストケースを複数書いておいて、ワンクリックで全テストを検証できるようになったので、その辺りのコストが下がったので楽になっている感覚はあります。
Zenject
こちらは開発前に導入を決定していました。ZenjectはDIツールです。今回のハッカソンで作りたいものの規模感が大きくなること、フロントエンジニアが二人いたので分担作業することが明確だったこと、なるべく依存関係などにコストを払わずスムーズに機能実装に集中できるようにしたかったこと、などからZenjectを導入してさくっとInstallerを書いて必要なシーンにおいておくようにしました。初めて導入したツールだったのでまだまだ活かす方法があったかもしれませんが、結果としては導入してある程度楽になったかなと思います。
バックエンド
Python
ハッカソン中のバックエンドはPythonで実装しました。インタプリタ型言語を採用したのは、ハッカソンなのでとにかくできた部分からどんどん動かしていきたかったというのがあります。速度的に遅いかもしれないとか、些細なタイポとかも実行時にエラーとなって出てしまうとかがあって悩んだのですが、とにかくハッカソンに間に合わせるということを最大目的においたのでPythonを採用しました。
Flask
pythonのWebアプリケーションフレームワークはいろいろあると思うのですが、Flaskを採用した理由として、使用経験があったこと、ハッカソン時点では大規模にはならないだろうということでFlaskを採用しました。
MongoDB
「NoSQLが熱い!」って風の噂で聞いたので使ってみたかったというのが一番でした笑以前リアルタイムアプリケーションを作ったときにも利用したのがMongoDBだったこともあり、少し使用経験もあるので採用しました。のちにMySQLにしておけば良かったと後悔することになります笑
Go
ハッカソン後にバックエンドエンジニアの一人と相談してPythonからGoに書き直すことにしました。速度的に速いこと、コンパイルを挟むので些細なミスが出にくい、あと、Goは使ってない変数とかがあるだけでコンパイルエラーが出るのでその辺りもいいなと思っていました。言語的な複雑性も少なく、共同開発してもある程度整ったコードになりやすそうだという理由もあります。
Echo
速度を比較した記事や、使用されている数を様々なフレームワークと比較した結果、総合的にEchoでいいだろうということになりました。
MySQL
MongoDBからMySQLにDBMSを変更した理由として、データの更新処理などにそこまでリアルタイム性が必要なかったことや、取り扱うデータの形式も明確に定義できるものだったのでNoSQLからSQLに変更しました。
Docker
APIサーバとDBサーバをどうやって接続しようかと考えていたのですが、Google App Engine(GAE)を使って以前APIサーバを建てたことはあったのですが、DBとの接続となるとまたいろいろ設定が面倒かと思い、Dockerを使ってまとめてコンテナで管理してそのままデプロイできれば簡単になるなと思って導入してます。別のハッカソンでマミーが友達に教えてもらいながらいじった程度なので、今後さらに便利な機能を使って開発を効率化していきたいと思っています。
さいごに
今回はSHABOMに使われている技術についてずらっと紹介してみました。一応全ての技術に関して採用した理由、リプレイスを行った理由があります。まだまだ知らないツールや知識もあるので、今後も積極的に使えそうな物は導入していきたいなと思っています👍