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が参加しました
記事一覧/開発ツール
開発ツール/2026-05-03上級

Rork アプリの Sign in with Apple を、サーバー検証とアカウント削除まで本気で実装するガイド

Rork で作ったアプリに Sign in with Apple をクライアントだけで載せて満足してしまうと、審査で確実に詰まります。ID トークンの公開鍵検証から nonce の扱い、必須となったアカウント削除フロー、Apple への revoke 通知までを、現場で動かしている構成のまま全部書きます。

Sign in with Apple2認証14JWT2App Store審査8Cloudflare Workers24

プレミアム記事

「Sign in with Apple をボタンだけ置いてリリースしたら、Apple からのレビュー結果がリジェクトだった」— Rork で個人開発をしていると、この経験は意外なほど高頻度で発生します。私も最初の 1 本目はこれで 2 回連続リジェクトされ、3 回目でようやく通したクチです。レビュアーから返ってくるメッセージは妙に淡白で、何が足りないのか自分で全部組み立てて推測するしかありません。

このガイドは、そのときに「最初からこれが分かっていれば良かった」と感じたことを、Rork のコード生成と相性の良い形で全部まとめ直したものです。具体的には、expo-apple-authentication でクライアント側を組み立てつつ、Cloudflare Workers で ID トークンの JWS 検証・nonce 検証・アカウント削除(revoke_token 通知込み)まで一気通貫で実装します。Sign in with Google や Sign in with Twitter など他の認証を入れている場合の「Apple ID も併設しないとリジェクトされる」というルールにも触れます。

なぜ「ボタンを置いただけ」では絶対に通らないのか

Sign in with Apple は単なる OAuth プロバイダではありません。Apple は App Store ガイドラインの 4.85.1.1(v) で、Sign in with Apple をどう実装するべきかをかなり細かく規定しています。私が痛い目を見たポイントを先に並べておきます。

  • ガイドライン 4.8: アプリで第三者の認証サービス(Google・Facebook・Twitter 等)を使っている場合、Sign in with Apple を「同等の選択肢として」必ず提供しなければなりません。「同等」には UI 上の見せ方も含まれます。Apple のボタンを下の方に小さく置く、はリジェクト対象です
  • ガイドライン 5.1.1(v): アカウント作成機能があるアプリは、ユーザーがアプリ内から自分のアカウントを削除できる導線を持たなければなりません。これは 2022 年 6 月から完全必須になりました。設定画面のどこかから 2〜3 タップで到達できる必要があります
  • Apple Developer Documentation の地味な脚注: ID トークン (identityToken) を取得したら、サーバー側で Apple の公開鍵を使って JWS 署名を検証することが「必須」と書かれています。クライアントが受け取った email を信用してそのまま DB に書き込む実装は、この時点で本番品質ではありません

逆に言えば、この 3 点を満たして実装すれば、Sign in with Apple 起因のリジェクトはほぼゼロになります。本記事はその 3 点を全部「動くコード」で示します。

全体像 — クライアント取得・サーバー検証・削除フローの 4 層

実装に入る前に、各層が何を担当するかを揃えておきます。これが頭に入っていないと、後でデバッグするときに「どの層で何が壊れているのか分からない」という地獄が始まります。

  • 層 1: ユーザー操作層(Rork で生成した React Native 画面): Sign in with Apple ボタンを表示し、AppleAuthentication.signInAsync() を呼び、identityTokenauthorizationCode を取得します
  • 層 2: クライアント側の前処理層: nonce を生成して SHA-256 でハッシュし、hashedNonce をリクエストに含めます。ユーザーから受け取った情報をそのまま信用せず、必ずサーバー側に投げます
  • 層 3: サーバー検証層(Cloudflare Workers + Hono): Apple の JWKs エンドポイントから公開鍵を取得して JWT 署名を検証、audissnonce・有効期限・sub を確認した上で、自前のセッショントークンを発行します
  • 層 4: 削除フロー層: ユーザーがアプリ内で「アカウント削除」を押したとき、ローカルの DB から該当ユーザーを消すだけでなく、Apple に対して revoke_token API を叩いて認証連携を解除します。これを忘れると、ユーザーは「設定 → Apple ID → サインインに使用中の App」に幽霊アカウントが残り続けます

これら 4 層を順番に実装していきます。サーバー側は Cloudflare Workers を例にしますが、Vercel Edge Functions や AWS Lambda でも同じ考え方で組めます。

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

この記事の続きを読む

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

この記事で得られること
「とりあえず Sign in with Apple ボタンを置いただけ」で審査リジェクトを繰り返していた人が、サーバー側の ID トークン検証まで含めた本番品質の実装を今日手に入れられる
Apple の公開鍵を取得してきて JWT を検証する、nonce を hashed nonce として渡す、メールアドレスが初回しか取れない罠を回避する、といった実装の急所を動くコードで習得できる
2022 年から App Store ガイドライン 5.1.1(v) で必須になったアカウント削除フローを、Apple への revoke_token 通知まで含めて完成形で実装し、リジェクトのリスクを根本から消せる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-04-24
Rork アプリに Sign in with Apple を組み込む手順 — 審査で求められる実装とよくある詰まりどころ
Rork で作ったアプリに Apple ID サインインを後付けする手順をまとめました。Google/Facebook ログインを入れた途端に審査で指摘される Guideline 4.8 の要件、expo-apple-authentication の落とし穴、Android・Web での代替フローまで、実装に詰まった時に参照できる形で整理しています。
開発ツール2026-07-11
StoreKit 2 の署名付きトランザクションを Cloudflare Worker で検証する
端末が申告した課金状態をそのまま信じると、改ざんされたエンタイトルメントを通してしまいます。StoreKit 2 の署名付きトランザクション(JWS)を Cloudflare Worker 側で検証し、端末を信用せずに権利を付与する設計と実装を、動くコードとともに整理します。
開発ツール2026-07-03
App Store Connect API の日次集計が月末に合わなくなるとき — JWT 失効・レポート確定遅延・突合の運用メモ
App Store Connect API で自動化した売上・レビュー収集は、止まらずに「欠け」ます。401/404/429 が生む3種類の静かな欠損を fetch ログと突合クエリで検出し、バックフィルで埋める運用設計を実装コード付きでまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →