◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Expo SDK 58 が 10/15 に正式リリースされました(Beta は 09/15 から)。上げる前に依存の対応状況を確認しましょう●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 — Expo SDK 58 が 10/15 に正式リリースされました(Beta は 09/15 から)。上げる前に依存の対応状況を確認しましょう●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-10-19上級

チュートリアルの画像が欠けただけで、アプリごと立ち上がらなくなる設計でした。なくても動くはずの機能を、起動の必須の道から外します

一部の端末でだけ、アプリが一度も立ち上がらない。原因は、チュートリアルの画像が欠けると画面の生成ごと失敗する設計でした。任意の機能を起動の必須の道から外す関数と、出荷前の検査を組みました。

Expo222起動エラー処理設計12チュートリアル24

✦ プレミアム記事

一部の端末で、アプリが一度も立ち上がらないという報告を受けました。ところが手元の端末では、何度起動しても普通に動いたのです。

こういうとき、原因は端末の側に探しに行きたくなります。機種、OS の版、メモリ。ところが原因は、自分の設計のほうにありました。チュートリアル(導入画面、いわゆるオンボーディング)で見せる画像を、画面の定義の中に固定で書いていたのです。その画像が欠けた端末では、チュートリアルが出ないのではなく、画面を作る処理そのものが失敗していました。

「なくても動くはずのもの」は、「なければ動かないもの」と同じ道に載せないようにします。 壁紙アプリでの出来事から私が引いた線は、これ一本です。この記事は、その線を Expo のプロジェクトで引き直す方法を、動かして確かめたコードと一緒に書き残したものです。

症状は「落ちる」ではなく「始まらない」でした

最初に困ったのは、手がかりの少なさです。起動したあとに落ちるのではなく、そもそも最初の画面が組み上がらなかったのです。使われ方の途中で出る不具合なら、操作の履歴から辿れます。ところが利用者に残るのは、「開かない」という一言だけでした。

手元で再現しなかった理由も、あとから見れば単純です。私の端末には、その画像が揃っていたからです。再現しなかったのは、コードが正しいからではなく、私の端末が条件を満たしていたからでした。 この区別を最初につけていれば、機種や OS の版を調べる時間を、かなり省けたはずです。

原因を一文にする

原因は、次の一文にまとめられます。画面を作る必須の処理が、チュートリアルの画像という必須ではないものに依存していました。

起動のとき、アプリは多くのことをします。そのうち、欠けたらアプリが成り立たないものと、欠けても本体は動くものが混ざっています。当時の私は、その二つを区別せずに、一本の道に並べていました。

起動の途中でやること欠けたら扱い
最初の画面の骨格を作る何も表示できません必須。失敗は失敗として扱います
設定や保存済みの状態を読む初期値で動けます既定値に倒します
チュートリアル(文章と画像)出さなくても使えます任意。失敗しても本体を巻き込みません
広告の準備出さなくても使えます任意。待たせません
解析の初期化記録できないだけです任意。失敗を黙って捨てません

この表を書いてみて、私は少し恥ずかしくなりました。右の列を埋めるだけで、直す場所が見えるからです。書く前の私は、チュートリアルを「アプリの一部」と思っていて、「アプリが動くための条件」とは別のものだと考えていませんでした。

✦

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

この記事の続きを読む

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

この記事で得られること
✦自分のアプリの起動経路に載っている「なくても動くはずのもの」を洗い出し、1つ欠けただけで全体が止まる箇所を、出荷前に見つけられるようになります
✦任意の機能を、失敗しても待たされても本体を巻き込まずに実行する小さな関数を、自分の Expo プロジェクトにそのまま入れられるようになります
✦手元の端末では一度も再現しない起動失敗を、条件をわざと欠かして数分で再現し、検査スクリプト一本で再発を止められるようになります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-08-04
名前が20文字ちょうどでも保存できない — 文字数の数え方を1か所に決めるまでの実測
絵文字や合成文字が入ると、クライアントとサーバーで文字数が食い違います。4つの数え方をNode v22で実測し、切り詰め2,000件の破損率75.6%・UTF-8往復での置換文字化36.1%という結果から、カウントの正本を1か所に置く設計へ至るまでをまとめました。
⬡ 開発ツール2026-06-22
壊れたキャッシュで毎回起動時に落ちるアプリ——ユーザーが自力で抜け出せる「セーフモード起動」を設計する
永続化したキャッシュが壊れて起動のたびに同じ場所で落ちると、ユーザーには再インストールしか残りません。アプリ自身が早期クラッシュの連続を数え、対話可能になって初めて起動を確定し、危険な状態だけを段階的にリセットするセーフモードを、Expo(React Native)の実装で設計します。
⬡ 開発ツール2026-10-15
EXPO_PUBLIC_ の値が、開発では読めて本番だけ undefined になる書き方を、変換結果で見分けます
API の URL が開発中は読めるのに、ビルドした途端に undefined になる。原因は process.env の書き方でした。babel-preset-expo の変換結果を開発・本番で並べ、置き換わる書き方と残ってしまう書き方を表にしました。