同じcontainerIDには、画面が変わっても必ず同じcontainerName文字列を使い回す。これがEvenHub SDKで筆者が踏んだ実機限定バグの結論だ。
EvenG2向けの常駐アプリを開発中、シミュレータでは問題なく動いていた。ところが実機で「開始」しても、画面に何も表示されなくなる不具合に遭遇した。原因の見当がつかず、十数通りの仮説を1つずつ実機で切り分ける羽目になった。
この記事では、この不具合が実際にどう発生し、何が原因で、どのように特定に至ったのかを実践ログとして記録する。
この記事でわかること(2026年9月時点の検証)
- containerIDとcontainerNameの正しい使い方
- なぜシミュレータでは検知できないのか
- 原因特定までに潰した仮説と外れ方
- 実機限定の不具合を早く見つけるコツ
containerIDにはcontainerNameを固定して使う
対策は、containerIDごとにcontainerNameを1つに固定し、画面が変わっても同じ名前を使い回すことだ。

例えばcontainerID:1は常にcontainerName:「app-header」とする。一覧画面でも詳細画面でもエラー表示でも同じ名前のままにし、変えるのは中身のcontentだけにする。このルールを守るように直してからは、同じ症状は発生しなかった。
シミュレータでは再現しない実機限定の不具合
このバグはシミュレータでは一切検知できず、実機に転送してはじめて発症する。開発中に一度もシミュレータで異常が出なかったことが、原因特定を遠回りさせた最大の要因だった。
画面に何も表示されなくなる仕組み
同じcontainerIDに対し、一覧・詳細・エラーといった画面ごとに異なるcontainerName文字列を割り当てる。すると実機側でcreateStartUpPageContainerやrebuildPageContainerの呼び出しが失敗する。
結果、画面は完全な無表示になる。エラーが目に見える形で出るわけではなく、ただ何も映らなくなるだけなので、原因の切り分けがさらに難しくなる。

原因特定までにやった十数通りの切り分け
原因の特定には丸1日以上かかった。コードの中身だけでなく、コード外の要因まで含めて十数通りの仮説を1つずつ実機で潰していく作業になった。
空振りに終わった仮説の数々
原因を探るなかで、次の候補を1つずつ実機で検証しては外していった。
- LAN IPの誤り
- 実機で未検証だった記号の使用
- EvenHub側の招待・インストール状態
- パッケージ化ツールのバージョン
- package_idやアプリ名の変更
- containerTotalNumが2個か3個か
- fetchの有無
- クリックとダブルクリックの処理の有無
ファイル名をnotifyDemo.tsからinboxDemo.tsへ退避する対症療法も試したが、根本原因にはたどり着けなかった。「ほぼ空のコンテナを追加すると実機でinvalid判定になるのではないか」という仮説も当初は有力視していた。これも後に誤りだと判明している。
決め手になった2つの手がかり
決め手になったのは2つの事実だった。1つは、実績のあるglance用のコードをそのままnotifyの選択肢で呼ぶと問題なく動くこと。もう1つは、一覧・詳細の2画面を切り替える構造を導入した瞬間に不具合が再発することだ。
この2点を重ねて見比べ、一覧画面と詳細画面とでcontainerNameを別の文字列にしていたことに気づいた。そこでようやく原因にたどり着いた。
EvenG2の実機不具合を早く見つけるには
シミュレータでは問題なく動いていたのに、実機ではあっさり詰まった。それ以来、実機でしか出ない不具合がある前提で開発を進めるようにしている。
今回の教訓は、コード外の要因まで疑いはじめる前に、まず直前に加えたコード変更から見直すことだった。今回も、問題なく動いていたコードに画面切り替えの構造を足した瞬間に不具合が再発したという事実が、最終的な決め手になった。実機限定の不具合に当たったら、直近の差分を疑うところからはじめたのが、結局は一番の近道だった。