ファームウェアエンジニアのお仕事

Nature株式会社ファームウェアエンジニアの中林 (id:tomo-wait-for-it-yuki) です。今回は、Natureのファームウェアエンジニアの業務内容を紹介し、その魅力をお伝えします!

NatureはスマートリモコンNature Remo1/スマートエナジーハブNature Remo E2を製品として展開しています。ファームウェアエンジニアはこれら製品のファームウェア開発を主に担当しますが、それだけに留まらず多岐にわたる業務を遂行しています。 現在ファームウェアエンジニアとして携わっている業務としては、次のものがあります。

Nature Remoの企画/開発

スマートリモコンというジャンルも認知度が上がり、競合製品が次々登場しています。 Nature RemoはNatureが電力需給にコミットするための入り口であり、競合他社より魅力的なスマートリモコンとして、ユーザーに選んでもらえるものを作らなければなりません。

これまでNatureでは、
2018年にNature Remo mini
2019年にNature Remo E
2020年にNature Remo E lite / Nature Remo3 / Nature Remo mini2
2021年にNature Remo mini 2 Premium
をローンチしており、私たちは常に新しいRemoについて考えています。Remoに採用したいアイデアを発想したり、技術を調査したり、といった具合です。

ファームウェアエンジニアはその製品企画にコアメンバーとして参画できるポジションでもあります。マイコン選定から、搭載する通信規格、サーバー通信のデータフォーマット策定など、ファームウェアに関係する要素は製品企画の初期段階からハードウェアエンジニアと協力しながら進めていきます。そのため、新しい通信モジュールやセンサー、通信規格には特に目を光らせています。最近だとMatter3 (元CHIP: Connected Home over IP) というスマートホーム規格に注目しており、社内で調査したり議論したりしています。

また、同時にNatureのミッションを実現するための別のハードウェア製品の可能性も検討しています。Natureが得意とするWebの技術をうまく活かしながら、Natureらしいハードウェア製品って何だろうか?ということに知恵を振り絞っています。

toB向け新規事業の立ち上げ

次なるNatureの柱であるBehind The Meter (BTM) 事業では、Nature Remo E を中核としたサービス事業を展開していきます。BTM事業とは、家庭用太陽光の導入とエコキュート(給湯器)・蓄電池・EV等のエネルギーマネージメントをセットで行うことで戸建て住宅で再エネでのエネルギー自給自足を実現する事業です。

これまでtoC向けの製品として作っていたRemo Eですが、スマートエナジーハブとしてその存在感が増しており、業界での認知も進んでいます。そこでtoC向けの開発は継続しつつ、Remo EのtoB向け活用を視野に入れて、toB向けにはRemo Eを作り直すべきか?Remo Eを中心としたどのようなサービスを提供すべきか?ということをビジネス開発の担当者と日夜意見を交換しています。

この新規事業立ち上げは、Remo Eが中心となるため、Remo E自体を熟知している必要がありますが、提供するのはサービスであるため、アプリやサーバーがどうあるべきか、といったことも検討します。ハードウェア製品開発やファームウェア実装だけでなくサービスの立ち上げに深く関われるのも、Natureのファームウェアエンジニアの魅力だと思っています。

Remoの改善

Nature Remoにはファームウェアアップデートの機能を搭載しています。一度ファームウェアをリリースしたら終了、ではなく、常にユーザーフィードバックを受けて、ファームウェアの改善を続けています。Nature Remo3も発売後Qrio Lock4との連携機能をファームウェアアップデートで提供しています。

Nature Remoの動作状態のオブザーバビリティを向上し、サービスの質を高めるプロジェクトも目下進行中です。このプロジェクトは、Remoの動作状態として何が見えれば良いか?取得可能な情報はなにか?それはユーザーの利便性向上にインパクトがあるか?ということを意識しながら進めています。やはり問題になりがちなのは通信に関連するところなので、無線通信規格やレイヤー3以上の通信プロトコルについても理解を深めながら、安定的に動作する製品の開発を目指しています。

小さな新機能であれば、サーバー側の実装もファームウェアエンジニアで行います (サーバーエンジニアの助力を受けながらGo言語書いてます) 。例えば、毎日の統計情報を google spread sheets に反映させて更新するバッチがサーバーで動いていますが、ファームウェアに関するシートの更新はファームウェアチームで実装しています。

カスタマーサポートの技術調査

Remoの改善活動と重複する部分もありますが、カスタマーサポートで問題となっている技術課題の調査も重要な役割です。Nature Remoシリーズは累計販売台数が30万台を超えており、様々な環境で利用されています。そのため、販売開始当初には予想もしなかった問題も発生します。

