IoTはソフトウェア開発者にとってデバイスのAPI
IoTとは?
IoT(Internet of Things:モノのインターネット)は、ここ数年脚光を浴びているキーワードですが、その定義はさまざまです。「IoTって何ですか?」と20人に聞けば、異なる20の答えが返ってくるでしょう。
ソフトウェア開発者にとってのIoTは、API(Application Programming Interface)です。開発者が、デバイスとやりとりできるAPIが用意されるということに意義があります。
体重計、時計、フォークリフト、自動車、血圧計、サーモスタッドなど、これらがそれぞれAPIを持つことで、開発者はそこから情報を得たり、制御したりできるようになるのです。
では、IoTを活用したシステムは、どのようなデータの流れになるのでしょうか?
インテリジェントなデータ処理が必要
IoTデバイスは、インターネットを通じてデータのやり取りを行います。これらのデータはすべてクラウドに置くべきだという考えを提唱している人もいます。このようなクラウドモデルを提唱する企業は、従量課金制を適用しているケースが多いので、クラウドをもっと使ってほしいというモデルになるのは当然です。
しかし、開発者の立場としては、もっとインテリジェントにデータを処理できると考えるべきです。
例えば、室温を管理するIoTソリューションがあったとします。室温が毎秒取得できるからといって、これをすべてクラウドに保管したくはないでしょう。しかし、急激な温度変化には対応できなければなりません。そうすると、データを解釈できるようなアプリケーションを、データソースのすぐ近くに構築することが求められるのです。
IoTをデバイスとデータを収集/分析するクラウドという視点だけで見るのではなく、デバイスの近くでデバイスを制御するアプリケーションを加えて考えると、より大きな価値を提供できることに気が付くはずです。
IoTを活用した「つながる」アプリ構築
マルチデバイスに対応した現在のDelphi
エンバカデロでは、20年以上にわたって、コンポーネントによるビジュアル開発の手法により、ソフトウェア開発を効率化してきました。Delphiが最初にリリースされたのは1995年ですが、このときからデータベースに「つながる」という機能が用意されていました。
現在、このツールは、Windowsだけでなく、Mac、iOS、Androidのマルチデバイス開発に対応し、単一のコードからそれぞれのデバイスに最適化されたネイティブアプリケーションを構築できるように進化しています。それに伴い、「つながる」という機能も大きく拡張され、データベースはもちろん、クラウドやRESTサービス、さらにはデバイスとも「つながる」ようになっています。
そこで利用されているのは、コンポーネント技術です。コンポーネントを用いることで、低レベルの処理を隠蔽、抽象化し、異なるデバイスや異なるプロトコルでも、同一のコードで処理ができるようにしているのです。
ここでは、ビーコンを例にデバイスと「つながる」技術を見ていきましょう。
ビーコンとは?
ビーコンは、とてもシンプルなデバイスです。ビーコンは、数ミリ秒ごとに「ここにいるよ、ここにいるよ」という情報を送信します。それしかやらないのです。
ビーコンは、通信を受け取ることはできませんが、スマートフォンのアプリはビーコンから発信する情報を受信できます。これを活用すれば、GPSが使えない屋内などでも、自分がどこにいるのかを認識できるようになります。
ビーコンを利用するためのコンポーネント
Delphi(およびC++Builder、そしてその両方を含むスイート製品RAD Studio)で、ビーコンを使うには、TBeaconコンポーネントを用います。TBeaconコンポーネントを設計画面にマウス操作でドラッグ&ドロップすると、いくつかの設定が行えるプロパティが表示されます。例えば、Modeプロパティでは、Apple互換のiBeaconsか、AltBeaconsを使うかを指定します。
ビーコンの情報を取得するのは、TBeaconに用意されたイベントです。例えば、ビーコンを近接検知するとOnBeaconProximityイベントが発生します。このイベントを処理するイベントハンドラを記述すれば、ビーコンに近づいたときのアプリの動作を定義できます。
このように、コンポーネントを利用することで、ビーコンの扱いも簡単になります。
ビジネス価値を付与するアプリケーション
ビーコンがあれば、美術館で展示物のそばに近づいてきたことを検知することもできます。スーパーでは、人が野菜売り場にいるかも分かります。ビーコンを利用したアプリケーションを用意すれば、近くにいる人に、展示物の解説を行ったり、割引クーポンを発行したりすることもできます。
ビーコン自体は単純なデバイスですが、アプリケーションによってビジネス価値を付与できるのです。ビーコンを活用したアプリケーションは、マーケティングの可能性を広げます。言い換えれば、ビーコンを活用したアプリケーションのアイデアをすばやくかたちにすることができれば、ビジネスを大きくリードできるのです。
「つながる」アプリケーションが生む付加価値
自動車修理大手チェーンでの機会損失
「つながる」という意味では、既存のデスクトップアプリケーションとモバイルをつなげることによって、新しい価値を生み出す例もあります。
米国の自動車修理の大手チェーン「MIDAS」では、故障した車をチェックすると、まずお客さまに故障箇所と必要な修理内容を説明していました。すると、ほとんどのお客さまの回答は、とりあえず「やらなくていい」ということでした。自分で具体的に何が壊れているのか見たいというのがその理由です。
このようなやり取りの結果、実際に修理に応じるのはわずか25%でした。
既存システムにモバイルアプリを追加
同社では、Delphiで作られた既存のシステムに、新たにモバイルアプリを加えました。修理工は、デスクトップアプリと通信するモバイルアプリを使って、故障箇所の写真を撮ったり、車の所有者の情報を閲覧したりできるようになりました。
このアプリケーションのおかげで、車の所有者は、すぐに自分で故障箇所を確認できるようになったので、「それなら直してください」というようになり、結果、従来の2倍のお客さまが修理に応じるようになりました。
これはビジネス面で大きな成果を上げたわけですが、実際のアプリの開発はわずかで、既存のシステムを大きく改修するものでもありませんでした。「マルチデバイス対応」と「つながる」というDelphiの利点を生かしたよい例でしょう。
エンタープライズモバイルでは中間サーバーの構築が重要
企業向けモバイルシステム構築では中間サーバーが定番
企業がモバイルデバイスを導入し、企業内のシステムにこれらのデバイスからアクセスできるようにする場合、中間サーバーの能力が重要になってきます。性能面、そして何よりセキュリティ面で、モバイルデバイスが直接企業のデータベースやバックエンドシステムに接続することはなく、通常中間サーバーを経由します。
中間サーバーは、モバイルデバイスからのリクエストを処理し、必要なデータを最も効率よくモバイルデバイスに返すだけでなく、ユーザーの認証やアクセス状況の記録、分析なども行う必要があります。
また、最近のモバイルアプリでは、プッシュ通知を使って、アプリを起動していなくても、ユーザーに通知を行えるようにしているケースが増えています。こうした機能を使おうとすると、iOS、Androidと複数のデバイスにまたがっている場合には、異なるプッシュ通知のサービスを使い分けなければならず、通知する側、つまりサーバー側で、使用デバイスごとに処理を切り分けるといった手間が発生します。
EMSによる中間サーバー構築
RAD Studio(DelphiおよびC++Builder)では、モバイル向けの中間サーバーを構築するミドルウェアとして「EMS(Enterprise Mobility Services)」を用意しています。EMSを用いれば、独自のRESTサービスを構築したり、Oracle、MS SQL Server、MySQLなど主要なデータベースにコネクションプーリングを使って効率的にアクセスしたりできるほか、ユーザー管理機能も利用できます。中でも、プッシュ通知のサポートは、ユーザー管理機能に統合されたデバイス認識機能を活用し、自動的にGoogleまたはAppleのサービスを利用します。
プッシュ通知を発行するアプリケーションの作成にも、コンポーネントを活用できます。TBackendPushコンポーネントは、プッシュ通知をEMSサーバーにリクエストするコンポーネントです。接続するEMSを設定すれば、わずか数行のコードです。
アプリケーションの利用状況の測定
重要になるアプリケーションのアナリティクス
モバイルを含むマルチデバイスアプリケーション構築で、もう一つカバーしておかなければならないのは、アプリケーションの利用状況の分析、すなわちアナリティクスです。アナリティクスといえば、少し前まではGoogle AnalyticsによるWeb解析のことを指していました。しかし、Googleも、そして先日にはAppleもモバイルアプリに対するアナリティクスサービスをスタートしています。
アプリケーション供給側にとって、これまでユーザーがどのようにアプリケーションを利用しているかを、実データによって収集という考えはあまりありませんでした。しかし、デバイスが多様化し、利用形態も変わってきている昨今、どのようにアプリケーションを利用しているか、そしてどこを改善すればよいかといった情報を得ることはとても重要です。
マルチデバイス対応のAppAnalytics
RAD Studioでは、新たにAppAnalyticsというアナリティクス機能が利用できるようになりました。この機能がユニークなのは、モバイル向けだけでなく、デスクトップやサーバーサイドにも使えること、そして、Android、iOS、Windows、Mac OS Xのマルチデバイス対応であることです。
ここでもコンポーネント技術によって、簡単なドラッグ&ドロップ操作とわずかなプロパティ設定だけで、アプリケーションを利用しているOSなどのプラットフォーム情報、起動回数、特定のメニューやコントロールを選択した回数などの情報、さらには、フォームの遷移などのフロー情報を得ることができます。
例えば、プラットフォームによって利用されるメニューの頻度が異なることが分かれば、UIの設計の差によってメニューが見つけにくいのか、プラットフォームごとの利用形態の差によるものなのかを調査できます。また、頻繁に利用される機能に、開発リソースを多く投入したり、使われない機能にリソースを過剰投入しないように調整したりすることもできます。例外の発生も記録できるので、特定のプラットフォームでのみエラーが起きるといった情報を得ることも可能です。
AppAnalyticsのアナリティクス情報は、すべて匿名情報として収集されるので、特定のユーザーの行動をトレースするといった利用はできないようになっています。
まとめ
ITをとりまく情報は大きく変わっています。マルチデバイス、クラウド、IoT。これらが、「つながる」ことで価値をもたらすアプリケーションの開発を要求しているのです。
私たちエンバカデロは、「つながるプラットフォーム」というキーワードで、ソフトウェア開発者の生産性向上に寄与しています。その中で特に注意しているのは最新のテクノロジーを駆使する際でも、これまでのプログラミングスタイルのままで行えるようにするということです。「過去を捨てずに未来へ」。この考え方で、新しい技術に立ち向かっていこうと考えています。
関連情報
講演ビデオ
マルコ・カントゥ氏の講演の様子は、YouTubeのビデオでご覧いただけます。