イケてる iOS アプリ開発

プロアクシアコンサルティングでオープンソリューション事業部に所属している K.F です。

今回は IoT デバイスと連携した iOS アプリの開発について紹介いたします。

プロアクシアでの役割とこれまでの経験を教えてください

IT 関係の仕事に携わるようになってからはシステム開発を中心に経験してきました。
Web アプリや基幹システム、モバイルアプリなど様々な案件に携わりました。現在は iOS アプリ開発を担当しています。

本プロジェクトでは開発チームのリーダーとして、プロジェクト全体の開発管理も受け持っています。

iOS アプリの開発に携わるようになった経緯

Xamarin.Forms を利用したモバイルアプリの開発経験があったため、現在のプロジェクトに参画することになりました。

それまでの Windows / Visual Studio / C# から、Mac / Xcode / Swift と大きく開発環境が変わりました。すべてが新しい環境に最初は戸惑いましたが、Swift も C# に負けず劣らずモダンな言語ですぐに好きになりました。Null 安全や検査例外、プロトコル指向など初めて触れるプログラミングパラダイムに感心したものです。

それまでは Android ユーザーでしたが「開発のため…」と iPhone、iPad、AppleWatch、AirPods… などなどあまり開発に関係ないものも次々購入し、今ではすっかりリンゴ色に染まってしまいました。

プロジェクトの概要

担当しているプロジェクトでは、振動センサを用いた工場などの監視システムを開発しています。

このプロジェクトでは振動センサを機械に取り付け、BLE (Bluetooth Low Energy) 通信にて計測データの収集をします。これにより機械に近づく必要がなく、安全な場所からデータ収集することが可能となります。

収集したデータはアプリ経由でクラウドにアップロードされます。スマートフォン・PC から分析されたデータや振動グラフを確認でき、AI による機械の故障予測なども利用できます。

開発には React Native や Flutter の導入も検討しましたが、いずれも BLE に関するサポートが弱いこと、非常に高いパフォーマンスが求められることからネイティブアプリでの開発となりました。

システムの優れている点

大規模プラントなどでは監視システム込みで構築されることがありますが、本システムは電気工事不要で後付けできるところが利点です。

本システムは振動センサを購入すればアプリ、データ分析、閲覧環境を基本無料でご利用いただけます。このため、専用の監視システムに比べコンパクトで安価に構成できます。
また、振動センサは容易に追加できるため、導入後も必要に応じて監視対象を追加したり変更することができ、柔軟な監視環境を構築できます。

監視対象の機械は様々な状況に置かれています。車で移動する必要があるほど広大な敷地内に点在していたり、建屋の地下や電波暗室などに設置されていることもあります。
大規模プラントでは基地局の電波が届かない、圏外の環境も往々にしてあります。それらの場所にネットワーク環境を準備するのは容易ではありません。

本システムではセンサとは BLE 利用して通信するため、ネットワーク環境を準備することなく利用できます。もちろん作業者がデータ収集しに行く必要はありますが、センサでは計測しきれない異常 (錆や腐食の進行具合、異音や害虫、害獣の有無など) を発見するためにも、有人の踏査は必要なものとなってきます。

使用するセンサは、国内の大手電子部品メーカーと共同開発したもので、競合他社の追随を許さない性能を誇ることも利点となっています。

開発手法や開発環境について

プロジェクト発足当時は国内で先行して開発をしている状況でしたので、ユーザーのニーズを明確に絞り込めていませんでした。そのため、リーンスタートアップにて顧客と一緒にニーズの抽出を実施しシステム化の検討を行いました。

開発手法は、刻々と変化する状況に対応できるように、アジャイルやかんばんなどの開発手法を組み合わせて行っています。
現在もそれら開発手法は継続していますが、開発手法のルールに固執するのではなく、日々新しい手法を取り入れ検討し、その時点の開発に最適化できるよう開発手法の見直しを行っています。

開発環境についても同様に見直しを行っており、SwiftUI や Combine、Async/Await が実装された際は早期に検証し、開発環境に組み込みました。UI について当初は Storyboard を用いた UIKit 中心の開発でしたが、現在は SwiftUI への置き換えを進めています。

