プロジェクト学習やってて、そんなの作ってる場合じゃありませんでした。本学名物の”プロジェクト学習”については、こちらをご参照下さい。今もそのプロジェクト学習は続いているのですが、同時にドキュメンテーション化も進めていかなければならないので、ついでで記事にすることにしました。自分の班では、生活習慣を正して認知症予防に繋げよう!という感じで食生活記録及び改善を促すシステム「ふーろぐ」の開発を行ってきました。具体的には、「料理を撮影する箱」と「撮影された写真を管理するサーバ」を構築しました。毎食、食べる前に箱の中に料理を入れることで自動で撮影がされます。この写真はサーバに送られ、撮影者自身がテレビを介して確認できる他、撮影者の家族などがウェブブラウザを介して確認することもできます。あとは食事の画像解析をして、何の食事であるかを認識し、メニューの偏りなどを識別する機能も実装しました。...と、色々てんこ盛りなシステムを3ヶ月ほどで作りました。食事の撮影を行うカメラはRaspberryPiで作って、Motionというソフトウェアで動体が静止したらサーバーに送るようにしています。Railsで動いています。基本的なデータベースにPostgreSQL、ジョブ管理のActiveJobのためにRedisを使用。S3にアップロードして管理してる。フロントエンドでBootstrap4と(jQueryでDOM操作したくないから)rails/webpackerでVue.js、あとはフロントエンドでリアルタイムにサーバの情報を反映させるためにActionCableでWebSocketしてる。RaspberryPiから写真が飛んでくるとOpenCVで皿ごとに写真を分けてdocomo様の画像認識APIに飛ばして料理名を出してる(この画像認識APIでは複数の料理を認識してくれないため)。ことを上述したfoologサーバとは別のAPIサーバで動作させてる。これも勿論Heroku。あとはdocomoから返ってきた料理名と栄養素の組み合わせを先に作っておくために、とあるサイトをスクレイピングしてfixtureとしてデータベースに突っ込んでたりする。(これはそのサイトに利用規約が無かったのでグレー)まぁリポジトリ見れば早い話だね。メインのfoologサーバ:https://github.com/2017pro02/medical-webカメラ:https://github.com/2017pro02/medical-camera料理名出すAPIサーバ:https://github.com/2017pro02/medical-cutouterとあるサイトをスクレイピングしてfixture作成するやつ:https://github.com/2017pro02/medical-calorie開発ツール開発を比較的スムーズに進めるため、積極的にツールを取り入れたつもり。GemSpringRailsに付属している、がデフォルトだと使わない(はず)。これを使うと、rails/rakeコマンドを使うたびに時間がかかるライブラリのロードをバックグラウンドで先にやってくれるようになる。ForemanHerokuでも使われている、簡単に複数のプロセスを走らせるやつ。開発環境でも複数の窓を開いてコマンドを実行する必要がなくなるね。RuboCopコード規約を徹底するやつ。実質お一人様開発だったが、自分自身まだ暗黙的なルールが分かっていなかったので、結構直してくれた。設定は勿論onkさんのOnkCopを使用。pre-commitcommit時に問題が無いか確かめて、問題があればcommit時に教えてくれるやつ。上で紹介したRuboCopは勿論のこと、rspecなど色々実行できる。ExtensionZenHubissueやPRをカンバン上で扱えるようにするやつ。GitHubに違和感無く溶け込むので、超使いやすい。SessionBoxタブごとにセッションを分けて扱えるようになる。これで複数のアカウントでテストする時でも楽々。CLI-Toolanyenvrbenvやndenvなどのenvを一括管理してくれるやつ。お陰で.zshrcにはenv系は一行しか書く必要が無い。Docker{,-compose}開発環境を楽に準備するのに導入した。お一人様開発だったが。Railsの実行には使わなかった(マウントしたファイルの読み書き遅いし)、PostgreSQLやRedisのコンテナを利用して、開発機に直にDBを入れるのを回避してた。最終的にどこまで実装できたか基本的な機能は勿論のこと、飛んできた画像を認識して、メニュー名から平均的な栄養価を出して。「毎日料理を撮影しなきゃならない面倒さを如何に解消するか」とか、「続けて撮影したくなるような機能」とか全然出来てないので、来年度のすうぃふとプロジェクト医療班に期待したい。このプロジェクト学習のまとめということで最終報告書を書いてます(2018年1月17日に提出した)。LaTeXで、GitHubのプライベートリポジトリで管理しています(提出後にパブリックにしました)。LaTeX環境を作るのが面倒だったので、paperist/alpine-texlive-jaを使用。Atomのパッケージ「on-save」を使ってPDFへの変換を簡略化。CircleCIを回して表記揺れ検出をして、Reviewdogを使ってPRに修正案をコメントするようにしています。masterブランチにマージされたらPDFを生成してCircleCIのホストするS3に保存し、Slackに保存先を通知します。良い感じにまとまりませんでした。明日はPart2では誰も居ませんが、Part1ではchikuwa_ITが登録してますねぇ。/m?ruby/のプロです。コメントデータの処理方法の詳細はこちらをご覧ください。WordPress.。