IoT系のプロダクト開発の裏側って? 知られざる開発⁠運用ノウハウを2社のエンジニア6名が徹底解説!

電化製品や産業用機器など、あらゆるコンピューターやデバイスがインターネットを介して通信し、相互にやりとりする。そんな、IoT(Internet of Things)の技術を用いたサービス・ビジネスが注目を集めています。

2023年12月22日に開催されたイベントIoT系のプロダクト開発の裏側って?知られざる開発・運用ノウハウを2社のエンジニア6名が徹底解説!では、IoT技術を事業に活用するENECHANGE株式会社と株式会社スマートショッピングのエンジニア合計6名が登壇。プロジェクトから得られた知見を紹介しました。今回はそのレポートをお届けします。

今回登壇した発表者の集合写真
今回登壇した発表者の集合写真

高度なモノの管理を実現⁠SmartMatのエンジニアリング紹介

はじめに登壇したのは、スマートショッピング社のBtoC開発部 部長である川上和義氏。同社はIoT技術を活用して物の重さで数を数える在庫管理サービス「SmartMat Cloud」を提供しています。

川上和義氏
川上和義氏

スマートショッピング社はエンジニア組織の開発生産性が優れた企業に贈られる「Findy Team+ Award 2023」を受賞しました。開発生産性を向上させるために「開発のサイクルタイムの短縮」「デプロイ頻度の改善」を目指したといいます。

まず、開発のサイクルタイムの短縮のために、コミットが積まれてからPull Requestが発行されるまでの平均時間を改善しました。これを実現するために、タスクを細分化して1タスクあたりの工数を下げただけではなく、ひとつのPull Requestあたりのコード量を200行未満にして、レビューの簡略化を目指したのです。

また、レビューからデプロイまでの平均時間を改善するために、個人の月次目標としてレビュー数を掲げる、Pull Request作成者がレビュアーと一緒にレビューすることを推奨するなど、さまざまな取り組みをしました。これらの施策により、開発のサイクルタイムだけではなくデプロイ頻度も改善したのです。そして、さらなるデプロイ頻度向上のためGitのブランチの運用のルールも工夫。⁠その結果、改善前と比べて開発生産性が4倍近くまで伸びました」と川上氏は解説しました。

SmartMatの設計思想

次に登壇したのはエンジニアリング本部 R&Dチームの若林敬太郎氏。IoTプロダクト「SmartMat」の設計思想について述べました。IoTデバイスは、ハードウェアとクラウドの役割分担の仕方によって2種類に分類できます。

若林敬太郎氏
若林敬太郎氏

ひとつは、既存のハードウェアに通信機能を付けてIoT化するオンプレIoT。もうひとつは、クラウド側に頭脳となるソフトを入れて、ハードウェアをなるべくシンプルに作るデジタルネイティブIoTです。デジタルネイティブIoTは高度な機能をより短いリードタイムで実現できる利点があることから、⁠SmartMat」はこの設計方針を採用しています。

「SmartMat」には通信用マイコンと計測用マイコンという2種類のマイコンが搭載されています。そして、スマートショッピング社では前者を内製して、後者を外部の工場に製造委託しています。クラウドとの連携はシステムのコアの機能であるため、内製により高度な機能を実現。計測用マイコンは電子秤のノウハウがある工場に委託することで、プロダクトの品質を向上させているのです。セッションでは他にも、エンジニアリングの課題やその改善案なども説明。⁠まだまだ『SmartMat』を進化させていきます」と若林氏は結びました。

スマートショッピング社が使用しているインフラ技術

次は基板統括部 SREチームの木村優斗氏が登壇。同社のSREチームの役割について説明したうえで、スマートショッピング社が使用するインフラ技術について解説しました。

木村優斗氏
木村優斗氏

同社のインフラは、Kubernetesを中心に構築されています。Kubernetes内ではマイクロサービスのサーバー群が稼働しており、Amazon SNSやAmazon SQSを用いた非同期なデータ連携を実施。ローカル開発時はTelepresenceを用いてKubernetesクラスター内のマイクロサービスと通信しています。

CI/CDにはGitHub ActionsやArgoCDを、IaC(Infrastructure as Code)にはTerraformやtfactionを活用することで、デプロイやインフラ構築などを効率化・省力化しています。⁠プロダクト開発において、なるべくSREへの依頼待ちが生じない仕組み作りをしている」と木村氏は述べました。

ここからは再び川上氏が登壇。バックエンドの言語としてGoを採用していることとその利点について述べました。また、同社はかつてBFF(backend for frontend)の言語としてGoを用いていましたが、各種の利点があることから後にTypeScriptへと変更したことも説明。加えて、フロントエンドの技術はもともとVue.js + Nuxt.jsを採用していたものの、React + Next.jsに切り替えたことなども解説しました。

川上氏は最後に「IoTは現代のテクノロジーの中で、重要な位置付けにあります。私たちがこの領域に焦点を当て、サービスを提供していることに面白さと誇りを感じています」と語り、セッションを終えました。

WebSocketにおけるGraceful Update

