React.jsが持つコンポーネント指向の構成・関心の分離・ライフサイクルメソッドといった特性は、UIや小規模のIoTプロジェクト開発に有効です。しかし、複雑な産業分野におけるIoTに適しているとはいえません。

記事タイトルを見て、こう思った方も多いのではないでしょうか。

  • 「IoTプロジェクトにReact.jsを使うってちょっと変じゃない?」
  • 「React.jsって、簡単なウェブサイト制作に使うフロントエンドフレームワークのひとつなんじゃないの?」
  • 「IoT技術に使うなら、もっとしっかりとしたフレームワークを使うべきなんじゃ?」

いいえ、決してそんなことはありません。実は、React.jsにはさまざまな使い道があるのです。

ウェブ開発のためのReact.js、クロスプラットフォームのモバイルアプリ開発ができるReact Native、3Dレンダリングに使うReact-three、3DやVRインターフェースの構築にはReact-360、さらにサーバー側のIoTニーズに対応するReact.jsなど、その用途は多岐に渡ります。

JavaScriptライブラリであるReact.js。もしかすると、あなたのIoTプロジェクトに適した選択かもしれませんよ?

React.jsの長所・短所を知り、IoTプロジェクトに活用できるか見極めてください。

IoTプロジェクトにReact.jsを使う3つのメリット

React.jsには、IoTプロジェクトに役立つ優れた機能があります。

1. コンポーネント指向の構成

React.jsには、継承に基づく構成ではなく、コンポーネント指向の構成が用いられています。コンポーネント指向の構成には、コードの整理がしやすいという特徴があります。通常用いられるオブジェクト指向のプログラミングでは、クラスやオブジェクトを作成する必要があり、さらに別のオブジェクトがこのクラスやオブジェクトを継承することになります。

大規模なIoTプロジェクトにこの継承モデルを使おうとすると、コードが非常に複雑かつ把握しづらくなります。しかしReact.jsを使えば、まるでLEGOブロックのセットを組み立てるかのようにアプリの制作ができてしまいます。一旦コンポーネントを作ってしまえば、他のコンポーネントの中にそれを転用できるのです。例えば、いくつかの特定のIoT機器向けに同じコンポーネントを作って使い回すということが可能になります。

2. 関心の分離

React.jsにおいては各コンポーネントが個別に存在するため、各コンポーネントを分離した状態で作業することができます。つまり、ひとつのコンポーネントに変更を加えても、残りのコードが影響を受けることはありません。React.jsが持つ「関心の分離(Separation of Concerns)」という特性のおかげで、コンポーネントは必要な情報だけを受け取ります。

あるデータを一箇所に持っておいて、子コンポーネントに受け渡すことも可能です。データを受け取り処理するコンポーネントはセンサーコンポーネントから簡単に分離することができ、IoTセンサーとデータの間の複雑なコードの行き交いにおいて迷子になることもありません。子コンポーネントが親コンポーネントに影響することがないのです。

React.jsでは、データはpropsというコンポーネントに関する情報を持つオブジェクトを通してコンポーネントに渡されます。これは親・子コンポーネント間通信においてとても便利なツールです。数値・文字列または関数などのpropsがコンポーネントに渡され、propsはデータを保管するstateへとつながります。stateが変化するとコンポーネントも再度レンダリングされ、アプリケーションを最新のデータに保ちます。

この特徴は、IoTプロジェクトにとって重要です。コンポーネント指向のアプリケーションでは、2つのタイプのコンポーネントを作成できます。

  • データを受け取り、処理し、子コンポーネントに渡す機能を持つコンポーネント
  • IoTセンサーと通信し、propsを受け取り・受け渡し、必要以上のデータにアクセスすることなく機能するコンポーネント

3. ライフサイクルメソッド

React.jsのライブラリが持つ、もうひとつの優れた特性が「ライフサイクルメソッド」です。これはIoTプロジェクトと相性の良い特性で、すべてのコンポーネントにデータの変更を確実に反映できるメソッドです。簡単にいうと、ライフサイクルメソッドはアプリケーションと実際の世界とのやり取りを合理化してくれるのです。コンポーネントがアップデートされる度にライフサイクルメソッドのセクエンス(例:温度の変化が新たなサイクルの引き金となる)が送り出されます。