ハードウェアも定期的にアップデートしています。Apple M1 チップ搭載の Mac にアップデートした際は、ビルド時間が劇的に短縮されとても感動したことを覚えています。

周辺ツールも業務効率化を目的に日々模索しています。チャットツールは当初 Slack を利用していましたが、Teams、Gather などいろいろ試してみて現在は Discord を利用しています。Git ホスティングサービスも AWS CodeCommit、Azure Repos、GitLab など変遷し、結局 GitHub に落ち着きました。

このように開発当初の環境を継続して利用するのではなく、新しく台頭する技術やツールを貪欲に取り入れながら開発しています。

特に注力して開発した点について

センサとの通信速度は早ければ早いほどよく、顧客からの要求値を達成するためにはソフト・ハード両面から限界までチューニングする必要がありました。

BLE 通信は分からない事が多く苦労しましたが、センサのハードウェアメーカーと協力し、極限まで性能と接続安定性を追い求めました。開発の初期段階では通信に1分ほどかかっていましたが、最終的には理論値に近い速度を実現し10数秒まで短縮できました。

現在はスマートフォンをポケットに入れたままセンサに近づくだけで、自動でデータ収集できるよう機能改善に取り組んでいます。

iOS アプリの開発の難しい点について

今回のプロジェクト要件ではアプリがバックグラウンドにあっても、センサと通信ができる必要があります。

iOS ではバックグラウンドでの動作には色々と制限があり、iOS のバージョンによっても制限の挙動は変化する場合があります。このため、アプリが問題なくセンサと通信できるようにするために iOS の深い知識が求められました。

Apple からリリースされる新しいハードウェアや iOS についても、難しい点があります。機種により画面サイズや Notch、Dynamic Island の有無など表示領域に違いがあるため、それぞれのデバイスに合わせて問題なく表示でき、正常に動作させることが重要です。

iOS や Xcode の大型アップデートにより挙動が変わったりビルドが通らなくなったりすることが往々にしてあります。そのためアップデートの度に影響がないか動作確認をしたり、エラーへの対策が必要になります。

開発の中で気を付けていることについて

機能改善や機能追加を行う際、要望された内容をそのまま実装するのだけでなく、背後にある課題を明らかにした上で開発を行うようにしています。

要望を出されているユーザー自身も問題点や改善点を上手く表現できていないことがあるため、ヒアリングを行いながら根本的な課題を特定し最適な対応を行うよう心掛けています。

ソースコードの記述にもかなり気を使っています。アプリ開発では日々多くのコード変更が発生します。修正作業を円滑に行えるようにするためにも、整理された分かりやすいコードを記載するように心掛けています。
また、ソースコードはどうしても陳腐化していってしまうので、修正の都度リファクタリングを行います。仕様変更に振り回され煩雑化した部分については、該当部分の周辺を含めて再設計をする場合もあります。

社内での活動について

社内勉強会を主催しています。
学習したことをアウトプットすることでより理解を深めるだけでなく、自分の考えを相手に伝えるいい練習にもなります。また、プロジェクト外のメンバーとはなかなかお話する機会が少ないため、勉強会を通じてプロジェクトや部署の垣根を超えた交流ができればと思い、定期開催しています。

今後も社内・社外問わず勉強会を開催し、色々な人とのつながりや新しい知識を学習できる機会を提供していければと考えています。

最近は情勢も落ち着いてきていますので、会社のミーティングルームを利用してもくもく会を開催しようかなと計画しています。

今興味のあることについて

特定の分野に興味があるというよりは、その時々によって興味対象は移り変わっています。面白そうであったり、新しい技術や挑戦しがいのありそうなことを追っかけています。

プログラミング言語では Go や Rust が気になりますが、なかなか案件に出会うことがありません。タイミングが合えば参画したいです。

最近は趣味で React や Next.js について勉強しました。TailwindCSS は私の指向にも合い気に入っています。最近の言語やフレームワークはコモディティ化が進んでいるなと感じます。

今後もその時に興味のある分野で成長していくためにも、日々新しい技術の習得や情報収集を継続し、いつでも準備万端にしていきます。

仕事以外ではあれば、旅行、キャンプ、登山、バイク、DIY などアクティブな趣味が多いです。
気候がよくなってきたので、色々とチャレンジしてみたいです。