4年の小幡です。
気づけばもう5月になっていて、大学生活の終わりが近づいていると焦りを感じています。卒業制作にもそろそろ真剣に取り組もうということで、このブログに進捗を投稿していきたいと思います。 卒業制作の方針としては、昨年度の投稿(来年度の構想 – Idea Markets)から変わっていません。
本投稿の要約
- バックエンドをspring bootで、フロントエンドをvue.jsで作ってPWAとして完成させることを決定
- e-statのAPIを利用して、「名古屋市の」 「2024年12月以降の」 「食料品小売価格」を取得することに成功
- データをキャッシュとして保存し、任意のタイミングでデータを更新できるようにした
- “食品価格”、”食品中の栄養素”、”1日の栄養摂取推奨量”の3つのデータから、低コストかつ健康的な食品の組み合わせを探せるようにしたい
- 今後の課題いろいろ
進捗の詳細
作成途中のもの(githubレポジトリ)→graduateWork/src/main/java/com/gwork/demo/Service at main · obata2/graduateWork

春休みの間から少しずつ進めていて、上に挙げた内容がこれまでの主な進捗です。それぞれ説明していきます。
1つ目に、複雑な処理をそこそこ高速に行えて、ある程度書き慣れているjavaを使いたいということで、spring bootを使ってみることにしました。また、河合先生からのフィードバックでPWAにするのはどうかという提案を受け、調べてみると制作コストを抑えられて便利そうだったので、vue.jsでなんとか実現できないかと考えました(GPTに相談して決めたので、本当にこれで出来るかは未検証)。まだバックエンドの部分しか取り掛かれておらず、webデザインの知識も浅いので、勉強していかなければならないことも多いです。
2つ目については、APIパラメータの設定とデータ加工に苦戦していました。元のデータを丸ごと取得すると、サイズが膨大で処理しきれなかったので、抽出対象を絞り込む必要がありました。メタデータとにらめっこしながらパラメータを設定して、得たJSONをゴリゴリと加工して、javaで処理しやすい形に変換する過程が大変でした。(小売物価統計調査 小売物価統計調査(動向編) 主要品目の都市別小売価格-都道府県庁所在市及び人口15万以上の市(2000年1月~) 月次 | データベース | 統計データを探す | 政府統計の総合窓口 から価格データを取得)
JsonNode ingredients = jsonNode.get("GET_STATS_DATA").get("STATISTICAL_DATA").get("CLASS_INF").get("CLASS_OBJ").get(2).get("CLASS"); //食材名が配列で保管されている部分
↑jsonの階層が多くて分かりにくいです。SQLとか使えばもっと簡単になるのかも?
得られたデータを確認するために毎回spring bootを起動して確かめていたのですが、ターミナルから動作確認すればもっと楽だったと思います。今後の開発で改善していきます。
3つ目に、アプリを起動する度にe-statにアクセスする必要はない気がしたので、キャッシュとして別のファイルにデータを書き込む形をとりました。それによってどんなバグが発生し得るかは考えていないので不安ではありますが、今のところ正常に動作しています。余裕があればここも検討します。
4つ目に関しては、具体的にどういうアルゴリズムを使うかという話は長くなってしまうので、次の投稿に分けようと思います。
また、今後の課題として
- 読みやすい・修正しやすい・バグが起きないコードを書けるように
- アルゴリズムをもう少し工夫したい(整数計画法?)
- 生野菜の栄養データだけを利用してテストしている段階なので、使う食材を増やしてみる
- 摂取目標にしている栄養素の種類と量を、もう少し検討する
- 価格データがnullであるときの処理
- 食材の選定ができたら、LLMに渡してレシピを考えてもらえるようにする
- Webデザインの知識も増やす
等々、やることが山積みです。1つ解決すれば1つ課題が出てきて、なかなか終わりの見えない状況ではありますが、割と楽しくやれてます。
さいごに
ここまで取り組んでみて、生成AIの便利さを非常に実感しています。作ったコードは、自分:AIが1:2ぐらいの割合なので、AI無しの開発というのは考えられないです。自分だけでは絶対に作れなかったものが一瞬で出来てしまうので、良い時代に生まれたものだと思います。