Electron の Tray が GC される問題
Electron の Tray のインターフェースは独特で、 app の何らかのプロパティに紐付けることなく tray オブジェクトのメソッドを呼び出すだけで表示されるようになる。
それが理由の一つとなって tray オブジェクトが GC されるとトレイから消えるという仕様になっている。
よって、上記の example にもある通り、トップレベルでオブジェクトを宣言し、各種 app の初期化イベントハンドラでそれを埋めることとし、回収されないようにする、というのが公式のやり方だ。
具体的にはトレイが一瞬表示されてすぐに消えるような挙動となる。詳しくは調べていないがこの boilerplate の webpack の設定であったりがそういう挙動を与えているのだろう。
ということで、単にトップレベルで宣言するだけでなく、 workaround として適当に tray に対するイベントリスナの追加等をすることで回収されないようにし、機能させることができた。