Amazon Athena5でサーバーログに対してSQLでクエリを書いて、問題を分析します。私は情報処理技術者試験を除くと始めてSQLを使う機会となりました。個人で入門書を読んで普段遣いの簡単なクエリは自力で書けるようになりましたが、複雑なクエリはサーバーエンジニアやデータエンジニアに助力を請います。スーパーcoolなクエリを教えてもらえるので、「スーパーcool...」とお礼を言って後でじっくり何やっているのか理解しています。

ファームウェア開発プロセスの改善活動

Nature Remoというハードウェア製品を主力としていますが、私たちの強みはソフトウェア的な継続的な改善だと考えています。ユーザーにより短いリードタイムで、より多くの機能を届けるために、ファームウェア開発のプロセス改善活動を行っています。具体的には、自動テストの整備、CI環境の構築や、社内ユーザーが使用するRemoで問題を早期発見するためのログシステム、をファームウェアチームでてがけています。

自動テストの整備では、Catch26というユニットテストフレームワークを使って、C++でテストを書いています。テストは可能な限りデュアルターゲット化 (開発しているホストPCでもターゲットデバイスでも動く) するようにしています。モックを作るコストが高い (=ハードウェアを直接制御する) 部分は、ターゲットデバイスだけで動作するテストも書きますが、テストを回すサイクルが遅くなるのでできるだけホストPCだけで開発を進められるようにしたいところです。ホストPCでテストすることで、AddressSanitizer7のような動的解析ツールでバグを検出できる、という利点もあります。

CIはGitHub Actionsを使っています。ユニットテストのうち、ホストPCで実行できるものをプルリクエストごとにテストしています。また、ターゲットデバイス向けのクロスコンパイルが通ることの確認として、ファームウェアのクロスビルドまでは自動で行うようになっています。リリース作業も一部自動化が済んでおり、社内ユーザーへの内部リリースは以前よりずっと楽になっています。今は、CIでターゲットデバイス上のテストまで自動実行できる環境の構築やさらなるリリースの自動化を目指しています。

ファームウェアはユーザーにリリースする前に、社内ユーザーに内部リリースし、実環境での利用で問題が発生しないか確認しています。社内ユーザーにはRemoと一緒にログ収集用のRaspberry Piをセットアップしてもらい、何か問題が発生したときに、その時のログが確認できるようになっています。ただ、現状は問題発生に気づくのが遅れてしまうことがある、という課題が存在しています。そこで、このRaspberry Piログシステムをサーバーのモニタリングで活用しているDatadog8に集約して、良い感じにする大改造作戦を練っています。こちらはSREとの共同作戦になっており、ファームウェアエンジニアも様々な領域のエンジニアと関わりながら刺激を受けられる例の1つと言えます。

開発補助ツールの開発

日々の開発を楽にするための補助ツールの開発も行っています。この補助ツールについては特に開発言語の縛りもないため、大々的にRustを採用することができます (鉄分補給) 。直近で言うと、Remo Eが搭載しているスマートホーム標準であるECHONET Lite9用の開発補助ツールをRustで書いています。Rustでは一度 serde10 でシリアライザ/デシリアライザを書いてしまえば、自在にフォーマット変換できるため、非常に重宝しています。

こちらのECHONET Lite用ツールについては、昨夜のNature Bath vol.1311で発表しましたので、当日発表見れなかった方はレポートの公開をお待ちください。

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

本記事ではNatureのファームウェアエンジニアの仕事内容を紹介しました。まとめると、Natureにおけるファームウェアエンジニアは次のような魅力のあるポジションであると言えます。

  • いわゆるIoT製品として30万台を超える販売台数を誇るハードウェア製品の企画に参画できる
  • ハードウェア製品を中核においた新しいサービス事業に携われる
  • ファームウェアの継続的改善を試みることができる
  • 『リアル』なIoT製品の問題解決のノウハウが身につく
  • ファームウェア開発をモダンな開発プロセスに近づけるための試行錯誤ができる
  • 直接的なファームウェア開発以外にも様々な技術に触れたり領域の異なるエンジニアと協力したりできる
  • ファームウェア開発へのRust導入に好意的である (めっちゃ大事!)

もちろんC言語でハードウェアを相手にしている以上、泥臭いエンジニアリングをしなければいけないことも少なからずありますが、そこはご愛嬌です。

Natureではエンジニアを積極採用しています。

という方は、カジュアル面談等も行っていますので、Twitterなどで連絡いただければ嬉しく思います。

https://nature.global/careers/job/