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-01中級

Rork 製アプリで iOS 18 のダーク/ティントアイコンと Android のテーマアイコンに対応する

Rork で生成したアプリに iOS 18 のダーク/ティント表示と Android 13 以降のテーマアイコンを実装する手順。素材の作り方、Expo 設定、差し替え時のキャッシュ問題、ストア審査での見え方まで、実機で確認しながら整理しました。

Rork515App Icon2iOS 185Android 13Expo149テーマアイコンReact Native209

ホーム画面をダークモードに切り替えたとき、自分のアプリのアイコンだけが妙に主張して浮いて見える。iPhone の壁紙をモノクロにしたとき、システムアプリは薄い色味で馴染んでいるのに自分のアプリだけ原色で残ってしまう。私が運営している壁紙系アプリで実際にこの違和感に気づいたのは、ユーザーから「ダークモードでアイコンが眩しい」というメールをもらったときでした。

iOS 18 のダーク/ティント表示と Android 13 以降のテーマアイコンに対応すると、こうした「自分のアプリだけ浮いてしまう」状態が解消されます。Rork で生成したアプリでもこの対応は十分実用範囲で、必要なのはアイコン画像を数枚追加することと、app.json を 10 行ほど書き換えることだけです。

ここでは私が複数のアプリで実際に対応した手順をそのまま辿る形で書いています。素材の作り方から Expo 設定、差し替え後のキャッシュ問題、ストア審査での見え方まで一通りカバーします。

「対応する/しない」で何が変わるか

iOS 18 と Android 13 以降では、ホーム画面のアイコンが次の 3 種類に増えました。

  • ライト: 従来通りのフルカラーアイコン
  • ダーク: 暗い背景でも見やすいよう、明度・彩度を抑えたバリエーション
  • ティント(iOS)/テーマ(Android): ユーザーが選んだ単色に染まるモノクロ版

ユーザーが「外観」設定でダーク/ティントを選んでいるとき、未対応のアプリは「ライト用アイコンに自動的にダークオーバーレイをかぶせた見た目」で表示されます。これは多くのアプリで悪くない結果になりますが、明るい背景を前提にデザインしたロゴほど不自然になりやすく、特に白地に細いグラフィックを配置したアイコンはオーバーレイで埋もれます。

私のアプリでは、対応前と対応後で App Store のスクリーンショットセクションに「ダークモード対応」を載せたところ、レビューで「アイコンの見た目が綺麗」「他のアプリと馴染む」というコメントを複数いただきました。直接的な売上効果は測りづらいものの、初回の印象を整えるという意味では費用対効果がかなり高い対応だと感じています。

素材の準備 — 3 枚のアイコンに必要な仕様

iOS 18 と Android 13 以降の双方に対応する場合、最終的に用意するのは次の 3 枚です。

  • iOS Light: 1024×1024 PNG、フルカラー、不透明背景
  • iOS Dark: 1024×1024 PNG、フルカラー、不透明背景。ライトを単純反転するのではなく、暗い壁紙でも視認できるように再調整したもの
  • iOS Tinted / Android Monochrome: 1024×1024 PNG、モノクロ(グレースケール+アルファチャンネル)、背景は透過

ティント/モノクロ版の作り方が一番つまずきやすいので、ここだけ補足します。Apple のガイドラインは「白地のシルエットを濃淡で表現する」と明示しており、色を持たせず、明るさだけで形を作るのがコツです。実際に私が使っているのは次の手順です。

  1. ライトアイコンの主要グラフィックだけをグレースケール化する
  2. 全体を白〜中間グレーに置き換え(黒は使わない)
  3. 不要な背景は完全に透過させる
  4. Apple のプレビューツールでティント色を試して、視認性を確認する

ロゴが繊細なグラデーションを使っている場合、ティント変換でディテールが潰れがちです。私のアプリではこのタイミングで「ティント版だけ少しだけ太字にする」という調整を入れました。アイコンデザインの基準を整理した記事として AI で App Store/Google Play 審査に通るアイコンを作る も合わせて読むとイメージしやすいと思います。

Rork プロジェクトの app.json を更新する

Rork が生成するプロジェクトは Expo 管理(managed workflow)が前提になっているため、ネイティブの Asset Catalog を直接いじる必要はなく、app.json(または app.config.js)で完結します。Expo SDK 52 以降であれば、次のような設定で 3 枚のアイコンを認識させられます。

{
  "expo": {
    "name": "MyRorkApp",
    "icon": "./assets/icons/icon-light.png",
    "ios": {
      "icon": {
        "light": "./assets/icons/icon-light.png",
        "dark": "./assets/icons/icon-dark.png",
        "tinted": "./assets/icons/icon-tinted.png"
      },
      "supportsTablet": true
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/icons/icon-light.png",
        "monochromeImage": "./assets/icons/icon-monochrome.png",
        "backgroundColor": "#FFFFFF"
      }
    }
  }
}

