RORK LABEN
RORK MAX — Rork MaxがiPhone・iPad・Apple Watch・Apple TV・Vision Pro向けのネイティブSwiftアプリを生成できるようになりましたPUBLISH — Rork Maxは Xcode不要の「2クリックApp Store公開」に対応。申請・公開までの摩擦を大きく減らしますEXPO — 標準のRorkはReact Native(Expo)ベースで、プレーンな英語の説明からiOS/Androidネイティブアプリを生成しますPRICING — Rorkは無料で始められ、有料プランは月額$25から。個人開発で試しやすい価格帯ですFUNDING — Rorkがa16z(Andreessen Horowitz)から$2.8Mを調達。AIアプリビルダー領域への資金流入が続いていますREVIEW — 実運用では生成コードの可読性・保守性、Expo由来の制約、課金・プッシュ・広告SDKの組み込みやすさが評価の鍵になりますRORK MAX — Rork MaxがiPhone・iPad・Apple Watch・Apple TV・Vision Pro向けのネイティブSwiftアプリを生成できるようになりましたPUBLISH — Rork Maxは Xcode不要の「2クリックApp Store公開」に対応。申請・公開までの摩擦を大きく減らしますEXPO — 標準のRorkはReact Native(Expo)ベースで、プレーンな英語の説明からiOS/Androidネイティブアプリを生成しますPRICING — Rorkは無料で始められ、有料プランは月額$25から。個人開発で試しやすい価格帯ですFUNDING — Rorkがa16z(Andreessen Horowitz)から$2.8Mを調達。AIアプリビルダー領域への資金流入が続いていますREVIEW — 実運用では生成コードの可読性・保守性、Expo由来の制約、課金・プッシュ・広告SDKの組み込みやすさが評価の鍵になります
記事一覧/開発ツール
開発ツール/2026-06-15上級

Rork 製アプリのウィジェットにタップで動くボタンを置く — App Intents で「アプリを開かない操作」を実装する

Rork が生成する Expo アプリのウィジェットに、タップしてもアプリを開かずに状態を変えるボタンを置く方法です。App Intents と WidgetKit を App Group で結び、reloadTimelines まで往復させる実装を、詰まった2か所も含めて手順で整理します。

Rork405App Intents5WidgetKit6Expo77iOS78

プレミアム記事

ある朝、習慣トラッカーのウィジェットを眺めていて、ふと手が止まりました。チェックを付けるためだけにアプリを開き、ロード画面を待ち、該当の項目までスクロールする。たった1タップの記録に、5秒近くかかっています。ウィジェットの上で直接チェックできれば、この5秒はゼロになるはずでした。

iOS 17 以降、ウィジェットの中のボタンはアプリを起動せずに処理を実行できます。仕組みとしては知っていました。けれど Rork が生成する Expo ベースのアプリでこれを成立させるのは、想像よりずっと骨が折れました。React Native の世界とウィジェットの世界は、別のプロセスで、別の言語で動いているからです。

ここでは「ウィジェットのボタンをタップ→アプリを開かずに状態を更新→ウィジェットの見た目も即座に変わる」という往復を、Rork 製アプリで通すまでの手順を整理します。詰まった2か所も具体的に残しておきます。

なぜ「ボタンを追加して」では動かないのか

まず構造を押さえておきます。ホーム画面のウィジェットは、アプリ本体とは別の App Extension(拡張ターゲット)として動きます。この拡張プロセスの中には JavaScript エンジンが存在しません。つまり React Native のコードは1行も走りません。Rork のチャットに「ウィジェットにボタンを付けて」と頼んでも、返ってくるのはアプリ内画面のボタンであって、ホーム画面で完結するボタンにはならない理由がここにあります。

ウィジェット内のボタンが「アプリを開かずに」動くためには、3つの部品を自分で用意して噛み合わせる必要があります。

