Nature RemoやNatureスマート電気で使われている技術と今後の展望 -2022-

Nature株式会社ソフトウェアエンジニアチームです。

NatureはスマートリモコンNature Remo1をはじめ、家庭の電力マネジメントのためのスマートエナジーハブNature Remo E2や、電気小売事業のNatureスマート電気3を提供しています。「自然との共生をドライブする」をミッションに掲げ、お客様に利便性と同時にエコであるという、新しいライフスタイルを提供したいと考えています。

昨年、Nature Remoは累積販売台数40万台を越えましたが、エンジニアはハードウェアエンジニアが2名、ソフトウェアエンジニアが8名の体制です。ハードウェアも含め、技術領域が多岐にわたっているため、まだまだエンジニアを募集中です。

本エントリではNatureで使っているソフトウェアの技術スタックや今後の展望2022年バージョンを紹介したいと思います。これは現状の状況を踏まえて選定しているものであり、今後も必要に応じて随時更新していきます。

クラウド

AWSをメインで使っています。Google Nestとの連携部分でCloud Functionsを使ったり、FirebaseなどGoogle系のサービスも一部利用しています。インフラの管理にはTerraform、監視にはDatadog、Pagerdutyを利用し、ユーザーへのサービス状態共有のためにはstatuspage.ioを利用しています。

お客様も継続的に増加しており求められる信頼性も上がっています。今後サービスが拡大してく中でも安定性を維持して、より安心してお客様にサービスを利用してもらえるように継続的な改善に取り組んでいきます。数年で100万台規模を目指しているので、それにも耐えられるように、アーキテクチャ変更が必要になるかも知れません。

バックエンド

ほぼ全てGoで書いています。一部、LambdaやCloud FunctionsでNode.jsを使っています。Goは開発速度と実行速度のバランスを取りやすい優れた言語だと感じています。

アプリケーション実行環境にはAmazon ECSを使っています。フロントエンドではAWS Amplifyを利用しています。

一部、Amazon EchoGoogle Nestとの連携のためにLambdaやCloud Functionsを使っていますが、他の部分でFaaSはあまり積極的に活用しているわけではありません。

Nature Remoのシステムは、IoTデバイス側には、リソースの制約もあるため、あまり複雑なことをさせず、代わりにバックエンド側にコアなロジックを持たせています。なので、何気にバックエンドが担う部分は大きいです。安定させながら機能追加をしていくことがチャレンジングな部分です。

去年サービスを開始した電力小売り事業のNatureスマート電気では、電力小売り事業特有の電力データのやり取りが外部と発生します。こちらも全てGoを用いて運用しています。 また電力事業とデバイス事業を組み合わせたNature Smart Eco Modeやそれを利用したデマンドレスポンス4の取り組みなども始めました。 どちらの事業も安定して運用しつつ、融合させていくというのが新しい課題です。

データストア

Amazon Aurora MySQL, Amazon ElastiCache Redis, Amazon DynamoDBを使っています。メインのデータはMySQLに保存する方針ですが、RedisはキャッシュやPub/Sub用途、DynamoDBは時系列データのようなデータを保持するのに活用しています。

以外にも割とオーソドックスなバックエンドのスタックを活用していると思われるのではないでしょうか。

特殊な点としては、30万台を超えるNature Remoが僕たちのシステムに常時接続しているので、そこのハンドリングが難しかったり、内部的なメッセージングにRedisのPub/Subを使っている点などがあります。

モバイルアプリケーション

少人数チームで機能やデザインの整合を取りながら高速に開発できることを重視して、React Native+TypeScriptで開発しています。

ジオフェンスや権限の処理などReactNativeからは利用しずらいネイティブプラットフォームのAPIを利用するために、iOS/Androidのネイティブモジュールの開発が必要になることもあります。そのためSwift/Kotlinのプログラミング言語に加え、iOS/Androidネイティブアプリケーション開発の理解も求められます。

モバイルアプリケーションに関しては、お客様が実際に多く手に触れる部分なので、継続的に改善し続けたいと思っています。 常にユーザーからのフィードバックに目を光らせており、どの UI/UXを改善すべきかの理解に役立てています。2021年にはアプリケーションデザインを一新し、ライトモードとダークモードのモード変更を実現しました。2022年にはモバイルアプリケーションからの家電制御機能に留まらない、新たな機能を提供したいと思っています。

フロントエンド

Natureスマート電気の開発は、僕らにとって初めてのブラウザアプリケーション開発でしたが、SPAの開発には当然ReactとTypeScriptを使いました。状態管理にはRecoilを採用しました。

こちらはNature Remoと違い立ち上げたばかりなので、お客様の要望を聞きながら改善にとりくんでいます。Nature Remoとインテグレートした機能にもつなげたいとも考えています。

またReactとTypescriptの組み合わせはモバイルアプリケーションでも利用しているので、相互のドメインでのデザインシステムのの共有・活用なども今後の課題です。

組込みFirmware

組込みのFirmware開発があるところがハードウェア製品を扱っているスタートアップならではです。現状はFirmwareの開発はC言語となりますが、Rust導入の機会を虎視眈々と伺っています。

組込みに関しては、トラブルを少なくするため、デバイス側のFirmwareは現状シンプルな作りにしています。ただし、最近は赤外線だけではなく、Mornin' PlusやQrio LockといったBLEデバイスとの連携機能を作る局面もでてきています。また、新しいスマートホーム規格としてMatter5への対応を検討していくなど、デバイス側もまだ進化の余地があるため、スピード感を持ってハードウェアプロダクトを出していきたいと考えています。

2021年末にはNatureのミッションをへの想いを込めたNature Remo mini2 Premium Nature Blue6を発売しており、今後はミッションを体現するプロダクトとしてNature Remoを育てていきたいです。

データ分析基盤

各プロダクトのデータソースに対してETLを行い、データ分析基盤を構築しています。メンバー誰しもがデータにアクセスでき、データに基づいて判断ができるデータの民主化を目指しています。

現在は、ETLワークフローとしてArgo Workflowを、データウェアハウス、データマートとしてBigQueryを採用しています。また、成形されたデータの可視化ツールとしてTableauを採用しており、ビジネスメンバーでも簡易な分析ができる状況になっています。

機械学習

機械学習関連の機能も強めていきたいと考えています。

現状は、バッチで定期的にスマート電気ユーザのスコア計算したりしているくらいですが、 Remo、Remo E、スマート電気から得られる多くのセンサーデータや電力データを活用し、プロダクトを横断したサービスの提供のコアとして、データと機械学習に力を入れていきたいと考えています。

タスクとしては、以下のようなものがあるかと思います。

  • 生活の快適度や消費電力量の観点から家電を賢く制御し、ピークシフト、ピークカットを実現する
  • お客様の利用電力の需要予測
    • 小売事業における電気の買付の最適化
    • DR(Demand Response)の自動化
  • Remo のレコメンド
  • 将来的な電力P2P売買サービス時のマッチング

エンジニア積極採用中です

ということで、駆け足でNatureのソフトウェアスタックを軽く紹介しました。ここにも書いたとおり、まだまだやりたいことがたくさんあるので、一緒に開発してくれる仲間を募集しています。

herp.careers

カジュアル面談も歓迎なので、ぜひお申し込みください。

herp.careers

Appendix

Natureのミッション、サービス、組織や文化、福利厚生についてご興味のある方は、ぜひCulture Deckをご覧ください。

speakerdeck.com