ポイントは 2 つあります。1 つは iOS の icon フィールドを文字列ではなくオブジェクト形式で書くこと。古い書き方(icon: ./assets/icon.png)のままだとライト版しか取り込まれません。もう 1 つは Android の monochromeImage を必ず別ファイルにすることforegroundImage を流用するとテーマアイコン表示時に色が反転して読めなくなるパターンに何度かハマりました。

設定後、npx expo prebuild --clean でネイティブプロジェクトを再生成し、EAS Build か Rork のビルドメニューから新しいバイナリを作ります。OTA だけでは反映されないので、必ずストアバイナリを更新する点に注意してください。

OTA まわりの基礎知識は Rork × EAS Update で OTA アップデートを配信する にまとめてあるので、配信戦略を整理したい方はそちらも参照してください。

動作確認とよくあるつまずき

実機での確認手順は次の通りです。

  • iOS 18 端末: 設定 → ホーム画面とアプリライブラリ → ライト/ダーク/ティント を切り替え、各モードでアイコンの見え方を確認する
  • Android 13 以降の端末: 長押しでアイコンを選択 → 「テーマアイコン」をオン → 壁紙の色を変えて視認性を確認する
  • シミュレータ: iOS Simulator は 17.4 以降のみダーク/ティント対応。古いシミュレータでは確認できない

差し替え後にアイコンが古いまま表示される場合の典型は、iOS デバイスに残った旧バイナリのキャッシュです。アプリを削除して再インストールするだけでは更新されないこともあり、私は最終的に「端末を再起動」で解決することが多いです。同種の問題は Rork のアプリアイコンが反映されないキャッシュ問題の修正手順 でも詳しく扱っています。

App Store Connect 側では、ビルドアップロード時に「Light」「Dark」「Tinted」の各バリエーションが自動的に検出されます。プレビュー画面で 3 枚並んで表示されていれば成功で、検出されない場合はほぼ確実に 画像サイズが 1024×1024 になっていない か、iOS Tinted のアルファチャンネルが残っていないかのどちらかです。

ダークモード対応全般のテクニックは Rork Max のダークモード/カラーテーマ実装ガイド でアプリ UI 側の話を扱っているので、アイコンと UI を同時に整えたい方はセットで参照すると効率的です。

アセット生成を少しだけ自動化する

3 つ目のアプリで同じ作業を繰り返したあたりで、sharp を使った簡単な Node.js スクリプトに切り出しました。ライト版を入力にして、トーンカーブとわずかな背景調整でダーク版を出力し、グレースケール化と背景透過でティント版を出力する、というだけの内容です。完全に自動化できるわけではなく、最終的な目視チェックは必ず必要ですが、「Photoshop を開いて 3 回書き出す」状態から「スクリプト 1 本を回して、ティント版だけ微調整する」状態に変わって、1 アプリあたりの所要時間が 20 分から 5 分くらいに縮みました。

公開アプリが年に 2〜3 本以上のペースなら、このタイプの自動化は早めに整えておく価値があります。同じスクリプトで assets/icons/ 以下の正しいパスに直接書き出してしまえば、ファイル名の typo でビルドが崩れる事故も減らせます。Rork で運用する場合、マスター画像を Rork が参照する場所と同じ位置に置いておけば、ブランドマークの変更時に Rork 側を触らずに 3 種類を更新できるのがありがたいところです。

さらに踏み込んで学びたい方へ

Expo 管理ワークフローでネイティブ機能を扱う際の考え方が体系的にまとまっており、Rork が裏側で何をしているのかを理解する助けになりました。

次の一歩

themed icon の対応は、コードを書くわけではないので「面倒だが効果は出る作業」の代表格です。すでに公開しているアプリがあるなら、まずはダークアイコン 1 枚だけでも作って次回のリリースに混ぜてみるのが個人的にはおすすめです。ライト版に画像処理を 10 分加えるだけで作れる場合が多く、ユーザーの初見の印象が一段引き締まります。

Rork で新規に作るアプリでも、初回ビルド前に 3 枚揃えておけば、あとから差し替えてキャッシュに振り回される手間を避けられます。アイコンはアプリの第一印象を 1 秒で決める要素なので、最初に少し時間を投資する価値は十分にあります。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

開発ツール2026-07-15
「、」が行頭に落ちた — Rork が組んだ名言カードと日本語の禁則処理
React Native の Text は日本語の行頭禁則を保証しません。実測した違反率、WORD JOINER による事前結合の実装、onTextLayout での自動監査、Rork Max(SwiftUI)との挙動差までまとめました。
開発ツール2026-07-10
React Compiler を Expo に入れて、手書き memo を 41 箇所消しました
Rork が生成した React Native 画面に React Compiler を導入し、再レンダリング回数を Profiler で実測しました。手書き memo/useCallback の削除判断、効かない箇所の見分け方、CI での回帰検知までをまとめています。
開発ツール2026-07-07
アイコンのバッジが「3」のまま消えない — Expoアプリのバッジ数をSource of Truthで作り直す
Expoアプリのアイコンバッジが実際の未読と食い違い、消えなくなる原因を突き止め、バッジ数を状態から再計算して同期するSource of Truth設計を、動くコードと実運用の落とし穴つきで整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →