※2016-11-08修正 サンプルをよりそれっぽいスクリーンショットに差し替えました
※2017-02-22追記 事例ができたのでアドレス添付しました
世の中でIoTと呼ばれるものには様々なモノがありますが、今回は「ロジックが重め」のケースの開発パターンでの事例を紹介したいと思います。結論だけ知りたい方は**「Shinyだと爆速開発可能」**とだけご記憶ください。
IoTの分類
ハードウェア・ネットワークが律速するものでロジックが軽い(例えば「温度センサーの値でエアコンに指示を送る」のように端末データを間欠的に送るだけの)場合はほぼ機器間を繋げるところに工数のほとんどを割くことになると思いますが、生体センサーのようにデータを切り出しただけではそれ自身意味が無いものをソリューションとして仕上げていくような「ロジックが重め」の開発では研究レベルからリリースに至るまでアルゴリズムを仕上げていく戦いを続けることになります。
「ロジックが重め」の開発内容を可視化してみよう
意味付けを含むようなロジック部分が重い開発の場合、アルゴリズムのトライアンドエラー&チューニングの回数・密度が重要になります。
- Excelだとパラメターを振り始めた途端につらいので早めにデータ分析言語に移行したほうが良いです。
- データ分析言語に移行した後は「ほかの人に使ってもらう」という壁が現れます。全員同じ言語が使える場合はよいのですが、使えない場合はなんかしら簡単にデータを確認できるツールが必要です
- 次の壁は他の人に使ってもらおうとした時のアプリの移植です。データ分析言語でしっかりベクトル化して演算できている場合は逆に移植の時に手間取ります。一方で移植してしまうとフィールド実験で気づいたアルゴリズム変更を適用しようとしても、データ分析言語ほど簡単に計算式を変えられないため、開発サイクルが遅くなるという課題も発生します。
なので、できる限り後段のフェーズまでデータ分析言語で引っ張る、というのが完成度向上のために重要になります。これらを解決するにはデータの閲覧とチューニング作業自体をWeb化してしまうのが手っ取り早く、自分の関わっている開発ではShinyを全面で適用しています。Shinyは慣れるとちゃんとした仕様書を書く時間のx1.1~x1.5倍ぐらいの時間でアプリの作成・デプロイまでできてしまうので圧倒的な開発の高速化が可能です。
Shiny(shinydashboard)でどのフェーズまで使えるのか?
Shiny
shinydashboard
ユーザー数が限定的な場合は、本番で使うという可能性もあると思います。下記にいくつかのshinydashboardを利用したサンプルアプリのスクリーンショットを貼り付けておきます。開発・分析段階で使っていたコードをそのまま使用できるので、言語の移植などの作業が不要で大幅な工数削減が実現できました。デフォルトでレスポンシブなHTMLが生成されますので、PCだけでなくスマホでもスムースにフィールド実験ができるようになります。Shinyは同時利用に弱いのでそこはある程度妥協とチューニングが必要なのですが、スピード優先の場合Shinyはおススメです!
JINS MEME RUNのトレーニングヒストリー
これが一番凝っていると思います。
・shinydashboardを使用したUI
・Sidebarでの認証コントロール(httrでREST連携しています)
・Valuboxによるダッシュボード表示
・leafletによる地図インテグレーション
・データ読み込み中を示す進捗バー
・modalDialogを使用したエラー時のダイアログ表示
・reqによるエラーハンドリング
・フローティングのスライドバー
・shinyapps.ioの使用