◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-05-18上級

Rork で作った iOS アプリを iPhone Air と 17 Pro シリーズに対応させる — 2026年の解像度ごとのレイアウト調整パターン

iPhone Air・17 Pro・17 Pro Max の新解像度で既存 Rork アプリのレイアウトが崩れる問題を、4本の iOS アプリを並行更新した経験から解説。解像度定数管理・Safe Area・壁紙フルスクリーン表示の具体的な実装パターンを示します。

iOS115iPhone AiriPhone 17 Pro解像度Rork585SafeArea3個人開発218壁紙アプリ28

✦ プレミアム記事

Beautiful HD Wallpapers を最新の iPhone Air で開いたとき、ホーム画面設定プレビューの壁紙が微妙にはみ出していることに気づきました。「また解像度が増えたか」と思いながらシミュレーターを立ち上げると、いくつかの画面でレイアウトがずれていました。

個人開発で並行して面倒を見ているのは4本です——Beautiful HD Wallpapers、Ukiyo-e Wallpapers、Relaxing Healing、Law of Attraction Everyday。新機種が出るたびに解像度の確認が入るのは織り込み済みでしたが、2026年は iPhone Air という新しいフォームファクターが加わり、確認すべき組み合わせが一段増えました。

厄介なのは、崩れ方が派手ではないことです。クラッシュしてくれれば気づけます。数ポイントのはみ出しは、指摘されるまで静かに残ります。

Rork で iOS アプリを開発していると、AI がレイアウトのコードを生成してくれます。ただ「新しい解像度で動かしたら崩れた」という問題は、結局自分で手直しするしかない部分です。4本のアプリを同時に対応した実体験をもとに、Rork プロジェクトでの解像度管理パターンを整理します。

2026年の iPhone 解像度マトリクスを整理する

対応を始める前に、現時点で流通している主要な iPhone の解像度(ポイント単位)を把握しておく必要があります。

混乱しやすいのが「ピクセル」と「ポイント」の違いです。iOS の UI レイアウトはポイント(pt)で計算されます。Retina ディスプレイでは 1pt = 2px または 3px になりますが、Rork(React Native)でのレイアウトコードで扱うのはすべてポイントです。デザイナーが Figma で作業するときも、基本的にはポイント単位で考えると混乱が減ります。

2026年時点での主要 iPhone のポイント解像度をまとめると、以下のようになります。

  • iPhone Air(2026): 幅 420pt × 高さ 912pt(3x Retina)
  • iPhone 17 Pro: 幅 402pt × 高さ 874pt(3x Retina)
  • iPhone 17 Pro Max / 16 Pro Max: 幅 440pt × 高さ 956pt(3x Retina)
  • iPhone 17 / 16: 幅 393pt × 高さ 852pt(3x Retina)
  • iPhone 15 / 旧世代標準モデル: 幅 393pt × 高さ 852pt(3x Retina)
  • iPhone 15 Plus: 幅 430pt × 高さ 932pt(3x Retina)

iPhone Air の幅 420pt に注目してください。従来の Plus/Max 系(430pt)よりも狭く、標準モデル(393pt)よりも広い、これまでなかった中間サイズです。width > 400 ? 'large' : 'standard' のようなブレークポイント設計を使っていた場合、iPhone Air は 'large' に分類されますが実際は Pro Max よりずっと狭い。この不整合がレイアウト崩れの根本原因になります。

Apple が新しいフォームファクターを追加する理由の一つは、ユーザー層の多様化への対応です。iPhone Air は薄くて軽いことを特徴にしており、より大きな画面を求めながらも Pro Max の重さを避けたいユーザー向けに設計されています。開発者の立場からは、またひとつ「対応すべきサイズ」が増えた、という現実があります。しかし見方を変えると、iPhone Air ユーザーはアプリの見た目に敏感な層である可能性が高く、解像度対応のクオリティがそのまま評価につながりやすいとも言えます。

高さ方向の差異も重要です。iPhone 17 Pro(874pt)は標準モデル(852pt)より 22pt 高く、Pro Max(956pt)はさらに 82pt 高い。フルスクリーン表示前提のアプリでは、この差がそのまま画像の見切れや余白として現れます。壁紙アプリを作っていると、この 22pt がとても大きく感じられます。

Rork プロジェクトで解像度情報を取得する

Rork は内部的に React Native(Expo)を使っているため、解像度の取得には React Native 標準の API を利用します。最も基本的な方法は useWindowDimensions フックです。

import { useWindowDimensions } from 'react-native';
 
const WallpaperViewer: React.FC = () => {
  const { width, height } = useWindowDimensions();
 
  return (
    <View style={{ width, height, position: 'absolute', top: 0, left: 0 }}>
      {/* フルスクリーンコンテンツ */}
    </View>
  );
};

useWindowDimensions はアプリが回転したときに値が変わります。壁紙アプリのようにポートレート固定で動作するアプリでは問題になりませんが、横向き表示もサポートする場合は注意が必要です。起動時の一度きりの取得で十分であれば、Dimensions.get('window') を使う方が余分な再レンダリングを避けられます。

import { Dimensions } from 'react-native';
 
// アプリ起動時に一度だけ取得する(ポートレート固定アプリ向け)
const SCREEN_WIDTH = Dimensions.get('window').width;
const SCREEN_HEIGHT = Dimensions.get('window').height;

私が4本のアプリで採用しているのは後者の方法です。壁紙アプリの性質上、ポートレート固定で動作するため、起動時の取得で十分対応できています。また、モジュールレベルで定数化することで、コンポーネント内でのフック呼び出しが不要になり、コードがシンプルになります。

✦

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

この記事の続きを読む

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

この記事で得られること
✦iPhone Air / 17 Pro / 17 Pro Max の各解像度で Rork アプリのレイアウトが崩れる原因を理解し、今日から修正に着手できる
✦壁紙アプリ・フルスクリーン表示アプリ特有のアスペクト比問題と Safe Area 対応の実装コードを手に入れられる
✦4本のアプリを同時に新解像度へ寄せるときの定数同期スクリプトと、実機とシミュレーターの確認分担をそのまま流用できる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-09-21
exit code 0 で止まるビルド — ログを黙らせていた設定と、空ファイルを通した存在チェック
eas build --local が exit code 0 but produced no further output で止まる件と、0 バイトのスタブが埋め込まれず dyld で落ちる件。どちらも原因は出力を減らす設定でした。自分のスクリプトを棚卸しする手順まで書き残します。
⬡ 開発ツール2026-09-19
Rork が書き換えた箇所だけを読む — 再エクスポートのたびに回している差分確認の手順
再エクスポートしたコードを前回との差分として読むための手順です。追跡ファイルを一度消してから重ねる、雑音を外して数える、合流の前に一度止める——この3つで上書き事故を止めています。
⬡ 開発ツール2026-09-05
Widget Extension でも BGTaskScheduler.submit は成功します。走らないのは register が親アプリだけのものだからです
Widget Extension から BGTaskScheduler に依頼を出すとビルドも submit も通るのに、翌朝ウィジェットは変わりません。register がホストアプリ専用である事実から、更新の主語を親アプリへ戻す設計まで、壁紙アプリの運用で詰めた手順を残します。