Jewelry AI・ホーム画面
ホーム画面は、ある一つの部分でだけ障害を報告します
一つの画面の三つの部分が、それぞれ別の供給元から描かれています。アプリの中に持っているリスト、サーバーだけが渡せる設定、そして端末上のキャッシュです。障害はこの三つに違う形で届きます。画面が半分は正常で半分は壊れて見えるのは、そのためです。
一つの画面に三つの供給元
ホーム画面は一つの答えから組み立てられているわけではありません。カテゴリー一覧はアプリの中に持つリストから、ツールの行はサーバーの設定だけから、最近の生成結果の帯はまず端末上の保存領域から読まれます(アプリケーションのソースで2026年8月に確認)。
そのため障害は、三つの部分に等しくは届きません。ツールの行は設定なしでは何も描けないので、失敗を報告します。カテゴリー一覧は4枚のカードを描くのにサーバーを必要としないので、そのまま描きます。以前の作業が控えられている帯はキャッシュから埋まり、いつもどおりに見えます。
接続についての表明は、一か所だけで行われます。画面の上端に出るバナーです(components/ui/offline-banner.tsx:17-22)。その下の部分は、それぞれの挙動をそのまま保ちます。
半分は正常で半分は壊れている画面とは、この差が見えている状態です。別々の障害がいくつも起きているのではなく、一つの障害が三つの供給元に届いているだけです。
画面の各部分と、その供給元と、障害が及ぼすこと
一つの部分だけから結論を出す前に、この表を上から下まで読んでください。
| 画面の部分 | 内容の供給元 | サーバーに接続できないとき |
|---|---|---|
| 接続のバナー | 接続についてのアプリ自身の判断 | 画面の上端に表示されます |
| カテゴリー一覧 | サーバーの設定。代替としてアプリの中に持つリスト | 4枚のカードを描きます。読み込み状態もエラー状態もありません |
| ツールの行 | サーバーの設定のみ | ツールを読み込めなかったと表示し、再試行ボタンを出します |
| 最近の生成結果の帯(以前の作業があるアカウント) | 端末上のアカウント単位の保存領域。サーバーの答えより先に読まれます | キャッシュから埋まります。画像が表示されないものがあります |
| 最近の生成結果の帯(作業が一つもないアカウント) | どちらの供給元にも渡せるものがありません | エラーの箱と再試行ボタンを表示します |
障害を報告する唯一の部分がツールの行です
同時に、悲観的に書かれている部分でもあります。サーバーから答えがないとき、ツールは開放ではなく閉じているものとして報告されます。
- 読み込み中と、接続できないは、別の絵です。
- スケルトン表示のカードが4枚なら、設定はまだ読み込み中です。読み込み失敗の表示と再試行ボタンなら、取得できなかったということです。実際の利用可否が現れるのは、設定が届いたあとの三つ目の状態だけです(apps/jewelry-mobile/src/features/home/tools-section.tsx)。
- 設定がないことは、閉じていることとして数えられます。
- 利用可否はサーバーの設定だけから決まり、設定がない場合は楽観的に開放されたツールではなく、利用不可のツールになります(apps/jewelry-mobile/src/features/generation/tools.ts)。
- 読み込み中が近日公開に見えることは、もうありません。
- tools-section.tsxに記録された修正(コミット81f8fff)が、読み込み中の状態と接続できない状態を分けました。それ以前は、設定が届く途中で4つのツールすべてが近日公開として表示されていました。これは過去の挙動であり、いま見えているものではありません。
- どのツールが開いているかは、アプリケーションからはまったく読み取れません。
- それは問い合わせた時点のサーバーの設定に完全に依存するため、コードもこのページもそれを述べられません。この行は答えを表示する場所であって、答えの出どころではありません。
カテゴリー一覧がそろって見え続ける理由
一覧はサーバーが開放しているカテゴリーを問い合わせ、その答えが空か得られないときは、代わりにアプリの中に持つリストを使います(apps/jewelry-mobile/src/features/generation/config.ts)。目に見える結果は、どんな状態でも4枚のカードです。
並び順もアプリのものです。サーバーがどの順で送っても、リング、ブレスレット、ネックレス、ピアス・イヤリングの固定された順になります(config.ts:43。この挙動はhome-registry.test.ts:24で固定されています)。
したがって、カードがあることは、そのカテゴリーで画像を生成できるという約束ではありません。それを決めるのは作成フローの中でのツールの利用可否であり、サーバーに接続できないあいだ、その答えは端末上に存在しません。
一覧には独自の読み込み状態もエラー状態もありません(apps/jewelry-mobile/src/features/home/category-grid.tsx)。障害を報告する手段を持たないため、その落ち着いた見た目は、ツールの行に反対する第二の意見ではありません。
帯が障害を報告する唯一の分岐
帯の空の領域には二つの分岐があります。サーバーに接続できず、かつ生成ジョブが一つも保持されていないときは、エラーの箱と再試行ボタンが出ます(apps/jewelry-mobile/src/features/home/recent-generations.tsx)。サーバーにつながっていて生成ジョブがないときは、これとは別の、帯そのものを扱うページに属する通常の空の表示になります。
つまりエラーの箱は、二つのことを同時に述べています。サーバーに接続できなかったこと、そして代わりに描くキャッシュもなかったことです。以前の作業があるアカウントは、この分岐には入りません。
ホーム画面に、下に引っ張って更新する操作はありません。スクロール領域に更新用のコントロールが渡されていないためです(components/ui/screen-container.tsx:59-66)。失敗した部分の中にある再試行ボタンが、もう一度求めるための手動の道であり、同じことをする操作は存在しません。
この画面が誘うのに、根拠のない結論
どれも画面に出ているものから自然に出てくる結論で、どれも隣に書いた理由で誤りです。
4枚のカテゴリーカードを、4つの動いているカテゴリーとして読む。
一覧はアプリ自身のリストに代替されます。実際に何を生成できるかは、カードがあることではなくツールの設定が決めます。
ツールの読み込み失敗を、機能の取り下げやアカウントの制限として読む。
供給元がサーバーの設定だけである部分の、エラー状態です。隣にあるボタンで再試行します。
埋まった帯を、作業が端末に保存されている証拠として読む。
アカウント単位の保存領域のオフライン用キャッシュです。記録そのものはサーバー側にあります。
古いカードの代替表示を、削除された画像として読む。
キャッシュされた画像のアドレスには有効期限があるため、項目が一覧に残ったまま、そのアドレスだけが解決しなくなることがあります。
落ち着いたカテゴリー一覧を、接続が正常である証拠として読む。
一覧には読み込み状態もエラー状態もないため、どちらの場合も同じに見え、サーバーについて何の情報も持ちません。
この画面から分からないこと
いずれもホーム画面が知らないことであり、どう読み取っても得られません。
- 生成に使えるツールがどれか。それは問い合わせた時点のサーバーの設定であり、アプリケーションからは読み取れません。
- 見えているカテゴリーで画像を生成できるかどうか。
- サーバーに接続できなかった理由や、いつ答えるようになるか。
- この端末にたまたまキャッシュされているもの以外の、作業の履歴。
- 帯がどう構成され、どんな説明が付き、時間がどう表示されるか。その規則は帯そのものを扱うページに属します。
- サインアウトされることや、ようこそ画面に戻ることについて。これはホーム画面の挙動ではなく、アカウントのライフサイクルです。
よくある質問
ツールの部分は読み込めなかったと出ているのに、カテゴリーは問題なさそうです。アプリが壊れているのでしょうか。
壊れていません。二つの部分は供給元が違います。ツールの行はサーバーの設定だけから決まるため(apps/jewelry-mobile/src/features/generation/tools.ts)、答えがなければ読み込み失敗の状態を表示します。カテゴリー一覧はアプリの中に持つリストに代替され、独自のエラー状態を持たないため(apps/jewelry-mobile/src/features/home/category-grid.tsx)、どちらにしても4枚のカードを描きます。接続についてのこの画面の唯一の表明は、上端のバナーです。
4枚のカテゴリーカードは、4つのカテゴリーすべてで生成できるという意味ですか。
いいえ。一覧はサーバーが開放しているカテゴリーを表示し、その答えが空か得られないときはアプリ自身のリストを使います(apps/jewelry-mobile/src/features/generation/config.ts)。並びは常にリング、ブレスレット、ネックレス、ピアス・イヤリングの固定順です(config.ts:43)。カテゴリーで画像を生成できるかどうかは、作成フローでのツールの利用可否が決める別の答えです。
接続がなくても以前の生成結果が表示されます。端末に保存されているのですか。
見えているのは、サーバーの答えより先に読まれるアカウント単位のキャッシュです(apps/jewelry-mobile/src/features/generation/store.tsx)。コードはこれをオフラインの場合として扱っています。作業の記録はサーバー側にあり、端末上の複製はこの状況のために存在します(apps/jewelry-mobile/src/features/generation/storage-keys.ts:16-17)。キャッシュされた画像のアドレスには有効期限があるため、古いカードは代替の表示に切り替わることがあります。
下に引っ張って更新できません。ホーム画面にもう一度試させるにはどうしますか。
失敗した部分にある再試行ボタンを使ってください。ホーム画面のスクロール領域には更新用のコントロールが渡されていないため(components/ui/screen-container.tsx:59-66)、下に引いても何も起きません。ツールの利用可能や近日公開の状態に意味があるのは、設定が実際に届いたあとだけです。それまでアプリは、開いていると仮定せずに、閉じているものとして報告します。