ENECHANGE Developer Blog

ENECHANGE開発者ブログ

ネイティブアプリ開発をスムーズにするためにサーバーサイドエンジニアとして取り組んだ4つのこと

EV充電サービス事業部の@yuyasatです。暑い時期ですが、日々EVライフを満喫しています。1kmあたりの移動で考えたときにガソリンよりも電気の方が安いのでガソリン車時代よりも距離を乗っている気がします(環境に良いのか悪いのか・・)。

今回は、EV充電サービスのアプリ開発にあたって、ネイティブアプリ開発をスムーズに行える様にするために、サーバーサイドエンジニアとして取り組んだことを書いてみようと思います。

認証の簡略化

EV充電サービスアプリでは、電話番号を入力すると6桁のワンタイムパスワードが記載されたショートメッセージ(SMS)が送られ、その番号を入力することで認証をします(図1)。アプリの仕組み上、電話番号に基づいてユーザーが作成されますから、開発時やQA時は異なる電話番号で認証する必要があります。このとき、電話番号を用意し、毎回ショートメッセージを確認して入力するというのは非常に大変です。そこで、開発環境やQA環境では、どの6桁の番号でも認証を通す様にしました。このときSMSは送られない様にしておきます。こうすることで開発者やQAの方がどの電話番号でもログインできます。また、SMSを送るコストも削減できます。6桁の番号が間違っていて認証エラーとなる場合も、例えば電話番号の下4桁が9999の場合は認証エラーとなる様に返すとすることで、開発や動作の確認ができます。
また、このようにダミーではなく、実際にSMSでワンタイムパスワードを送ってテストする必要もあります。この場合は、特定の電話番号であればSMSを送る様な仕組みを導入してテストしました。
この挙動にはログイン認証をしやすくするということに加えてQA時にも有効に働きました。QAの方が報告した不具合に対してエンジニアは挙動を確認するのですが、QAの方がログインしたときと同じ電話番号を使えばエンジニアもログインできるわけですから、不具合となっている挙動をすぐに確認できます。これは当初想定していなかったメリットでした。

図1. 認証画面

レコードの事前生成

アプリには充電履歴を表示するという機能があります(図2)。その名の通り、過去に充電した履歴を閲覧できる機能です。一画面に表示できるレコード数以上の場合の挙動も実装・確認する必要がありますから、特定の日に1回だけ充電した程度のレコード数では開発がしにくいです。そこで、開発時にはユーザーの作成と同時に充電履歴のレコードを生成する様にしました。日毎の充電件数はランダムで生成する様にすることでできる限り現実に近い形でレコードを生成する様にします。こうすることで開発者はログインしたと同時に充電履歴の開発ができます。もちろんこの動作は一度開発が終わったあとは解除します。

図2. 充電履歴画面

実際の充電器をエミュレート

これはエネチェンジEVチャージアプリの固有の特徴ですが、実際の充電器と連携する以上、充電器がないと充電開始や停止ができません。しかし、実際の充電器がないと充電開始や停止が試せないというのでは、開発効率が激減してしまいます。そこで、実際の充電器からのレスポンスを模擬し、充電器がなくても充電開始・停止や料金計算ができる挙動となる様にしました。

SwaggerでのAPI記載し同時に実装も完了させつつデザインの整合性も確認

ネイティブアプリ開発をするにあたって避けて通れないのがサーバーサイドのAPIです。ネイティブアプリからは頻繁にAPIが呼ばれます。今回、APIの定義はすべてSwaggerを用いて記述しました。今はSwaggerを使うのは標準だと思いますが、今回の開発の場合、SwaggerでAPI定義をするとともに実装も行いました。多くの場合、APIを定義したのち、実装に取り掛かりSwaggerを使うことでサーバーサイド側の開発が終わっていなくてもネイティブアプリ側の開発ができます。しかし、机上でAPI定義をしたとしても実際に実装をしていくうちに不十分な箇所がどうしてもでてきてしまいます。API定義と実装を行き来して開発することで考慮漏れをできる限り減らすことができました。
実際にはAPIを使用する箇所のデザインと並行してAPI定義や実装を行うことで画面描画に必要なデータを漏れなく定義できているか、逆にデザイン側で要件上実現が不可能なことが描かれていないかをチェックできます。API定義・実装・デザインチェックを同時並行で行うことで開発速度が高まると思います。

最後に

開発のためにproductionでは実行されないコードを書くのは一見すると開発効率を落とすものに見えるかもしれません。しかし、ネイティブアプリ開発やQAの効率を考えると実装は取るに足りないコストでした。過去にも少しの手間を惜しんだ結果開発に時間がかかるということを経験したことがあるので何が開発効率の向上に効く活動なのかというのを意識しながら開発を進めていきたいなと思いました。

エンジニア募集中!!

EV充電サービス事業部では日本の電気自動車の未来を一緒に築いていく仲間(Railsエンジニア、Flutterエンジニア)を募集中です!ぜひご応募お願いします! enechange.co.jp enechange.co.jp