RORK LABEN
ENGINE — Rork MaxはClaude CodeとClaude Opus 4.6を基盤に、ネイティブSwiftアプリを直接生成しますCORE ML — Rork MaxからCore MLの端末内推論・HealthKit・HomeKit・NFC・App Clipsといった機能に手が届きますSEED — Rorkは2026年4月にLeft Lane Capital主導で$15Mのシードを調達し、Peak XVやa16z Speedrunが参加しましたM&A — Rorkはアプリビルダー Paperline を買収し、エンジニアリング人材の獲得を目的に買収を継続する方針ですMARKET — Gartnerは2026年末までに新規アプリの75%がローコードまたはノーコードで作られると予測していますGROWTH — ノーコードAI市場は2024年の$4.9Bから2029年に$24.8Bへ、年38.2%の成長が見込まれていますENGINE — Rork MaxはClaude CodeとClaude Opus 4.6を基盤に、ネイティブSwiftアプリを直接生成しますCORE ML — Rork MaxからCore MLの端末内推論・HealthKit・HomeKit・NFC・App Clipsといった機能に手が届きますSEED — Rorkは2026年4月にLeft Lane Capital主導で$15Mのシードを調達し、Peak XVやa16z Speedrunが参加しましたM&A — Rorkはアプリビルダー Paperline を買収し、エンジニアリング人材の獲得を目的に買収を継続する方針ですMARKET — Gartnerは2026年末までに新規アプリの75%がローコードまたはノーコードで作られると予測していますGROWTH — ノーコードAI市場は2024年の$4.9Bから2029年に$24.8Bへ、年38.2%の成長が見込まれています
記事一覧/開発ツール
開発ツール/2026-06-28上級

設定画面を1枚のスキーマから組み立て、複数アプリで使い回す

設定画面をアプリごとに手作業で作ると、運用するアプリが増えるほど破綻します。宣言的なスキーマから画面を組み立て、複数アプリで共通の土台を共有する設計を、動くコードとともに整理します。

Rork498Expo139設計6設定画面2個人開発179

プレミアム記事

設定画面は、アプリを1本だけ運用しているうちは何も問題になりません。トグルを足し、行を足し、画面に直接書いていけば動きます。困りはじめるのは、よく似たアプリが2本目、3本目と増えたときです。私自身、壁紙や癒し系の小さなアプリを個人開発で並行運用していますが、ある時期「同じ設定行を別々の画面に何度も書き写している」ことに気づきました。テーマ切り替え、通知のオン・オフ、キャッシュ削除——どのアプリにもある行を、アプリの数だけ別実装で抱えていたのです。

行が画面に直接書かれていると、変更は常に「アプリの本数 × 修正箇所」になります。通知設定の文言を一語変えるだけで、6か所を開いて回ることになる。これは作業量の問題というより、抜け漏れが生まれる構造の問題です。

ここで取り上げるのは、設定画面を「データ(スキーマ)」と「描画(レンダラ)」に分け、データを複数アプリで共有する設計です。Rork で生成した Expo アプリにそのまま載せられる形で書いていきます。

何を画面から剥がすのか

設定画面が抱えている責務を分解すると、おおよそ次の4つに分かれます。

責務どこに置くべきか
項目の定義「ダークモード」というトグルが存在するスキーマ(共有)
値の保存true/false を端末に永続化するストア(共有)
見た目行・スイッチ・区切り線の描画レンダラ(共有)
固有の振る舞い「Pro 解除」行はこのアプリだけアプリ側の差分

最初の3つは、どのアプリでもほとんど同じです。違うのは4番目だけ。だからこそ、共有できる3つを徹底的に共有し、4番目を「差分」として小さく足せる構造にすると、運用がとても軽くなります。

スキーマを型で定義する

まず設定項目を表す型を決めます。ここが設計の背骨になります。画面ではなく、この型に責務を集めていきます。

// settings/schema.ts
export type SettingKind = "toggle" | "select" | "action" | "link";
 
export type SettingItem = {
  key: string;            // 永続化キー。アプリ間で衝突させない
  kind: SettingKind;
  titleKey: string;       // i18n キー。生文字列は持たない
  // toggle / select 用のデフォルト値
  defaultValue?: boolean | string;
  // select の選択肢
  options?: { value: string; labelKey: string }[];
  // action / link の実行内容
  onPress?: () => void | Promise<void>;
  // 表示条件。満たさなければ行ごと消える
  visible?: (ctx: SettingsContext) => boolean;
};
 
export type SettingSection = {
  titleKey: string;
  items: SettingItem[];
};
 
export type SettingsContext = {
  isPro: boolean;
  platform: "ios" | "android";
};

ポイントは3つあります。titleKey を生文字列ではなく i18n キーにしておくこと。visible を関数にして「Pro 会員のときだけ出す」のような条件を宣言的に書けるようにすること。そして onPress 以外に振る舞いを持たせないこと。スキーマはあくまで「何があるか」を語る場所で、「どう描くか」は持たせません。

段階的に導入する手順

既存アプリにいきなり全面導入すると差分が大きくなりすぎます。私の場合は次の順で少しずつ移しました。

  1. テーマ・通知・キャッシュ削除という「どのアプリにもある3行」だけをスキーマ化し、共有ファイルに置きます。
  2. 1本のアプリでレンダラに差し替え、見た目が以前と一致するかをスクリーンショット比較で確認します。
  3. 問題がなければ残りのアプリへ共有ファイルを参照させ、固有行だけを各アプリで足します。

この3ステップなら、途中で止めても既存の画面が壊れません。一度に全部やろうとしないことが、移行を本番運用のまま進めるコツです。

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

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
設定項目を宣言的スキーマとして1か所に集約し、UIは自動生成に任せる構造
アプリ間で共有する土台と、アプリ固有の差分を分離する境界の引き方
永続化・バリデーション・並び替えをスキーマ側に寄せる実装パターン
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

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

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

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

関連記事

開発ツール2026-07-04
「続きを読む」を出すべきか、テキストの実測で決める — Rork(Expo)の折りたたみ表示設計
商品説明やレビュー本文を3行で畳み「続きを読む」を出す実装で、短い文にまでトグルが付いてしまう問題を解決します。onTextLayout で実際の行数を測り、はみ出す時だけトグルを出す設計を、iOS と Android の差、展開アニメーション、文字サイズ拡大への配慮まで動くコードでまとめます。
開発ツール2026-06-30
Rork アプリにホーム画面長押しのクイックアクションを足す — 動的項目とコールド起動の取りこぼしを防ぐ
アイコン長押しで出るクイックアクションを Rork(Expo)アプリに実装する設計です。静的・動的項目の使い分け、iOS と Android の差、そしてコールド起動でアクションがルーター準備前に届いて取りこぼす問題を、保留と再生で防ぐ実装手順までまとめます。
開発ツール2026-06-28
EAS Update を少人数から配り、クラッシュ率で自動的に止める
OTA 更新は一瞬で全員に届くからこそ、悪い更新も一瞬で全員に届きます。EAS Update を少人数(カナリア)から配り、クラッシュ率を見て広げるか止めるかを自動で判断し、最後は端末側で安全網を張る設計を、動くコードでまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →