DEV Community 日本語
フォロー
私たちのElectronレンダラーにはプリロードスクリプトがなく、127.0.0.1上の28個のHTTPエンドポイントと通信しています。
Electronアプリケーションは通常、プリロードスクリプトを使用して、レンダラープロセスに特権的なElectron APIへのアクセスを許可します。しかし、Notifioのメインウィンドウはこのアプローチを避け、ノード統合とコンテキスト分離を無効にしています。代わりに、レンダラーはメインプロセス内で実行されるローカルHTTPサーバーによって提供される標準的なWebページとして扱われます。このサーバーは、UIとアプリケーションの監視ロジック間の完全なインターフェースを形成する28のルートを公開しています。このアーキテクチャの選択は、いくつかの要因によって推進されました。第一に、レンダラーは実際にWebアプリとして機能し、標準的なWebテクノロジーで構築されており、Electronを認識していません。第二に、HTTPを使用することで、CRUD操作などのAPIインタラクションのための構造化された既存の語彙が提供され、カスタムIPCチャネルに必要な継続的な設計作業を回避できます。第三に、レンダラーが頻繁にリロードされるメインウィンドウの使い捨ての性質は、各ロード時にUIが簡単に状態を再構築できるHTTP APIから恩恵を受けます。ライブアップデートは、プッシュメカニズムではなく、これらのHTTPルートをポーリングすることによって処理されます。メインプロセス内にサーバーを配置することで、シリアライゼーションの境界や個別のプロセス管理の必要性がなくなり、その操作が簡素化されます。このローカルHTTP APIの認証は、ループバックインターフェースにのみバインドすることによって強制され、外部ネットワークアクセスを防ぎます。HTTPサーバーはクリーンな分離を提供しますが、ユーザーログインのための新しいブラウザウィンドウを開くなどの特定のElectron固有の機能は、小さなインプロセスブリッジを介して管理されます。このブリッジにより、ルートハンドラはサーバーモジュール自体がElectronをインポートすることなく、Electronに依存するタスクを委任できます。このHTTP中心の設計の唯一の例外はレコーダーウィンドウであり、プリロードスクリプトとIPCを使用します。これは、サードパーティのサイトをロードし、ページインタラクションを観察する必要があるため、プリロードスクリプトがサンドボックス化された環境でより適しているため必要です。違いは、レンダラーがアプリに