RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/Rork入門
Rork入門/2026-03-23初級

Rorkでメモ・ノートアプリを作る完全チュートリアル — データ保存と検索機能の実装

Rorkを使ってメモ・ノートアプリをゼロから作る入門チュートリアル。AsyncStorageによるデータ永続化、リアルタイム検索、カテゴリ分類まで、初心者にもわかりやすく解説します。

Rork515ノートアプリメモアプリチュートリアル23AsyncStorage10React Native209初心者向け5

取り組みの背景 — なぜメモアプリを作るのか?

スマートフォンアプリの中でもっとも身近な存在のひとつが、メモ・ノートアプリです。Apple の「メモ」や Google Keep のように、思いついたアイデアやタスクをさっと記録できるアプリは、日常的に多くの人が使っています。

このチュートリアルでは、Rorkを使ってメモアプリをゼロから構築する方法を解説します。Rork の AI によるコード生成機能を活用することで、プログラミング初心者でも本格的なノートアプリを短時間で作ることができます。

この記事で学べること:

  • Rork でメモアプリの画面構成を設計する方法
  • AsyncStorage を使ったデータの永続化(保存・読み込み)
  • リアルタイム検索機能の実装
  • カテゴリ分類とフィルタリングの追加
  • アプリの見た目をプロ品質に仕上げるコツ

対象読者: Rork をこれから使い始める方、または簡単なアプリを作りながら学びたい方

前提知識と環境準備

必要なもの

メモアプリを作り始める前に、以下を準備しましょう。

  • Rork アカウント: rork.com で無料登録(Free プランでも週5回までプロジェクト生成可能)
  • ブラウザ: Chrome または Safari の最新版
  • スマートフォン: 実機でのプレビュー確認用(iOS / Android どちらでも可)

Rork の基本操作

Rork を初めて使う方は、まずRork入門ガイドで基本操作を確認してください。プロジェクト作成からプレビューまでの流れがわかります。

ステップ1 — プロジェクトの作成とプロンプト設計

Rork でアプリを作る際、もっとも重要なのは最初のプロンプトです。AI に的確な指示を出すことで、完成度の高いアプリが一発で生成されます。

おすすめのプロンプト例

Rork のプロジェクト作成画面で、以下のようなプロンプトを入力します。

メモ・ノートアプリを作ってください。
 
【画面構成】
1. メモ一覧画面(ホーム): メモのタイトルと作成日時を一覧表示
2. メモ作成・編集画面: タイトルと本文を入力できるフォーム
3. 検索画面: キーワードでメモを検索
 
【機能要件】
- メモの作成、編集、削除(スワイプ削除対応)
- AsyncStorage によるローカル保存
- タイトル・本文のリアルタイム検索
- カテゴリタグの追加(仕事、プライベート、アイデア、買い物)
- カテゴリでのフィルタリング
- 作成日時の自動記録と並び替え
 
【デザイン】
- ミニマルで洗練されたUI
- ライト / ダークモード対応
- カテゴリごとに色分け表示

このプロンプトのポイントは、画面構成・機能要件・デザインの3つを明確に分けて指示していることです。Rork の AI はこの構造化された情報をもとに、適切なコンポーネントとナビゲーションを自動生成します。

ステップ2 — データモデルとストレージの設計

Rork が生成するコードの中核となるのがデータモデルです。メモアプリでは、以下のような型定義が生成されます。

// types/Note.ts — メモのデータ型定義
export interface Note {
  id: string;          // ユニークID(UUID)
  title: string;       // メモのタイトル
  content: string;     // メモの本文
  category: Category;  // カテゴリ
  createdAt: string;   // 作成日時(ISO 8601形式)
  updatedAt: string;   // 更新日時
}
 
// カテゴリの定義
export type Category = 'work' | 'personal' | 'idea' | 'shopping';
 
// カテゴリの表示名と色
export const CATEGORIES: Record<Category, { label: string; color: string }> = {
  work: { label: '仕事', color: '#4A90D9' },
  personal: { label: 'プライベート', color: '#7ED321' },
  idea: { label: 'アイデア', color: '#F5A623' },
  shopping: { label: '買い物', color: '#D0021B' },
};

AsyncStorage によるデータ永続化

React Native の AsyncStorage を使うことで、アプリを閉じてもメモが消えません。Rork が生成するストレージユーティリティは次のような構造になります。

