岩手県立大学のenPiT2019講義に連携企業として参加しました
アプリ開発エンジニアとして働いている菅原です。
主にBLEを利用したiOS/Androidアプリケーション、Python/Node.jsを使った社内作業支援ツールの開発を担当しています。最近ではWindows RuntimeのBLE APIの絡みでWindows10アプリ(UWP)の開発も行ったりで、「アプリ」の名前がつく分野なら幅広く着手しています。
2011年にERiに新卒として入り、もうちょっとで勤続10年目を迎えます(早いものですね。。。
ちなみに、岩手県庁様企画のいわてのものづくり・地域産業の現場から~挑戦者たちの物語 メイク ユア ドリームズ~の紹介ページ・トップ画像の2番目に写ってるのが私です。
enPiT2019に連携企業として参加
さて、本題ですが、先日イーアールアイでは岩手県立大学様のenPiT2019・BizSysD分野の「PBL基礎・システムデザイン実践論」に連携企業として参加し、そこで私菅原が、学生達のシステム企画/設計/実装のアドバイスをするためのちょっとした講師役を務めさせていただきました。
この講義では、各企業が自社製品/ノウハウを学生達に提供し、学生達にそれを活用したビジネスアイデアを考えてもらいます。その後、実際にそのシステムのスコープを絞って仕様定義・設計・実装・動作確認を行い、実践的な開発技術に触れてもらうという演習活動を行います。
今回、弊社からはBLUETUSビーコンとセンサ制御技術を応用した、「センサ搭載型ビーコン」を提供しました。
これはBLEビーコン技術を使用してセンサ値を周囲にアドバタイズする単純なものです。接続は行わず、スキャンするだけでセンサ値取得ができるようになっています。
受信機側の教材にはAndroidスマホを使い、Android Studioの基本的な操作方法からテストコードでの動作確認方法、Kotlin言語によるモダンでオシャレなコーディング方法などのノウハウも提供し、ついでにIoTで重要な通信手法であるMQTTにも学生が触れられるように準備して臨みました。
システム開発体験
アイデア出し
岩手県立大学様のenPiT講義では、大学隣にある馬っこパーク・いわて様が仮想クライアントとなっています。まずはフィールドワークとして、敷地内を実際に散策し、馬やヤギ、ウサギなどの動物たちと触れ合いながら施設内にどんな課題がありそうかを分析・発見してもらいました。
持ち寄ったアイデアを深化させた結果、
- 「来園者が動物と触れ合う際、餌やり体験の際には餌の与え過ぎの心配・乗馬体験の際には体調が悪い馬に無理をさせてしまう心配をする傾向がある」
- 「来園者が安心して動物との触れ合いを体験でき、気持ちよくパークを楽しんでもらえるようにするアイデアはどうか」
という課題と対応方針が決まり、これの具体的解決手法として
- 「動物の動作データ・小屋の環境データのモニタリング/ロギングを行って、動物の食事量・運動量・体調といった各種状態を推定し、来園者に対してわかりやすく概略データを提示してあげるシステム」
というものが考案されました。
方針・仕様決め
本講義で設けられている開発期間は約2日と短いです。その中で学生が味わえる実装体験内容を実のあるものにするために、以下のようなプロトタイプを開発することにしました:
- BLEセンサビーコンを使って、馬の加速度、および、厩舎の温度・湿度をセンシング&アドバタイズ
- AndroidのBLE APIを使って受信し、バイト列を解析&復元
- それぞれのセンサデータを、運動レベル、および、馬の熱中症リスク指数に加工
→5秒平均の運動レベルが小さい馬は、暇な個体として判定
→熱中症リスク指数が高い馬は、体調が悪い個体として判定 - MQTTで加工データをpublish
- 小規模のWebアプリで加工データをsubscribeし、わかりやすくデータを描画
3.でのデータフロー・集積・加工にはRxJava、4〜5.にはEclipse Pahoを使用しました。
仕様書作成にはVisual Studio CodeのMarkdown Preview Enhanced + PlantUMLでささっと書き、資料とコードの共有をBitBucketで行いました。
本開発
Kotlinを触るのは初めてという方がほとんどでしたが、Javaを知っていたということもあってか、特段の抵抗感なくコーディングを進めてくれました。Android Studioの強力な入力補完・Nullability性の警告・型推論結果の表示などなども効果的に学生をサポートしてくれました。学生のGitに関する基礎知識もあったので、分担作業もスムーズでした。
また、たまたま即戦力レベルでWebフロントエンド技術に長けていた学生がいたので、Webアプリの開発はほとんどコーチング不要でぱぱぱっと作ってくださいました。凄まじい技能です。
最後に行われたプレゼンテーション/ポスターセッションでは、作ったシステムについての概要解説や簡易デモなどを行ってもらいました。
最近の学生は本当に資料作成能力が高くて驚きます。私も見習いたい・・・。
enPiTに参加して感じたこと
学生の基礎教養レベルの高まりを感じる
他チーム含め、できる学生はかなりのスキルレベルを持っていて、率直に言って焦りを感じるほどでした。ほとんどの学生が一芸を身に着けていて、とても印象が良かったです。
自分もこれからERiに入ってくる世代に負けないよう、スキル研鑽意識を高く保ち続けたいです。
学生達にとって「カメラ」は最早「センサ」である
最初に「センサ活用のアイデア」を学生から募った際、「馬の顔を画像認識して・・・」とか、「馬の厩舎で各部屋の糞の量を画像認識して・・・」といった、馬や厩舎の様子をカメラで撮影して機械学習にかけてどうこうするようなアイデアが多く出てきたため、ちょっとだけ困惑してしまいました。しかし、確かに最近ではM5StickVなんかも出てきていて、小型の組み込み機器でも当たり前のようにカメラ画像センシングできる時代が訪れている流れを感じます。
同じくenPiT連携企業の東京システムズ株式会社様ではPepperロボットのアプリ開発ノウハウを提供技術とされていましたが、こちらにはゴミの自動搬出のような、飼育員の力作業を直接支援するようなアイデアが出ていました。こちらも、最近の「ロボット」というのはただのコミュニケーションインタフェースではなく、ルンバのように身近な作業を実際に手伝えるのが当たり前と考えるようになったことを示していると思います。
どちらの現象も、今の人間がどれほど先進的IT技術と一緒に生活するようになっているのかを感じさせる新鮮な出来事でした。
プロジェクトのロードマップを全員で共有し、ゴールと現在地を明確にするべき
私のチームではUML図を用いて開発対象アプリの設計イメージを共有していたので、「今回作る範囲のアプリ」が持つ機能の認識がずれることはありませんでした。しかし、「目指していた当初のシステムの形」については開発中に意識が薄れてしまい、ポスターに上手く盛り込めず、ポスターセッション中の質問にて将来展望イメージが不明瞭とツッコまれてしまいました。
自分が開発している製品のロードマップを理解していないと、自分が今やっていることが正しいことなのか、不安を抱きながら作業することになります。これは間違ったものを作ってしまいかねないだけでなく、日々の作業自体がつらいものになって、前向きに仕事ができなくなる原因にもなります。
楽しく正しいエンジニアリングをするために、将来像を描き、現在地をプロットして、チームメンバーとの協力によってゴールへ向かっていくことを意識すべきです。
プログラミング学習ではもっと設計力を重視するべき
今回の開発言語には、学生たちがまだ使ったことがないKotlinを採用して、あえて新しい言語に触れてもらいました。これは、今時のプログラマの仕事は高難度化していて1つの言語だけではこなせず、複数言語を操れるのが当然となっているために、特定言語へ固執しないように成長してほしかったからです。
私がよくやる業務では、Android向けにKotlinで記述されたコードをiOS向けにSwiftで置き換えたり、Win10アプリ向けにC#で置き換えたりすることがあります。はたまた、アプリから得られたログデータを加工するために小さなPythonスクリプトを用意したり、Web技術を使ってイイ感じにデータ可視化をするためにJavaScriptを使ったりもします。
こうして複数の言語を使えるようになって、プログラミングの勉強において大事なことは何だったかを振り返りました。そこで私が気が付いたのは、プログラミング言語の文法理解というのはあくまで表面的知識に過ぎず、真にプログラミング学習において鍛えるべき本質的なところとは「設計力」だ、ということです。
「データがどこから生まれて、どこで加工されて、どのように出力され、更にそれがどこへ伝わっていくのか」が整理されたデータフロー、拡張性・保守性のバランスが取れた抽象化技法、テスト性が保たれたクリーンなアーキテクチャ・・・等々の設計上観点は、いかなる言語を用いたシステム開発にも応用することができ、この力が高ければ高いほど開発現場で活躍できる・重宝される人になれると思います。
また、言語文法は「こう書けばいい」を示してくれるものですが、「こう作っていけばいい」までは示してくれません。言語だけ追いかけていても、実際のシステム開発において路頭に迷うことになってしまいます。
プログラマは「言語学者」であると同時に、システムという物語を自由に創り出していける「小説家」でなくてはならないと思います。だからこそ、エンジニアは若いうちからソフトウェア設計について体系的に学んでいく必要がありますし、その学習ができる機会を学校・会社などの組織は提供してあげるべきだと思います。
以上がenPiT2019への参加レポートです。
ちなみに、実はこれで3回目のenPiT参加であり、そろそろセンサビーコンを提供技術にし続けるのはIoT業界のレベル的にも時代遅れ感があるかなと感じてきました。もし来年も連携企業として参加できるのであれば、上で紹介したM5StickVのようなデバイスを採用し、本当にカメラセンサを使うのを体験させてあげても面白いかもしれません。