例えば、スマートホームを想像してください。温度が25℃に上がると、アプリケーションがLEDコンポーネントに点灯するように指示を出し、室内温度が上がっていることをユーザーに伝えます。しかし温度が設定したリミットを超えなければ、サイクルは止まりコンポーネントのアップデートも起こりません。

ライフサイクルメソッドはアプリケーションのアップデートを簡単に扱うことのできる方法です。新しいデータが実際の世界から送られてくる度に、アプリケーションがその妥当性を確認しコンポーネントをアップデートします。IoTシステムには、規則正しく(そして膨大な)データを生み出すという性質があります。だからこそライフサイクルメソッドが役に立つのです。

IoTプロジェクトにReact.jsを使う3つのデメリット

ここまでメリットをあげてきましたが、React.jsはIoTソフトウェア開発において人気のあるツールではありません。その理由を見ていきましょう。

1. React.jsはオープンソースである

React.jsはオープンソース型のソリューションのため、しっかりとしたサポート体制がありません。新たなライブラリを複数合わせて使用すると不具合が生じ、アプリケーションが予期せぬ動作をすることがよくあります。

そのため、残念ながらReact.jsはNode.jsなどと比べて信頼性や安定性に欠けており、大規模な産業分野におけるIoT (IIoT)で使われるアプリケーションには活用しづらいのです。

2. React.jsはUI向きである

IoTやIIoTアプリケーションと相性が良さそうに見えるReact.jsですが、完璧な訳ではありません。React.jsは柔軟性が高いものの、UIやフロントエンド開発により向いているという特性があります。

またReact.jsは単独型のソリューションではないため、限られた程度までしか性能を発揮することができません。良い結果を得るためには、他のライブラリに頼らざるを得ないでしょう。

3. React.jsはIoT開発における主流のソリューションではない

IoT分野におけるReact.jsの使用率は、今はまだ高くありません。よってReact.jsでIoTアプリケーションを開発するということは、未知の海域に船を出すようなものなのです。

ライブラリの統合を簡単にしてくれるこのようなライブラリもありますが、それでも統合は困難です。IoT開発に便利なライブラリはまだあまりないため、開発者が自身でソリューションを生み出さなくてはならないことも多いでしょう。そのため、開発に時間がかかってしまう恐れがあります。

IoT分野におけるReact.jsの今後

コンポーネント指向の構成、関心の分離、ライフサイクルメソッドという特性のおかげで、JavaScriptライブラリであるReact.jsはIoTプロジェクトに複数のメリットをもたらします。

  • コードの可読性の向上:React.jsはコンポーネントベースのため、コードを読んで理解しやすい
  • 開発の迅速化:モジュラーコンポーネントを繰り返し使ったり、組み合わせたりできるため、React.jsで書いたコードは簡単に書き換えられる
  • 持続性の向上:React.jsのコードはそれぞれ独立しているため、問題を追跡しデバッグを行うのが非常に簡単
  • 実際の世界に合わせたアップデート:React.jsが持つコンポーネントのレンダリング特性のおかげで、アップデートが容易

これらすべての点を考慮すると、React.jsは小規模のIoTプロジェクトに適しているといえます。しかし、何層にも及ぶ複雑なIIoTアプリケーションの開発には向いていないかもしれません。

React.jsはIoTシステム分野において人気のあるライブラリではないため、開発に使用するのはリスクを伴うと同時に困難でもあります。React.jsはUIに重点を置いたフロントエンド開発の方により適しているでしょう。

今後、より多くの開発者がライブラリに貢献していくことで、本記事で挙げたReact.jsのデメリットが解決されることを筆者は願っています。しかし現時点では、これらの弱点を考えると、複雑なIoTプロジェクトに対応するのはReact.jsだけでは不十分でしょう。

まとめ

いかがでしたか?IoTプロジェクトにおけるReact.jsのメリット・デメリットがお分かり頂けたかと思います。

これらを理解した上で、React.jsがあなたの携わるIoTプロジェクトに適しているかどうかを判断しましょう。

(原文:ELIFTECH 翻訳:Yui Tamura)

SHARE

RELATED

  • お問い合わせ
  • お問い合わせ
  • お問い合わせ