// utils/storage.ts — メモの保存・読み込み・削除
import AsyncStorage from '@react-native-async-storage/async-storage';
import { Note } from '../types/Note';
 
const STORAGE_KEY = '@notes_app_data';
 
// 全メモを取得
export const loadNotes = async (): Promise<Note[]> => {
  try {
    const json = await AsyncStorage.getItem(STORAGE_KEY);
    return json ? JSON.parse(json) : [];
  } catch (error) {
    console.error('Failed to load notes:', error);
    return [];
  }
};
 
// メモを保存(全件上書き)
export const saveNotes = async (notes: Note[]): Promise<void> => {
  try {
    await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(notes));
  } catch (error) {
    console.error('Failed to save notes:', error);
  }
};
 
// 期待する動作:
// - loadNotes() → 保存済みのメモ配列を返す(初回は空配列)
// - saveNotes([...]) → メモ配列を端末に永続保存

AsyncStorage はキーバリュー型のストレージで、JSON 文字列として保存します。大量のデータ(数万件以上)を扱う場合は SQLite への移行を検討しますが、個人用メモアプリであれば AsyncStorage で十分です。

データの永続化についてさらに詳しく知りたい方は、AsyncStorageとNetInfoでオフライン対応アプリを作るも参考にしてください。

ステップ3 — メモ一覧画面の実装

メモ一覧画面はアプリの顔です。ユーザーが最初に目にする画面なので、見やすさと操作性が重要になります。

// screens/NoteListScreen.tsx — メモ一覧のコア部分
import React, { useState, useEffect, useCallback } from 'react';
import { FlatList, View, Text, TouchableOpacity, Alert } from 'react-native';
import { loadNotes, saveNotes } from '../utils/storage';
import { Note, CATEGORIES } from '../types/Note';
 
export default function NoteListScreen({ navigation }) {
  const [notes, setNotes] = useState<Note[]>([]);
  const [selectedCategory, setSelectedCategory] = useState<string | null>(null);
 
  // アプリ起動時にメモを読み込み
  useEffect(() => {
    const unsubscribe = navigation.addListener('focus', async () => {
      const saved = await loadNotes();
      // 更新日時の新しい順に並べる
      setNotes(saved.sort((a, b) =>
        new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()
      ));
    });
    return unsubscribe;
  }, [navigation]);
 
  // メモの削除
  const deleteNote = useCallback(async (id: string) => {
    Alert.alert('削除確認', 'このメモを削除しますか?', [
      { text: 'キャンセル', style: 'cancel' },
      {
        text: '削除',
        style: 'destructive',
        onPress: async () => {
          const updated = notes.filter(n => n.id !== id);
          setNotes(updated);
          await saveNotes(updated);
        },
      },
    ]);
  }, [notes]);
 
  // カテゴリフィルター適用
  const filteredNotes = selectedCategory
    ? notes.filter(n => n.category === selectedCategory)
    : notes;
 
  return (
    <View style={{ flex: 1, padding: 16 }}>
      {/* カテゴリフィルターボタン */}
      <CategoryFilter
        selected={selectedCategory}
        onSelect={setSelectedCategory}
      />
      {/* メモ一覧 */}
      <FlatList
        data={filteredNotes}
        keyExtractor={(item) => item.id}
        renderItem={({ item }) => (
          <NoteCard
            note={item}
            onPress={() => navigation.navigate('Edit', { noteId: item.id })}
            onDelete={() => deleteNote(item.id)}
          />
        )}
        ListEmptyComponent={
          <Text style={{ textAlign: 'center', marginTop: 40, color: '#999' }}>
            メモがありません。右下の + ボタンで作成しましょう!
          </Text>
        }
      />
    </View>
  );
}

ポイント:FlatList の活用

React Native の FlatList は、大量のリストデータを効率的にレンダリングするコンポーネントです。メモが数百件に増えても、画面に表示されている分だけレンダリングするため、パフォーマンスが落ちません。

ステップ4 — リアルタイム検索機能の追加

メモが増えてくると、検索機能が欠かせません。Rork で生成されるアプリに、キーワード検索を追加する方法を見てみましょう。

// hooks/useNoteSearch.ts — メモ検索カスタムフック
import { useMemo } from 'react';
import { Note } from '../types/Note';
 