ここからはENECHANGE社による発表が行われました。同社は月額費用不要で、いつでも誰でも好きなときに、電気自動車やプラグインハイブリッド車向けの充電スタンドを利用できるサービス「EV充電エネチェンジ」やそのアプリを開発・提供しています。佐々木徹氏はEV充電サービス事業部の開発チームに所属し、Embedded SREを担っています。

佐々木徹氏
佐々木徹氏

「EV充電エネチェンジ」の充電器管理システムでは、2023年4月と6月に大規模な障害が発生しました。数時間にわたって、EVユーザーが充電器で充電できない状態に陥ったのです。いずれも、アプリケーションデプロイのタイミングで障害が発生しました。充電器管理システムと充電器がOCPP(WebSocket)で常時接続しているため、デプロイによって古いコンテナがシャットダウンされたタイミングで充電器からの再接続が集中し、システムがパンクしたのです。

この課題を解決するためには、充電器からの再接続のタイミングをずらすことが必要になります。そして実装案としては大きく分けて、Exponential Backoffを使う方法やAWS CodeDeployの線形デプロイを活用する方法、自前で再接続のための処理を実装する方法があります。本セッションでは、佐々木氏がそれぞれの案の特徴や課題などを述べたうえで、同社が選んだ「AWS Lambdaを自前で実装して、各充電器の接続を段階的に新しいコンテナへと切り替える方針」について詳しく解説しました発表スライド⁠。

事業譲渡を受けたアプリとの統合での失敗⁠そしてユーザーからの評価回復に至るまで

次に登壇したのは、EV充電サービス事業部でモバイルアプリの開発を行う小林友樹氏です。ENECHANGE社は2022年にアユダンテ社が運営する充電スポット検索アプリ・EV情報メディアの「EVsmart」の事業を譲受。このサービスと「EV充電エネチェンジ」のモバイルアプリを統合した際のエピソードを解説しました発表スライド⁠。

小林友樹氏
小林友樹氏

「EVsmart」は2014年にローンチされた歴史の長いアプリであり、多数のユーザーを抱えていました。また、システムは複雑であり技術的負債も数多く蓄積していたといいます。そのシステムを解析して「EV充電エネチェンジ」「EVsmart」のアプリを統合。そしてリリースしたところ、アプリストアで多くの低評価がつくという事件が発生しました。既存の「EVsmart」アプリのユーザーから、アプリの利便性についての不満が寄せられたのです。

「EVsmart」のアプリが持つコアバリューは「充電スポットの探しやすさ」でした。しかし統合後のアプリは、その機能を洗練しきれていなかったのです。ユーザーからの信頼を回復するため、EV充電サービス事業部は徹底的にユーザーの声を拾い上げる方針を選択しました。SNSで寄せられた不満や問い合わせ情報などをすべて収集・整理・分類・優先度付けして、250件のフィードバックのうち2カ月間で約100件に対応したとのこと。

その甲斐もあり、ユーザーから良いフィードバックが得られるようになりました。さらに、ポジティブな声をアプリストアの評価に反映させるための工夫も行ったのです。その結果、アプリストアの評価が驚異的なスピードで改善していきました。最後に、この事例を踏まえての学びを発表し、小林氏はセッションを終えました。

事業譲渡されたブランドにGo言語を取り入れた話

最後に登壇したのは、ENECHANGE社でエネルギークラウド事業部のEVユニットに所属する石橋龍八氏。⁠EVsmart」の事業譲受に伴い経験したシステムの技術選定やアーキテクチャ改善の事例を話しました発表スライド⁠。

石橋龍八氏
石橋龍八氏

従来の「EVsmart」のアーキテクチャは、Azure上でPHP製のWebアプリケーションサーバーが動き、Azure SQL Database, MySQLに格納されたデータにアクセスする構成になっていました。また、プログラムが複雑に入り組んだスパゲッティコードになっており、ブランチ管理にも課題があったといいます。

以前の運営元のアユダンテ社はこの課題を認識しており、解決のための行動を起こしていました。具体的には、サービスのソースコードをイチから書き直す選択をしました。サーバーサイドの言語にはPHPではなくGoを選択し、インフラもAzureではなくGCPを選択して、Google Kubernetes Engineを採用する方針に決めていたのです。

「EVsmart」の事業譲受をしたタイミングで、このリプレイスはまだ進行中でした。そこでENECHANGE社は「アユダンテ社の行った技術選定の方針をそのまま踏襲するか、それとも自社に合わせて採用技術を変えるか」を判断する必要があったのです。

サーバーサイドの言語は、Goを採用する利点が大きいためそのままにしました。一方、ENECHANGE社はGCPの知見がなかったため、代わりにAWSを採用。Amazon ECS on AWS Fargateでコンテナを管理・運用する方針を選びました。イベント終盤では、Goの利点や特徴について石橋氏が解説。さらにWebフレームワークとしてGin、O/RマッパーとしてGORMを活用していることなどにも触れ、セッションを終えました。

おわりに

IoT技術が普及することで、過去には無かったような新たなプロダクトやビジネスモデルを創出できる可能性が大きくなります。本イベントは、そんなIoT技術の将来性やノウハウが伝わるものとなりました。

おすすめ記事

記事・ニュース一覧