アーキテクチャを意識したクライアントサイドの実装に強みがあります。元々はサーバーサイド Java を背景に持っており、そこから Android (当時は Java)の技術研究に着手し、さらに iOS 開発も内製化が可能になりました。iOS は Swift (obj-C は対応不可)、Android は Kotlin に完全移行しています。
クライアントアプリ実装の困難な理由の1つは、そのほとんどが非同期処理であることです。その解決として、Android は LiveData + RxKotlin、iOS は RxSwift (RxCocoa, RxRelay) を導入しています。
また、アプリケーションはただ動作すれば良いというものではありません。その場しのぎで実装されたものは、後に「技術的負債」として残ることになり、それはエンジニアの工数問題だけでなく、間接的にユーザーの価値を損ねることにも繋がります。
現在、多くのクライアント技術者に支持されている、 MVVM やクリーンアーキテクチャの導入により、保守・変更が現実的なラインを満たした内部構造でアプリケーションを作成することが可能です。
スマートフォンアプリは、ごく軽量なツール系アプリを除けば、インターネット環境はほぼ必須となります。我々は、サーバーサイドで API を提供する技術も独自に有しており、その実装と長期的運用が可能です。
Java のバックグラウンドがあるため、その資産を活かす形で我々は Scala を選択しました。 Play framework は Scala の能力を発揮する Web フレームワークです。
データベースは、主流である RDB ではなく、ドキュメント型の NoSQL である MongoDB を採用しました。今の所それで十分ですが、今後大量トランザクションをさばく必要に迫られれば、部分的に RDB の導入、またキャッシュのため Redis などを検討する可能性はあります。
日々のタスク管理やドキュメント管理には、Atlassian社の JIRA と Confluence を採用しています。現在では他にも有用なツールが出てきているため、今の製品に縛られる必要はありませんが、現在の当社の規模では問題なく機能しており、ツール選定においては直近の課題はありません。
また、ソースコードのバージョン管理には、同じく Atlassian社の Bitbucket を使用していましたが、こちらは順次 Github に移行しています。
Our major focus is on the client-side technology and architeture. We started the research by developing Android apps with Java language, most of which is now translated into Kotlin.
Later on, we started another study, development of iOS apps with Swift. In the client-side technology, difficulty is to deal with concurrency that affects user experience to a considerable extent.
To solve asynchronous issue, we adopt libraries proviede by ReactiveX such as RxKotlin and RxSwift.
Also, the application should be structured in well-separated by layers. We adopt clean architecthre and MVVM (Mocel-View-ViewModel) structure.
We also cover the server-side technologies to interact client-side apps by providing APIs behind the scenes. To do so, we chose Scala to enable rapid development and to make use of our Java's legacy.
As for database, we chose schemeless, document-based database such as MongoDB rather than obsolete, extraneous relational database. As of present, we do not need to handle a large number of transactions and persistence of millions of records.