export function useNoteSearch(notes: Note[], query: string): Note[] {
  return useMemo(() => {
    if (!query.trim()) return notes;
 
    const lowerQuery = query.toLowerCase();
    return notes.filter(note =>
      note.title.toLowerCase().includes(lowerQuery) ||
      note.content.toLowerCase().includes(lowerQuery)
    );
  }, [notes, query]);
 
  // 期待する動作:
  // useNoteSearch(allNotes, '') → 全メモを返す
  // useNoteSearch(allNotes, '会議') → タイトルまたは本文に「会議」を含むメモのみ返す
}

useMemo を使うことで、メモ一覧や検索クエリが変わったときだけフィルタリング処理が実行されます。キーボード入力のたびに全件スキャンが走らないよう最適化されています。

プロンプトで検索機能を追加するコツ

最初のプロンプトに検索機能を含めなかった場合でも、Rork のチャットで以下のように追加指示を出せます。

メモ一覧画面の上部に検索バーを追加してください。
タイトルと本文の両方を対象にリアルタイム検索できるようにしてください。
検索中はキーボードの上に「○件見つかりました」と表示してください。

ステップ5 — デザインを磨く実践テクニック

メモアプリの見た目をプロ品質に仕上げるポイントをいくつか紹介します。

カテゴリの色分けバッジ

各メモカードにカテゴリバッジを表示すると、一覧画面の視認性が大幅に向上します。

// components/CategoryBadge.tsx — カテゴリバッジコンポーネント
import React from 'react';
import { View, Text } from 'react-native';
import { Category, CATEGORIES } from '../types/Note';
 
export function CategoryBadge({ category }: { category: Category }) {
  const { label, color } = CATEGORIES[category];
  return (
    <View style={{
      backgroundColor: color + '20', // 透明度20%の背景
      paddingHorizontal: 8,
      paddingVertical: 3,
      borderRadius: 12,
      alignSelf: 'flex-start',
    }}>
      <Text style={{ color, fontSize: 12, fontWeight: '600' }}>
        {label}
      </Text>
    </View>
  );
}

ダークモード対応

Rork に「ダークモード対応」を指示すると、useColorScheme フックを使った自動切替が実装されます。追加でカスタマイズしたい場合は、チャットで「ダークモード時の背景色を #1A1A2E にして」のように具体的な色指定をすると反映されます。

まとめ — メモアプリから始めるアプリ開発

メモアプリは構造がシンプルでありながら、データ永続化、検索、フィルタリングといったアプリ開発の基本的なパターンを一通り学べる優れた教材です。

このチュートリアルで実装した主な機能をまとめると、以下の通りです。

  1. データモデル設計 — TypeScript で型安全なデータ構造を定義
  2. AsyncStorage によるデータ永続化 — アプリを閉じてもデータが残る仕組み
  3. FlatList による効率的なリスト表示 — 大量データでもスムーズな描画
  4. リアルタイム検索 — useMemo を使った最適化済みの検索ロジック
  5. カテゴリ分類とフィルタリング — メモを整理しやすいUI

このメモアプリをベースに、Markdown対応やリマインダー機能、クラウド同期などを追加していけば、App Store で公開できるレベルのアプリに仕上がります。まずは Rork でプロジェクトを作成して、自分だけのメモアプリを完成させてみてください。

次のステップとして、はじめてのRorkアプリを30分で作るで Rork の操作に慣れたり、ToDoアプリの作り方でタスク管理機能を学ぶのもおすすめです。

シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Rork 入門2026-03-31
Rork で作る睡眠トラッカーアプリ完全チュートリアル — 就寝・起床時刻の記録から睡眠スコア分析まで
Rork を使って睡眠トラッカーアプリを作る完全チュートリアル。就寝・起床時刻の記録、睡眠スコア計算、グラフ表示まで、初心者でも30分で動くアプリが完成します。
Rork 入門2026-03-27
Rork で作る水分摂取トラッカーアプリ — 記録・リマインダー・グラフ分析の実装チュートリアル
Rork を使って水分摂取トラッカーアプリを作るチュートリアル。ローカル保存、プッシュ通知リマインダー、グラフ表示まで、初心者でも完成できるステップバイステップガイドです。
Rork 入門2026-03-23
Rork でレシピ管理アプリを作る完全チュートリアル — お気に入り・カテゴリ検索・買い物リスト機能付き
Rork AIを使ってレシピ管理アプリを作る初心者向けチュートリアル。お気に入り登録、カテゴリ検索、買い物リスト自動生成まで、プロンプト設計から実装の全手順を解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →