ユカシカド エンジニアブログ

体の栄養状態を把握する検査サービス VitaNoteを開発するエンジニアのブログ

Railsで栄養検査サービスを開発した話と大変だったところ

f:id:aq2bq:20170810181146p:plain

こんにちは。ユカシカドの寺田です。 6月にVitaNoteという栄養検査サービスをリリースしました。本当はプレスリリースとともに「リリースしました!超頑張りました!」っていう記事を書きたかったのですが、リリース後も途切れることなく開発が続いており、期を逃してしまいました。

詳しくはサービスサイトやプレスリリース「第4次栄養革命 栄養検査により必要な栄養を把握可能に。世界初!尿で栄養の過不足を評価する検査サービスを6/19より販売開始」にも書いてあるのですが、ざっくり説明すると、ユーザーに専用の採尿キットにおしっこを入れて、返送してもらうと普段の食生活による体内の栄養状態がわかりますよ、という今までになかった新しいサービスです。

実際に本格的な開発は今年の2月から、事業の構想や準備を含めると何年もかかっていましたが、ようやくユカシカドは「おしっこ系スタートアップ」と言えるようになりました。

VitaNoteでわかった最近の寺田の栄養状態

f:id:aq2bq:20170810180443p:plain:w150 f:id:aq2bq:20170810180511p:plain:w150

※ 実は、明らかに前日までの2日連続ラーメンが反映されナトリウムが過剰なんですが、そのことを画面でわかりやすくしたい。

VitaNoteはRailsアプリケーション

現在VitaNoteはオンラインで完結しない類のWEBサービスでRuby on Railsで開発しています。

開発している間にもRailsのバージョンがどんどん(5.0.1->5.1.2)あがっていくので焦りました。。

オンラインではない部分というと、検査キットの製造や出荷だったり、実際に検査センターで検体を検査したりする部分です。

Railsアプリケーションとしての規模は今日時点でモデルの数は98で、コントローラーの数は53という程度で、来週にはモデル数が100に到達する見込みです。

View側で一部Vue.jsを使用していますが、従来のjQueryでAJAX部品をつくる手法に比べて非常に楽ができたように実感しています。

大変だったところ

数値計算が多い

VitaNoteの特徴のひとつとして、ユーザーの採尿時にその時点でのプロフィール(性別・妊婦?/授乳婦・身長・体重/運動の有無)などを入力してもらうのですが、その時のユーザーの状態にあわせた目標値が作成されます。

また、検査時にも測定された様々なデータを計算し、前述の目標値とあわせて栄養評価につながります。

このような場合でテストが重要になるわけですが、考えなしに実装とテストに手を着けると大変なことになるのが予測できました。

そのために、コアとなるロジックについて精査するべく、専門家である共同研究の先生や弊社検査担当者とディスカッションする目的でスプレッドシートを作り込みました。

その甲斐あって、RSpecでテストを書く際にはこの時完成したスプレッドシートが大活躍し、自信を持って実装することができました。

スプレッドシートとの良いところは計算ロジックをブラックボックスにせずに、非エンジニアと相互に確認ができるところだと思います。

余談ですが、このスプレッドシートは世に出ることはありませんが、我ながら力作で、このスプレッドシート単体でもアプリケーションと呼べる代物になりました。

単位変換

現時点でVitaNoteで検査できる項目は最大で15種類(ビタミンB1、ビタミンB2、ナイアシン、ビタミンB6、葉酸、パントテン酸、ビオチン、ナトリウム、カリウム、カルシウム、マグネシウム、リン、モリブデン、たんぱく質、酸化ストレス)あり、これらの栄養状態を評価するために様々な物質を測定しますが、それぞれの物質は様々なスケールで尿中に含まれています。

この単位変換でのミスはコードをいくら眺めていても気が付かないので、上記のスプレッドシートが大活躍しました。

そもそもプログラムで単位を扱う場合、どのようにするのがベストが悩んだので検索したところ、

このようなライブラリを開発されたのを見つけました!「まさしく!これだ!」と思いつつも、検討はしたのですが結果として見送り今後の課題としました。

なので現状は、数値をもつモデルに単位を持たせて、計算の際に相互の単位をチェックしたのち計算する、という機構にしました。

これから

栄養についてはまだまだ未知の領域があり、ユカシカドは継続して研究に取り組んでいます。その研究の過程で明らかになったことをサービスに反映させていきたいと考えています。

これまで自分の栄養状態を知るのは難しかったのがVitaNoteではそれがわかるようになりました。 ユカシカドでは人々の食生活を改善して、病気になる人を減らし、パフォーマンス向上に貢献していきます。

ということで、

栄養の課題を解きまくりたいRailsエンジニアを募集しています

「ちょっと興味あるから話だけでも聞きたい」という方もご遠慮無くご連絡ください。 寺田のあまりツイートしないtwitter(@aq2bq)経由でも構いません。

「心待ちにしている感じが伝わらない」と言われた、この写真を改善しました。

f:id:aq2bq:20170801194549p:plain:w200

f:id:aq2bq:20170810175915p:plain:w150

※ 背中に書いてしまった時点で同じ構図で撮れないというミス。