取り組みの背景 — 「レシピアプリ」は初心者に最適な開発テーマ
「自分だけのレシピアプリが作りたい」と考えたことはありませんか?料理好きな方はもちろん、アプリ開発の入門としてもレシピ管理アプリは最適なプロジェクトです。
レシピアプリには、モバイルアプリ開発で必要な要素がバランスよく含まれています。一覧表示、検索・フィルタリング、詳細画面、お気に入り機能、データの永続化など、これらは他のどんなアプリにも応用できるスキルです。
ここではRork AI を使ってレシピ管理アプリをゼロから構築する方法を、プロンプト設計の段階から順を追ってご紹介します。プログラミング経験がなくても大丈夫です。Rork のAIアシスタントがコード生成を担当してくれるので、アイデアと設計に集中できます。
この記事で学べること
この記事を読み終えると、以下のことができるようになります。
- Rork でレシピ管理アプリの画面構成を設計する方法
- カテゴリ検索・お気に入り登録の実装テクニック
- 材料から買い物リストを自動生成するロジック
- AsyncStorage を使ったデータの保存と読み込み
- アプリを TestFlight や Google Play で配布する準備
前提知識と環境準備
レシピ管理アプリを作り始める前に、以下の環境を準備しましょう。
必要なもの:
- Rork アカウント(無料プランでも開始可能)
- ブラウザ(Chrome / Safari 推奨)
- レシピのアイデア(3〜5品あるとテストしやすいです)
推奨知識:
- HTML/CSS の基本的な理解(なくても進められます)
- React Native の概念(Rork が自動で処理するため必須ではありません)
Rork が初めての方は、まずこちらの入門ガイドをご覧ください。
アプリの全体設計 — 画面構成とデータモデル
まず、レシピ管理アプリの全体像を設計します。良いアプリは良い設計から始まります。
画面構成(5画面)
レシピ管理アプリに必要な画面を整理すると、以下の5つになります。
- ホーム画面 — おすすめレシピとカテゴリ一覧を表示
- 検索画面 — キーワードやカテゴリでレシピを絞り込む
- レシピ詳細画面 — 材料・手順・調理時間を表示
- お気に入り画面 — 保存したレシピの一覧
- 買い物リスト画面 — 選択したレシピの材料をまとめて表示
データモデル
各レシピには以下のデータを持たせます。
// レシピのデータ型定義
interface Recipe {
id: string;
title: string; // レシピ名
category: string; // カテゴリ(和食、洋食、中華など)
cookingTime: number; // 調理時間(分)
servings: number; // 何人前
difficulty: 'easy' | 'medium' | 'hard'; // 難易度
ingredients: Ingredient[]; // 材料リスト
steps: string[]; // 調理手順
imageUrl: string; // レシピ画像のURL
isFavorite: boolean; // お気に入りフラグ
createdAt: string; // 作成日
}
interface Ingredient {
name: string; // 材料名
amount: string; // 分量(例: "200g", "大さじ2")
checked: boolean; // 買い物リストでのチェック状態
}このデータモデルを最初に決めておくと、Rork へのプロンプト指示が明確になり、手戻りを減らせます。
Rork でプロジェクトを作成する
それでは実際に Rork でアプリを作り始めましょう。
ステップ1: プロジェクト作成プロンプト
Rork にログインして新規プロジェクトを作成したら、以下のようなプロンプトを入力します。
レシピ管理アプリを作成してください。
【画面構成】
1. ホーム画面: カテゴリ別のレシピカルーセルを表示
2. 検索画面: キーワード検索 + カテゴリフィルター
3. レシピ詳細画面: 材料リスト、手順、調理時間、人数
4. お気に入り画面: 保存したレシピの一覧
5. 買い物リスト画面: 選択したレシピの材料をまとめて表示
【デザイン要件】
- タブナビゲーション(ホーム、検索、お気に入り、買い物リスト)
- カラーテーマ: 温かみのあるオレンジ系
- レシピカードはサムネイル画像付き
- 調理時間と難易度をバッジで表示
【データ】
- カテゴリ: 和食、洋食、中華、イタリアン、デザート
- サンプルレシピを各カテゴリ3つずつ含めてください
- 材料には分量を必ず記載してくださいここでのポイントは、画面構成とデザイン要件を明確に分けて伝えることです。Rork のAIは構造化されたプロンプトから、より正確にアプリを生成できます。
ステップ2: 生成結果の確認と調整
Rork がアプリを生成したら、プレビューで以下の点を確認しましょう。
- タブナビゲーションが正しく動作するか
- レシピカードのレイアウトが崩れていないか
- 検索機能がキーワードに反応するか
- お気に入りボタンが機能するか
修正が必要な場合は、具体的な箇所を指定して追加プロンプトを送ります。
ホーム画面のレシピカードを修正してください:
- カードの角を丸く(border-radius: 12px)
- サムネイル画像の高さを180pxに統一
- 調理時間アイコンを時計アイコンに変更お気に入り機能の実装
お気に入り機能は、レシピアプリの核となる機能の一つです。ユーザーが気に入ったレシピをワンタップで保存し、あとから素早くアクセスできるようにします。
AsyncStorage を使ったデータ永続化
Rork では React Native の AsyncStorage を使ってデバイス内にデータを保存できます。以下のプロンプトで、お気に入りデータの永続化を指示しましょう。
お気に入り機能を改善してください:
- AsyncStorageを使ってお気に入りデータを永続化
- アプリを再起動してもお気に入りが消えないようにする
- お気に入りの追加/削除時にハートアニメーションを表示Rork が生成するコードの中核部分は、次のような構造になります。
// お気に入り管理のカスタムフック
// Custom hook for managing favorite recipes
import AsyncStorage from '@react-native-async-storage/async-storage';
const FAVORITES_KEY = '@recipe_favorites';
export const useFavorites = () => {
const [favorites, setFavorites] = useState<string[]>([]);
// アプリ起動時にお気に入りを読み込む
// Load favorites when the app starts
useEffect(() => {
loadFavorites();
}, []);
const loadFavorites = async () => {
const stored = await AsyncStorage.getItem(FAVORITES_KEY);
if (stored) setFavorites(JSON.parse(stored));
};
// お気に入りの追加・削除を切り替える
// Toggle a recipe's favorite status
const toggleFavorite = async (recipeId: string) => {
const updated = favorites.includes(recipeId)
? favorites.filter(id => id !== recipeId)
: [...favorites, recipeId];
setFavorites(updated);
await AsyncStorage.setItem(FAVORITES_KEY, JSON.stringify(updated));
};
return { favorites, toggleFavorite };
};
// 期待する動作:
// - toggleFavorite('recipe-001') → お気に入りに追加
// - 再度呼び出し → お気に入りから削除
// - アプリ再起動後もデータが保持される買い物リスト自動生成機能
レシピ管理アプリならではの便利機能として、選択したレシピから買い物リストを自動生成する機能を実装しましょう。
材料の統合ロジック
複数のレシピを選択した場合、同じ材料は分量をまとめて表示するのが理想的です。
買い物リスト機能を追加してください:
- お気に入りのレシピから買い物リストを自動生成
- 同じ材料は分量を合算して1行にまとめる
- チェックボックスで購入済みをマーク可能
- カテゴリ別に材料をグループ化(野菜、肉、調味料など)
- リスト全体のクリアボタンを配置生成されるロジックのイメージは以下の通りです。
// 複数レシピの材料を統合して買い物リストを生成する
// Merge ingredients from multiple recipes into a shopping list
const generateShoppingList = (recipes: Recipe[]): ShoppingItem[] => {
const merged = new Map<string, ShoppingItem>();
recipes.forEach(recipe => {
recipe.ingredients.forEach(ingredient => {
const key = ingredient.name.toLowerCase();
if (merged.has(key)) {
const existing = merged.get(key)!;
existing.amounts.push({
amount: ingredient.amount,
fromRecipe: recipe.title,
});
} else {
merged.set(key, {
name: ingredient.name,
amounts: [{
amount: ingredient.amount,
fromRecipe: recipe.title,
}],
checked: false,
category: categorizeIngredient(ingredient.name),
});
}
});
});
return Array.from(merged.values());
};
// 期待する出力例:
// [
// { name: "たまねぎ", amounts: [{ amount: "1個", fromRecipe: "カレー" }, { amount: "1/2個", fromRecipe: "ハンバーグ" }], ... },
// { name: "にんじん", amounts: [{ amount: "1本", fromRecipe: "カレー" }], ... }
// ]カテゴリ検索とフィルタリング
ユーザーがレシピを素早く見つけられるように、検索機能を充実させましょう。
複合フィルター機能
キーワード検索だけでなく、カテゴリ・難易度・調理時間でフィルタリングできるようにすると、実用性が大幅に向上します。
検索画面を強化してください:
- キーワード検索(レシピ名と材料の両方を検索対象に)
- カテゴリフィルター(横スクロールのチップUI)
- 調理時間フィルター(15分以内、30分以内、60分以内)
- 難易度フィルター(かんたん、ふつう、本格派)
- 検索結果が0件の場合に「レシピが見つかりませんでした」と表示このプロンプトにより、Rork は直感的なフィルターUIとフィルタリングロジックの両方を生成します。横スクロールのチップUIは、限られたスマートフォンの画面幅を有効活用できるデザインパターンです。
デザインの仕上げとUXの改善
基本機能が完成したら、ユーザー体験を向上させるディテールを追加します。
アニメーションとマイクロインタラクション
以下のアニメーションを追加してください:
- レシピカードタップ時のスケールアニメーション
- お気に入りボタンのハートがバウンスするアニメーション
- 買い物リストのチェック時にストライクスルーアニメーション
- 画面遷移にスライドアニメーションこうした小さなアニメーションが、アプリの完成度を大きく引き上げます。Rork のアニメーション機能について詳しくはこちらをご覧ください。
ダークモード対応
近年のアプリではダークモード対応が標準になっています。
ダークモードに対応してください:
- システム設定に連動して自動切り替え
- 食品の写真が映えるよう背景は深いグレー(#1C1C1E)
- テキストコントラスト比をWCAG AA基準以上に維持まとめ — レシピアプリから始めるモバイル開発
ここではRork を使ったレシピ管理アプリの作り方を一通りご紹介しました。画面設計、プロンプトの書き方、お気に入り機能、買い物リスト生成、検索フィルタリングなど、モバイルアプリ開発に必要なスキルを幅広くカバーできたのではないでしょうか。
レシピアプリで学んだ技術は、ECアプリや在庫管理アプリなど、一覧・詳細・検索を組み合わせたアプリ全般に応用できます。まずは3〜5品のレシピでプロトタイプを作り、そこから少しずつ機能を追加していくのがおすすめのアプローチです。
「アプリを作りたい」という気持ちがあれば、Rork がその実現をサポートしてくれます。ぜひ今日から、自分だけのレシピアプリを作り始めてみてください。