ひとつ目は App IntentButton(intent:) に渡せる、システムが裏側で実行してくれる処理単位です。ふたつ目は App Group。アプリ本体と拡張ターゲットが同じデータを読み書きするための共有領域です。みっつ目は タイムラインの再読み込み。Intent が状態を変えたあと、ウィジェットの絵を描き直させる引き金です。

Rork(標準版・Expo ベース)はこのうち1つも自動では用意しません。Rork Max(Swift ネイティブ生成)であれば WidgetKit 拡張ごと生成できますが、すでに Expo で公開済みのアプリに後付けする場合は、ここで述べる config plugin ルートが現実的です。

App Group を最初に通しておく

順序が大切です。ボタンの実装より先に、アプリ本体と拡張が同じデータを見られる状態を作ります。ここが通っていないと、あとで「ボタンは反応しているのに見た目が変わらない」という、原因の切り分けが難しいバグに化けます。

App Group の識別子を決めます(例: group.net.rorklab.habit)。Apple Developer のターゲット設定で、アプリ本体と拡張ターゲットの両方に同じ App Group を有効化します。Expo では app.json の entitlements に追記します。

{
  "expo": {
    "ios": {
      "entitlements": {
        "com.apple.security.application-groups": [
          "group.net.rorklab.habit"
        ]
      }
    }
  }
}

React Native 側からこの共有領域に書き込むには、UserDefaults(suiteName:) を叩くネイティブモジュールが必要です。expo-shared-defaults のようなライブラリ、あるいは config plugin から薄いブリッジを足します。最小の Swift ブリッジはこうなります。

import Foundation
 
@objc(SharedDefaults)
class SharedDefaults: NSObject {
  static let suite = UserDefaults(suiteName: "group.net.rorklab.habit")
 
  @objc func setBool(_ value: Bool, key: String) {
    SharedDefaults.suite?.set(value, forKey: key)
  }
 
  @objc func getBool(_ key: String, resolver resolve: RCTPromiseResolveBlock,
                     rejecter reject: RCTPromiseRejectBlock) {
    resolve(SharedDefaults.suite?.bool(forKey: key) ?? false)
  }
}

これで「JS から書いた値をウィジェット拡張が読める」「拡張が書いた値を JS が読める」という双方向の土台ができます。最初にこれを単純な真偽値で往復確認しておくと、後段が一気に楽になります。

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

この記事の続きを読む

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

この記事で得られること
ウィジェット内のボタンがアプリを起動せずに動く仕組み(AppIntent と perform の往復)を、動くSwiftコードで把握できます
Expo 製 Rork アプリと拡張ターゲットを App Group で結び、書き戻し→reloadTimelines→再描画まで通す手順がわかります
私が実際に2時間溶かした「ボタンが反応しない」「状態が巻き戻る」2つの落とし穴と、その回避策を持ち帰れます
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-12
Rork 製アプリにホーム画面ウィジェットを追加する — Expo の制約を越えて WidgetKit を動かすまで
Rork が生成する Expo アプリにはホーム画面ウィジェットを直接追加できません。config plugin と App Group を使って WidgetKit を組み込む実装ルートを、詰まった点も含めて手順で整理します。
開発ツール2026-04-23
Rork アプリに Siri と Shortcuts を統合する — App Intents の Expo 実装と失敗しない設計
Rork で作った React Native アプリに Siri Shortcuts と App Intents を組み込む実装ガイド。Expo Config Plugin で native モジュールをブリッジし、AppShortcut・Entity Query・Donations・Control Center ウィジェットまで本番運用を見据えて解説します。
開発ツール2026-06-14
アプリを開かなくても更新される、を Expo で実際に届ける — Background Task の現実的な設計
Rork が生成する Expo アプリで『毎朝コンテンツが更新される』体験を作ろうとすると、iOS のバックグラウンド実行は思ったほど律儀に動きません。expo-background-task の最小実装と、実行されない前提で破綻しない設計をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →