6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Moff EngineeringAdvent Calendar 2019

Day 7

Moffの採用しているソフトウェア技術についてまとめてみた

Last updated at Posted at 2019-12-06

TL;DR

会社の技術紹介記事がないと思ったので、描いてみた。

背景

Moff AdventCalendar第1週終盤は弊社のソフトウェア技術周りで使っている技術を紹介したいと思います。

MoffBand

http://www.moff.mobi/
当社の製品、MoffBandです。加速度センサ、ジャイロセンサ、BLuetooth(Bluetooth Low Energy)搭載の小型デバイスです。コイン電池で最大20時間の継続利用ができます。当社のいくつかのアプリ利用時に接続して使います。

アプリケーション

ネイティブアプリ

Unity

ゲーム要素とアプリ上の3Dレンダリングをする要素を考慮して、Unityを採用しています。
UnityからiOSもしくはAndroidアプリをビルドしてリリースをしています。
センサーデータを用いてリアルタイムにセンサーから発せられたデータを元に何かを描画することもあるため
ReactiveXを活用することが多いです。

iOS

MoffBandを接続するためのSDKをiOSのプロジェクトにして用意をしております。
こちらもUnity同様、RxSwiftで一部センサーデータを受け渡すメソッドを実現しています。
また、iOSだけで開発したネイティブアプリもあり、MoffBandを使わないようなアプリでシンプルなものを要求される場合はiOSだけで完結させています。

Webアプリ

React.js

ネイティブアプリとセットのサービスとして、帳票やユーザーのデータ閲覧のための機能はWebで実現しています。当初はVue.jsを活用していた時代がありましたが、現行は全てのプロダクトではReact.jsを用いて実装しています。一番最初のプロダクトのリリース当初はReact.js周りのドキュメントが充実していたこともあり、以降もRaect.jsを使ったプロダクトで培ってきたノウハウで新規でもReact系列でのSPA開発を進めています。

Redux

上記の通り、当初はReduxによる状態管理でWebクライアントを実装しました。Redux-Router, Redux-Formを多用しています。

Redux-Saga

プロダクション環境で作ってきたSPAをメンテナンスしていくと、次第にReduxによる処理の記載量が膨大になることが技術的に課題になってきました。記載量もそうですが、単純に設計が読み取りづらくなったのもあります。以降の新規プロダクトにはRedux-Sagaでそこの部分は解消しつつあります。

TestCafe

機能が複雑になったり、増えてきたこともあり、少人数で運営するには少して厳しくなってきたので、テストコードを徐々に増やしていきました。E2Eテストも複雑な要件が増えてきたので、これを解消するためにTestCafeでそれを対処しています。以降E2Eでの確認工数は爆下がりしているので、Jestでの単体テストと合わせて実装することで開発効率を向上させることができました。

バックエンド/DevOps

AWS

Serverless

ヘルスケア事業での最初のサービスでインフラを構成するためにServerless(Cognito+API Gateway+Lambda+DynamoDB)での最小構成で実装しました。もともとAWSで直に設定してβ版をオープンした後、CloudFormationでテンプレ化し、リリースして1年程度すぎたあたりでServerless Frameworkへの換装を行いました。以降バックエンドでの改修・リリース管理はServerless Frameworkによるコード管理になるので、改修管理が比較的楽になりました。

Kinesis

センサーデータを直に保存する場合はKinesis系統の技術で対処しています。
リアルタイムにデータが欲しいケースであればKinesis Data Streamを使い、遅延してもいいケースであればKinesis Firehoseを使います。

Athena

ログデータや、センサーデータにアクセスするために大量のデータをロードする必要があるので、Athenaで対処しています。例えばKinesis経由して溜まってきたS3上のデータを解析するためのダッシュボードを考える場合などで活用しています。

DataPipeLine

Serverless構成のデータベースのバックアップを取るためにS3でするためにDataPipeLineで保存しています。DynamoDB Backupがリリースされて以降も特に手は入れていませんが、ゆくゆくはそちらも起動してことを想定しています。

StepFunction

Advent Calendar4日目の記事でも描きましたが、バッチ処理でDynamoDBからデータをCSVに整形する部分をバッチ処理できるようにしています。体系的な処理を書いて何かする分には非常に有効かと思います。後々のAdvent CalendarでもStep Functionの活用事例がでてくるのでそちらも参考になれればと思います。

CircleCI

ヘルスケア事業での最初のリリース時には導入しませんでしたが、Serverless Frameworkへの以降を機にテストを徹底させるため、導入を決めました。本当はCodeBuildでもできる内容ではあるのですが、料金でも一定額で維持できること(ちなみに今は従量課金版もありますが)を優先してそうしました。
現行では、ほとんどのインフラ系リポジトリ対してはCircleCIが必ず動くようになっております。
また、E2EテストもCircleCI上で実行できるようにしており、SPAに関してはテストの自動化を実現できました。(ちなみにテストのカバー率はまだまだこれからですが、量産するだけの状態ではあります。)

その他

Amazon Connect

Advent Calendar2日目の記事でも紹介していますが、コールセンターを設立するために活用しています。
あまりエンジニアリング要素が他の技術に比べて決して多くはないですが、この令和の時代でも対面を大切にする業界においては、今後も活用していく流れになるかと思います。

分析業務

Google BigQuery

DynamoDBから抽出したデータのimport先としてGoogle BigQueryを活用しています。Athenaでもいいのかもしれませんが、料金的にはいまだにこれで無料でやり続けているのでしばらくはこれを使うことを想定しています。でもそろそろAthenaかもなあ。

Pandas/Numpy/Scipy/Jupyter Notebook

ヘルスケア事業として提供しているサービスはBtoBtoCのサービスではないかと考えています。例えば病院であれば、その患者さんに利用してもらって初めてデータとして有効活用できるます。よって、toBのクライアント、そのクライアント先で使われている利用者(toC)の利用状況をみることはサービス改善を行う上では非常に重要です。一時的な分析はエンジニアリングの知見を持っている人たちにとってはコーディングで解決する方が効率的なので、PandasをメインにJupyter Notebookを使ってデータの可視化作業と前処理したデータ提供を行なっています。分析定例も実施しており、その場でJupyter Notebookを参考までに共有するようにしています。

Tableau

Google BigQueryから定常的に観測するようなデータはTableauでデータシートを作ってしまい、定期的にSlackにてダッシュボードを配信しています。これで重要なKPIをウォッチしています。

まとめ・展望

  • 弊社の開発で採用している技術を紹介しました。
  • 特色もいくつかピックアップしました。興味あったらぜひコンタクトください。

次の土曜日は開発の運用に関して共有します。ありがとうございました。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?