← ブログ一覧に戻る
🍳

CookSuggestアプリ開発秘話:1000レシピDBをどう構築したか

アプリ開発 データベース JavaScript 料理

はじめに:なぜCookSuggestを作ったのか

「冷蔵庫に余った食材で何を作ろう…」誰もが一度は経験する悩みですよね。私自身、仕事帰りに疲れて帰宅して、冷蔵庫を開けて途方に暮れる日々が続いていました。

市販のレシピアプリは確かに便利ですが、「○○を使ったレシピ」を検索しても、結局は他の食材も必要で、買い物に行かなければならない…。そんな経験から、「今ある食材だけ」で作れるレシピを提案するアプリを作りたいと思い立ちました。

💡 CookSuggestのコンセプト
  • 冷蔵庫の余り物から料理を提案
  • 買い物不要で今すぐ作れるレシピ
  • 食材ロス削減にも貢献
  • 1000種類以上のレシピデータベース

課題1:レシピデータをどう集めるか

最初の大きな壁は、「どうやって1000種類ものレシピデータを集めるか」でした。手作業で1つずつ入力するのは現実的ではありません。

検討した方法

  1. 既存APIの利用 - 楽天レシピAPI等を検討したが、無料枠が限られており継続性に不安
  2. Webスクレイピング - 著作権・利用規約の問題で断念
  3. ChatGPT APIでレシピ生成 - コストが高く、データの一貫性に課題
  4. 一般的なレシピ知識をベースに手作業でDB構築 - 時間はかかるが最も確実

最終的に、一般的な料理知識をベースに、独自のレシピデータベースを構築することにしました。著作権フリーの一般的な料理レシピ(肉じゃが、カレー、ハンバーグ等)をベースに、自分の料理経験も加えて1000レシピを手作業で整備しました。

📊 [画像予定] レシピデータベースの構造図
(料理名 / 材料リスト / 調理時間 / 難易度 / カロリー / 手順)

課題2:データ構造の設計

レシピデータをどのようなJSON構造で保存するかも重要なポイントでした。検索速度とメンテナンス性を考慮した結果、以下の構造に落ち着きました。

{ "id": 1, "name": "肉じゃが", "category": "和食", "ingredients": [ {"name": "じゃがいも", "amount": "3個", "required": true}, {"name": "豚肉", "amount": "200g", "required": true}, {"name": "玉ねぎ", "amount": "1個", "required": true}, {"name": "にんじん", "amount": "1本", "required": false}, {"name": "しらたき", "amount": "100g", "required": false} ], "cookingTime": 30, "difficulty": "簡単", "calories": 350, "steps": [ "じゃがいもと人参を一口大に切る", "鍋で肉を炒め、野菜を加える", "だし汁と調味料を入れて煮込む" ] }

ポイントは、材料に「required」フラグを付けたこと。これにより、「絶対に必要な材料」と「あれば良い材料」を区別し、ユーザーが持っている食材だけでマッチング精度を高めることができました。

課題3:検索アルゴリズムの実装

「ユーザーが選んだ食材」と「レシピの必要材料」をマッチングさせるアルゴリズムが、このアプリの心臓部です。

最初のアプローチ(失敗)

当初は単純に「選択された食材がすべて含まれるレシピ」を検索していましたが、これだとヒット数が極端に少なくなる問題が発生しました。

改善後のアルゴリズム

そこで、「マッチ度」スコアリング方式に変更しました。

  • 必須材料が全て揃っている: +100点
  • オプション材料が揃っている: +10点/材料
  • 余分な材料が少ない: +5点/不要材料
  • 調理時間が短い: +1点/分短縮

このスコアリングにより、「完璧に一致するレシピ」だけでなく、「ほぼ作れるレシピ」も提案できるようになりました。

🎯 スコアリングの効果
ユーザー満足度が大幅に向上!「豚肉とキャベツしかない」状況でも、5-10件のレシピを提案できるようになりました。
📈 [画像予定] マッチングアルゴリズムのフローチャート
(食材選択 → 必須材料チェック → スコア計算 → ソート → 結果表示)

課題4:パフォーマンス最適化

1000件のレシピデータを毎回全検索すると、ブラウザが重くなる問題が発生しました。特にスマホでの動作が遅く、ユーザー体験を損なっていました。

実施した最適化

  1. カテゴリ別の事前フィルタリング - 和食・洋食・中華でまず絞り込み
  2. インデックス作成 - 食材名をキーにした逆引きインデックス
  3. Web Worker活用 - 検索処理をバックグラウンドスレッドで実行
  4. 結果キャッシュ - 同じ食材選択なら前回結果を再利用

これらの最適化により、検索速度が平均3秒 → 0.5秒に短縮されました。

実際の反響と今後の展望

CookSuggestは2022年4月のリリース以来、多くの方にご利用いただいています。「冷蔵庫の余り物を有効活用できた」「食材ロスが減った」といった声を頂き、開発者として嬉しい限りです。

今後の改善予定

  • レシピ画像の追加(視覚的訴求力の向上)
  • 栄養バランス分析機能
  • ユーザーレビュー・評価機能
  • レシピ数を2000件に拡大
  • AI活用による個別最適化(好みの学習)
📱 CookSuggestを使ってみる
実際にアプリを試してみたい方はこちらからどうぞ!

まとめ:個人開発アプリの作り方

CookSuggest開発を通じて学んだ教訓をまとめます。

  1. データ収集は最初が肝心 - API依存よりも独自DB構築が長期的には有利
  2. 完璧を求めすぎない - 80%の完成度でリリースし、フィードバックを得る
  3. ユーザー体験を最優先 - 検索速度・UI/UXにこだわる
  4. 継続的改善 - リリース後も定期的にアップデート

個人開発アプリは、大規模サービスにはない「ニッチなニーズへの対応」が強みです。CookSuggestも「今ある食材だけで料理したい」という特定のニーズに特化したことで、ユーザーに支持されています。

もしあなたも「こんなアプリがあったら便利なのに」というアイデアがあれば、ぜひ形にしてみてください。完璧でなくても、誰かの役に立つアプリになるはずです。

📱 [画像予定] CookSuggestの実際の画面スクリーンショット
(食材選択画面 → 検索結果 → レシピ詳細)

最後まで読んでいただき、ありがとうございました!
他の開発記事もブログで公開していますので、ぜひご覧ください。

← ブログ一覧に戻る