減量に一応成功したが最近伸び悩んでいる話
この記事は カレーのち ぴょこりんクラスタ Advent Calendar 2018 - Adventar のために書いたものです。
スマブラしていたら体調を崩しました。やっていきます。
はじめに
体重ってあるじゃないですか。
自分は数年前くらいからじわじわと増加を感じていたのですけれど、
今年は流石にいい加減健康にならなくては、というケツイを胸に抱き、減量のため努力しました。
6月の減少の仕方が凄いですよね。自分でもよく頑張ったなぁと思うと共に、
こんなに効果があるものか、と驚いた出来事でもありました。
で、なぜこんなに急激な減量に成功したかと言いますと。
間食や晩酌の数を減らしたと言うのももちろんあるのですが、とりわけ心の支えだったのが…
はい、SUBWAYです。
昼食として野菜を上限*1にしたサンドイッチを食べ続けたのが、かなり効果的だったと思います。
トッピング・ドレッシングの変更などもできるので、はじめ数ヶ月は飽きること無くずっとSUBWAYに通い詰めていました。
…とは、言ったものの。そんな状態がずっと続くわけでもなく。 9月あたりからSUBWAYに行くことがなくなり始め、身体も徐々に緩んでくるようになりました。
SUBWAYの手前にコンビニがあるので、つい移動を面倒くさがってミックスサンド*2を買ってしまうようになり、 それが徐々にもの足らなくなり食べる量が増え…と、完全に堕落の一途をたどっている今日この頃です。
健康面などを考慮して、SUBWAYモチベをもう少し高めたい気になりました。
本題
と言うわけで、SUBWAYのメニューからカスタマイズしたい内容を選択したら
その結果のカロリーとお値段がわかるスマホアプリを作りました。
デモ
以下は、作るまでの流れなどを軽く書いておきます。
下準備:カロリーの算出方法
調査
SUBWAYは結構丁寧にカロリー表示してくれています。
栄養情報PDF:https://www.subway.co.jp/menu/pdf/eiyo.pdf
このデータを見ると、
- サンドイッチ全体(全部お勧め設定)のカロリー
- パンのカロリー
- ドレッシングのカロリー
がわかります。 全体のカロリー=パン+具+野菜+ドレッシングなので 野菜+具のカロリーは単純な引き算で計算できそうです。
…で、野菜って結局何カロリーあるんだ?と言う話なんですが。 結論から言うと、ここが良くわかりませんでした。
日本の栄養情報には野菜ごとのカロリーは記載されてないし、
一部メニューはトッピングとして具のカロリーが記載されているのでその値から野菜のカロリーを逆算する手も考えましたが、
いまいち帳尻の合う値になら無くて挫折(多分トッピングorメインで枚数なり分量なり違う)。
英語サイトでは、各メニュー↓のnutrition calculatorを見れば「VEGGIES」を選択できるのですが、
Menu - Black Forest Ham | SUBWAY.com - United States (English)
日本とは野菜の種類が異なり、にんじんの項目が存在しないし、
そもそも同じ名前のサンドイッチでもカロリーが異なる*3し、どのくらい真に受けて良いのかわかりません。
とりあえず参考情報として、英語サイト的には、レタスとトマトだけ10 kcalで他は0 kcalで計上されているようでした。
雑な仮定
結局は何が正しいのかは良くわからないので、
- レタスとトマトは他の野菜より2倍程度カロリーが多い
- レタス・トマト・にんじん・ピーマン・レッドオニオンを入れると15kcalくらいになる*4
という思い切った仮定をおいて、レタス・トマト=4kcal、にんじん・ピーマン・レッドオニオンを2kcalとして計算し、野菜以外の具のカロリーを算出することにしました。
ちなみに、全体のカロリーは全てお勧めの設定で行われているので、
お勧めの組み合わせ=写真に掲示されている組み合わせと(これまた)仮定をおき、
使われているパンと野菜を目力で推定して入れています*5。
ホワイトとウィートの違いとか全然わからないし、思った以上に人力で頑張る形になりかなり心が折れつつあったんですが、
雰囲気分かれば良いよねと割り切って実装をしていきます。
実装
カロリーの値を決める所まででかなり大変になりましたが、実装です。 react-nativeでガシガシ書きました。
パンと具材は1個しか選びようがないので、pickerを使い、
野菜・トッピング・ドレッシング*6などの複数選択させる方には、 react-native-label-selectを使っています。
実は、複数選択させる方はかなり鬼門でした。
はじめはreact-native-multiple-selectを使うつもりだったのですが、
どうあがいても自環境では文字が表示されなくて、label-selectに突貫工事で書き換えています。
しかも、react-native-label-selectの方もメンテがされて無くて、
issueで報告されているように、react v15.5以降では動きません。
結局、node_modules下のsrcファイルを修正PRと同じように書き換えて動作させています。
おわりに
まだまだ実用にはほど遠いですが、
せっかくだし一回くらいスマホアプリ作りたかった、という欲求を少しだけ満たせて楽しかったです。
以下のTODOを残してしまったのは心残りですが、気が向いたらやっていきたいと思います
- サンドイッチを選んだときに野菜やパンを全部お勧めのものに上書きする機能
- 具材の写真とか載せたい(でもPicker/label-selectの仕様的にむずそう)
- 野菜全部、はオプションでワンクリックで設定させたい
- 野菜の分量でちょこっとカロリー増減させたい(厳密計算難しい領域だし大して変わらない気がするので優先度下げちゃった)
- リリースビルドしてスマホ単独で動作できるようにする
- 季節限定メニューの内容を持ってこれるようにする(写真から目力で推定するところで詰むのでブレイクスルーが必要)