画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

株式会社スマートドライブに入社して4ヶ月くらいがたった

気がついたら3ヶ月が過ぎて試用期間が終わって、4ヶ月過ぎようとしているのでもろもろ書いてみる

何やってる会社なの?

ざっくり言うと車に専用のハードウェアを取り付けて走行データを収集して、スマホ経由でサーバに送ってサーバで解析して、見やすい形にしてブラウザで表示するというサービスをやってる。

車から走行データを収集するためのハードウェア開発、 ハードウェアで吸い上げた情報をBluetoothスマホに送り、 スマホからサーバに情報を送る部分や、情報を表示するためアプリ開発。 サーバ側で各種情報を受け取って解析する部分や各種APIを開発しているサーバサイド開発、 解析した結果を見やすい形で表示するフロントエンド周り。

ハードからアプリ、サーバ、フロントエンドといろんな事をやってる会社です。

ハード周りはあまりちゃんとわかってないけど、ファームウェアC言語で書かれてるっぽい。サーバサイドはRailsとGo。フロントエンドはSPAでReactとか使ってるっぽい。

かなりざっくり書いたけど、もうちょっと詳しく知りたい方は以下のページをさらっと見てもらうのがいいと思います。

blog.smartdrive.co.jp

www.smartdrive.co.jp

www.wantedly.com

jp.techcrunch.com

スマートドライブで僕がやってること

Androidエンジニアとして働いています。

一般的なWebサービスのアプリエンジニアと大きく違うところは、ハードウェアとの通信があるところです。 ハードウェアとスマホBluetoothで接続して情報をやりとりする。WebのAPIとは違ってjsonというわけではないので、どうやって情報をやりとりするのかを話して決めて、実装して。みたいな感じ。

ハードウェアはこのページの下の方にあるやつです。

www.smartdrive.co.jp

サーバとの通信について考えるだけでなく、ハードウェアとの通信も考える必要があって、 その辺が大変なところでもあり、やりがいがあるところでもあります。何かうまく動かないなーと思った時にうまくアプリ側が原因か、ハードウェアが原因か切り分けていろいろやります。

入社してしばらくは裏側のServiceで動く処理を主に書いていてAndroidのViewとは完全に無縁の世界でした。その後View側もそれなりに触るようになって全体感がある程度見えてきたかなという感じです。

 Bluetooth Low Energy

今の会社に入るまではBLE周りに触れ合う事はなかったんですが、AndroidでBLEといえばつらいという感じです。

まだドヤ顔で具体的に何がツラミなのか言えるレベルではありませんが、ざっくり以下のような感じです。

qiita.com

↑のQiitaの記事にも書いてありますが、BLEのツラミに対応するために別プロセスで動くようにしており、プロセス間のやりとりがまた大変だったりもします。

プロセス間のやりとりはdex.fmの以下の回で多少言及されてた気がします。たぶん

http://dex.fm/post/151298631133/10-hacks-in-drivemode
dex.fm

SDK

ハードウェアと通信したりする部分をSDKとしてアプリとは別に切り出していて、別アプリで使う時もそれを使っています。 特に外部に公開しているわけではなく、今のところは内部で使っているものです。

この機能はSDKが持つべきだよなとか、ここからはアプリ側が持たないとなとかその辺を考えたり、SDKとアプリは別リポジトリで管理してるので、普段の開発の進め方とか、ブランチの切り方とか、リリースする時にどうするかとか、その辺いろいろ考えさせられます。

言語とかライブラリとか

ほぼすべてKotlinで書かれています。Javaは2〜3ファイルあるくらいです。 RxJavaもバリバリ使ってます。入社するまでKotlinもRxJavaもあんまり使った事なかったけど、だいぶ使えるようになってきました。

Kotlinスタートブック

Kotlinスタートブック

RxJavaリアクティブプログラミング (CodeZine BOOKS)

RxJavaリアクティブプログラミング (CodeZine BOOKS)

この2つの書籍をAndroid開発してるエンジニアはほぼみんな持っているという意識の高さです。

という事で

4ヶ月くらいたった感想でした。