◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SONNET 4.5 — Claude API での提供終了は 11/30、残り36日。API 連携を足したアプリは移行先の確認を●SDK 58 ISSUE — Android ウィジェットが定期更新されない、Stripe が静的リンクになるなど初期報告が出ています●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)●SONNET 4.5 — Claude API での提供終了は 11/30、残り36日。API 連携を足したアプリは移行先の確認を●SDK 58 ISSUE — Android ウィジェットが定期更新されない、Stripe が静的リンクになるなど初期報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/アプリ開発
◇ アプリ開発/2026-06-09上級

壁紙アプリのバイナリサイズを抑える — 画像をバンドルから切り離す設計判断

壁紙アプリのバイナリサイズを抑えるため、画像を同梱からリモート配信へ切り離す設計判断を実測値とともに整理します。カタログ設計、初回表示を遅くしないプレフェッチ、On-Demand Resourcesの検討、フォーマット最適化、CDN運用の注意点まで扱います。

app-size壁紙アプリ28アセット配信3Expo227パフォーマンス33

✦ プレミアム記事

リリース直後の壁紙アプリの IPA は 16MB ほどでした。ところが季節ごとに新しい壁紙を追加していくと、半年後にはバンドルが 90MB を超えていました。App Store のセルラー回線ダウンロード上限(当時 200MB、現在はさらに緩和されていますが)に達するずっと手前で、私は別の問題に気づきました。初回起動が目に見えて遅くなり、ストアの「容量」表示を見たユーザーから「重い」というレビューが付き始めたのです。

壁紙系のアプリを個人で長く運用してきました。現在は壁紙系だけで 6 本を並行運用していますが、そのどれもが「画像を増やしたい」という欲求と「バイナリを軽く保ちたい」という制約の綱引きの上に成り立っています。新しい季節の壁紙を足すたびに、私自身この綱引きと向き合ってきました。ここでは、その綱引きを設計でどう解いたのかを、実際に動かしているコードと前後の数値とともに整理します。

なぜ壁紙アプリだけサイズが急に問題になるのか

一般的な業務アプリなら、画像はアイコンと数枚のイラスト程度です。ところが壁紙アプリは画像そのものが商品です。1 枚の高解像度壁紙(iPhone 15 Pro Max 相当の 1290×2796、Display P3)は、無圧縮なら 10MB を超えることも珍しくありません。これを 100 枚同梱すれば、それだけでバンドルは 1GB に近づきます。

サイズが膨らむと、具体的に三つの場所で痛みが出ます。

ひとつ目はストアのコンバージョンです。App Store の製品ページには容量が表示され、Wi-Fi がない場面ではダウンロードをためらう要因になります。私の計測では、同一アプリでバイナリを 90MB から 28MB に落としたバージョンのインストール完了率(ストア表示 → 完了)が約 14% 改善しました。表示の段階で離脱していた層が一定数いたことになります。

ふたつ目は初回起動です。同梱画像が多いと、アプリの初回展開とメモリ常駐の負荷が上がります。とくに iOS では、アセットカタログに大量の画像を入れるとビルド時間も実行時のメモリも増えます。

三つ目は更新の俊敏さです。壁紙を 5 枚足すたびに審査を通して全ユーザーに数十 MB を再ダウンロードさせるのは、運用として重すぎます。壁紙はコンテンツであって、コードのリリースとは更新のリズムが違うのです。

同梱とリモートの境界をどこに引くか

「全部リモートにすればいい」と言い切れれば楽なのですが、それでは初回起動でグリッドが真っ白になり、体験が崩れます。私は次の 2 軸で境界を引いています。

ひとつは起動体験への寄与度です。初回起動の最初の画面に映るもの(オンボーディング背景、最初のグリッドに見える数枚のサムネイル)は同梱します。ここがネットワーク待ちになると離脱に直結するからです。

もうひとつは更新頻度です。頻繁に差し替える季節コレクションや新作はリモート、ロゴやプレースホルダなど変わらないものは同梱、と分けます。

整理すると、私のアプリでは次の配分にしています。

  • アプリアイコン・スプラッシュ・UI 用アイコン → 同梱(数百 KB)
  • 初回グリッドに見える先頭 6〜8 枚のサムネイルのみ(フル解像度ではない)→ 同梱
  • フル解像度の壁紙、追加コレクション、季節もの → すべてリモート

この方針だけで、同梱されるのはサムネイルと UI 素材に限られ、バイナリは劇的に小さくなります。実アプリでは IPA を 90MB から 28MB へ、約 69% 削減できました。

✦

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

この記事の続きを読む

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

この記事で得られること
✦同梱とリモート配信の境界を、起動体験と更新頻度の2軸で引く具体的な判断基準
✦manifest JSON とプレフェッチで初回表示を維持したまま IPA を 60% 以上削れた実装
✦HEIC/WebP・Display P3・ダウンサンプリングで1枚あたりの転送量を 1/3 にする手順
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◇ アプリ開発2026-08-24
サムネイルの移設は、配信中の版が旧パスを要求し続ける前提で組みました
サーバー側で画像の置き場所を変えても、ストアで配信中の版はビルド時のパス組み立てを持ち続けます。旧新どちらのパスでも 200 を返す双方向フォールバック、画像とカタログの更新順序、CDN を挟んだまま実応答を確かめる手順を、壁紙アプリの運用で使っている形のまま共有します。
◇ アプリ開発2026-08-05
キー短縮で 19% 減らしても配信は 3% しか軽くならない — カタログ JSON の圧縮実測と配置換え
2万件の壁紙カタログJSONで5形式を実測。キー短縮はgzip後3.2%しか効かず、列指向への配置換えは26.8%減。Brotli・ページング・JSON.parse時間まで、配信サイズ設計の判断材料を数値で並べます。
◇ アプリ開発2026-10-22
Stripe を入れた Expo SDK 58 で pod install が止まる — precompiled modules を切るか、直るまで待つかの判断
useFrameworks を dynamic にしているのに Stripe が static と言われて SDK 58 の iOS ビルドが止まる件を、報告された条件と三つの逃げ道、切り分けの点検スクリプトで整理します。